Vim のモードを切り替え、基本的な編集コマンドを使用し、検索、置換、コードのコメントアウトなどの一般的なタスクを実行します。
インストール
Vim は、ほとんどの Linux システムにプリインストールされています。vim --version を実行して、インストールされているバージョンを確認します。本トピックでは、Vim 8.0 を例として使用します。コマンドや機能は、他のバージョンでは異なる場合があります。
VIM - Vi IMproved 8.0 (2016 Sep 12, compiled Aug 10 2022 11:26:47)
Included patches: 1-1763
Modified by OpenAnolis Community
Compiled by OpenAnolis Community
Enormous version without GUI. Features included (+) or not (-):
+acl +farsi +mouse_sgr -tag_any_white
......
モードの切り替え
vim filename を実行して、ノーマルモードでファイルを開きます。ファイルが存在しない場合、Vim は新しいファイルを作成します。次の表は、各モードとモード間の切り替え方法について説明します。
|
モード |
機能 |
モードの切り替え |
|
ノーマルモード (Normal Mode) |
文字または行のコピー、貼り付け、削除を行います。 |
|
|
挿入モード (Insert Mode) |
カーソル位置に文字を挿入します。 |
ノーマルモードで、 説明
挿入モードでは、 |
|
置換モード (Replace Mode) |
カーソル位置の文字を上書きします。 |
ノーマルモードで、 説明
置換モードでは、 |
|
ビジュアルモード (Visual Mode) |
テキストを選択します。コピー、置換、削除などのコマンドは、選択されたテキストにのみ適用されます。 |
ノーマルモードで、 説明
ビジュアルモードでは、 |
|
コマンドモード (Command Mode) |
文字列の検索と置換、行番号の表示、変更の保存、終了を行います。 |
ノーマルモードで、 |
基本コマンド
ファイルを開く
-
vim filename:ノーマルモードでファイルを開きます。ファイルが存在しない場合、Vim は新しいファイルを作成します。 -
vim filename1 filename2:複数のファイルを開きます。-
Vim は最初に
filename1を開きます。:wで保存した後、:bnを実行してfilename2に切り替えます。filename2を:wで保存します。 -
:bp:前のファイルに切り替えます。 -
:ls:開いているすべてのファイルを一覧表示します。
-
-
:open filename3:コマンドモードで新しいファイルを開きます。まず、:wで現在のファイルを保存します。
カーソルの移動
-
ノーマルモード:
-
上矢印 /
k:上に移動します。 -
下矢印 /
j:下に移動します。 -
左矢印 /
h:左に移動します。 -
右矢印 /
l:右に移動します。
-
-
挿入モード:
-
矢印キーのみを使用します。
-
コンテンツの挿入
ノーマルモードで、i、I、a、A、o、O を押して挿入モードに入ります。
-
i:カーソルの前に挿入します。 -
I:行の先頭に挿入します。 -
a:カーソルの後に挿入します。 -
A:行の末尾に挿入します。 -
o:下に新しい行を開きます。 -
O:上に新しい行を開きます。
コピーと貼り付け
ノーマルモード:
-
yy:現在の行をコピーします。pで貼り付けます。 -
nyy:現在の行からn行をコピーします。たとえば、2yyは 2 行をコピーします。 -
p:カーソルの下に貼り付けます。 -
P:カーソルの上に貼り付けます。
削除
-
ノーマルモード:
-
x:カーソル位置の文字を削除します。 -
dd:現在の行を削除します。pで貼り付けます。 -
dk:現在の行とその上の行を削除します。 -
dj:現在の行とその下の行を削除します。 -
dG:現在の行からファイルの末尾まで削除します。 -
nx:カーソルからn文字を削除します。 -
ndd:現在の行からn行を削除します。pで貼り付けます。
-
-
挿入モード:
-
Deleteを使用して文字を削除します。
-
検索
ノーマルモード:
-
/text:textを検索します。デフォルトでは、検索は大文字と小文字を区別します。Enter キーを押すと、一致する箇所がハイライト表示されます。-
大文字と小文字を区別しない検索を行うには、
:set ignorecaseを実行します。大文字と小文字を区別する検索に戻すには、:set noignorecaseを実行します。
-
-
n:次の一致箇所に移動します。 -
N:前の一致箇所に移動します。
置換
-
ノーマルモード:
-
r:カーソル位置の文字を置換します。 -
R:連続置換のために置換モードに入ります。Escを押して終了します。 -
cc:現在の行を削除して挿入モードに入ります。 -
:%s/oldtext/newtext/g:すべてのoldtextをnewtextに置換します。/gがない場合、各行の最初の一致のみが置換されます。
-
-
挿入モード:
-
古いコンテンツを削除して、新しいコンテンツを入力します。
-
アンドゥとリドゥ
ノーマルモード:
-
u:最後の変更をアンドゥします。 -
U:現在の行のすべての変更をアンドゥします。 -
Ctrl+r:最後にアンドゥした変更をリドゥします。
インデントと配置
-
ノーマルモード:
-
>>:現在の行を右にインデントします。デフォルトのインデント:8 スペース (1 タブ)。 -
<<:現在の行を左にインデントします。
-
-
コマンドモード:
-
:ce:行を中央揃えにします。 -
:le:行を左揃えにします。 -
:ri:行を右揃えにします。
-
コードのコメントアウト
-
大規模な置換を行う前にファイルをバックアップするか、アンドゥコマンド (
u) を使用して変更を元に戻します。たとえば、sudo cp /etc/text.txt /etc/text.txt.bakを実行してファイルをバックアップします。 -
誤ってコンテンツを削除しないように、Vim の正規表現構文を理解してください。Vim の正規表現では、
/は\/としてエスケープする必要があります。Regex101 などのツールで練習してください。 -
プログラミング言語に合わせてコメント記号を調整してください。
-
ビジュアルモード:
-
連続する複数行のコメントアウト
-
カーソルを上下に移動して、コメントアウトする行を選択します。
-
:を押してコマンドモードに入ります。Vim は自動的に:'<,'>を入力します。これは選択範囲を表します。 -
置換コマンドを入力します。たとえば、各行の先頭に
#を追加するには、s/^/#/を入力してEnterを押します。
-
-
すべてのコードをコメントアウト:
:%s/^/#/gは、すべての行の先頭に#を追加します。
-
-
挿入モード:
コメント記号を手動で入力して、コードをコメントアウトします。
保存と終了
-
保存:
:w -
終了:
:q -
保存して終了:
:wq、:x、またはZZ -
保存せずに強制終了:
:q! -
強制保存して終了:
:wq!
ドキュメントの暗号化
-
vim -x filename:暗号化してファイルを開きます。パスワードを設定してから、ファイルを保存すると暗号化が有効になります。次回以降にファイルを開くにはパスワードが必要です。 -
暗号化の解除:
-
:set key=を実行して、暗号化キーをクリアします。 -
:wqで保存して終了します。 -
vim filenameでファイルを再度開きます。パスワードの入力は求められません。
-
シェルコマンドの実行
-
!pwd:現在の作業ディレクトリを表示します。 -
!ls:現在のディレクトリ内のファイルを一覧表示します。
マルチウィンドウ編集
-
vim -o filename1 filename2:2 つのファイルを別々のウィンドウで開きます。各ウィンドウを個別に終了します。 -
Ctrl-W w:次のウィンドウに移動します。 -
Ctrl-W W:前のウィンドウに移動します。
ヘルプ
-
ターミナルで
vim --helpを実行して、Vim コマンドの構文を表示します。 -
ノーマルモード:
-
:help:Vim のヘルプドキュメント (読み取り専用) を開きます。:qで終了します。 -
:help i:iのヘルプを表示します。 -
:help yy:yyのヘルプを表示します。 -
:set nu:行番号を表示します。
-
使用例
設定ファイルの変更
Location を example.conf の 1 行目に挿入します。
-
vim example.confを実行して、ファイルを開きます。 -
カーソルを最初の文字に置き、
iを押して挿入モードに入ります。 -
Locationを入力して、Enter キーを押して改行します。 -
Escを押してノーマルモードに戻ります。 -
:wqを入力して保存して終了します。
対象行へのコンテンツの挿入
# を example.conf の 10 行目の先頭に挿入します。
-
vim example.confを実行して、ファイルを開きます。 -
:10を実行して、カーソルを 10 行目に移動します。 -
iを押して挿入モードに入ります。 -
#を入力します。 -
Escを押してノーマルモードに戻ります。 -
:wqを入力して保存して終了します。
検索してコンテンツを挿入
example.conf で、LoadModule rewrite_module modules/mod_rewrite.so を Include conf.modules.d/*.conf の後に挿入します。
-
vim example.confを実行して、ファイルを開きます。 -
対象の行を検索します:
/Include conf.modules.d/*.conf -
oを押して挿入モードに入ります。 -
LoadModule rewrite_module modules/mod_rewrite.soを入力します。 -
Escを押してノーマルモードに戻ります。 -
:wqを入力して保存して終了します。
コンテンツの削除
example.conf で、# を #Listen 12.34.XX:XX:80 行の先頭から削除し、Listen 80 行を削除します。
-
vim example.confを実行して、ファイルを開きます。 -
対象の行を検索します:
/#Listen 12.34.XX:XX:80。カーソルが#の位置に移動します。 -
xを押して#を削除します。 -
カーソルを
Listen 80の行に移動し、ddを押して削除します。 -
:wqを入力して保存して終了します。
docker-compose.yaml の編集
docker-compose.yaml を作成して編集します。

複数行コメントの削除
-
#が行の先頭にあり、その前にスペースまたはインデントがある場合を想定します。# This is a comment # Another comment # Yet another comment -
コメントを削除します。
:%s/^\s*#\s\?//パターンの説明:
-
^:行の先頭。 -
\s*:任意の空白文字 (インデントに対応)。 -
#:コメント記号。 -
\s\?:#の後にある省略可能なスペース1つ。 -
//:一致した部分を空の文字列に置き換えます (削除)。
このコマンドはファイル全体を処理します。結果:
This is a comment Another comment Yet another comment -
Vim のアップグレード
Vim のバージョンがニーズを満たさない場合は、次のコマンドでアップグレードします。
Alibaba Cloud Linux 3 および 2
sudo yum update vim
CentOS 7 および 8
sudo yum update vim
Fedora
sudo yum update vim
Ubuntu および Debian
sudo apt upgrade vim
openSUSE
sudo zypper update vim
トラブルシューティング
-
終了時に「No write since last change」が表示される:
-
原因:ファイルが変更されましたが、保存されていません。
-
解決策:
:wqで保存して終了するか、:q!で変更を破棄します。
-
-
テキストを入力できない:
-
原因:ビジュアルモードなど、挿入モード以外のモードになっている可能性があります。
-
解決策:
Escを押してノーマルモードに戻り、その後挿入モードに入ります。
-
-
ファイルを保存できない:
-
原因:現在のユーザーに書き込み権限がありません。
/etc/hostsや/etc/nginx/nginx.confなどのシステム設定ファイルには、スーパーユーザー権限が必要です。 -
解決策 1:
sudo vim example.confでファイルを開きます。 -
解決策 2:
:w !sudo tee %を使用して、管理者権限で保存します。または、sudo chownまたはsudo chmodでファイルの権限または所有権を変更します。
-
-
「.swp」ファイルが存在する:
-
原因:ファイルが別の Vim セッションで開かれています。
-
解決策:他のターミナルでファイルを編集していないことを確認します。他のターミナルで編集していない場合は、
.swpファイルをll -aで見つけて削除し、その後ファイルを再度開きます。または、:recoverを実行して、スワップファイルから復元します。
-