Vim操作のまとめ macOS/Linux/Unixシェルコマンド

Vim操作まとめ

以下は、よく使われるまたは便利な Vim の操作をまとめたものです。

カーソル移動

入力動作備考
Ctrl + u半画面分上にスクロール
Ctrl + d半画面分下にスクロール
ggファイルの先頭に移動
Gファイルの末尾に移動
$行の最後へ移動
0 (ゼロ)行の先頭へ移動
^行の最初の非空白文字へ移動
w次の単語の先頭へ移動
b前の単語の先頭へ移動
}次の段落へ移動
{前の段落へ移動

コマンド

入力動作備考
:wファイルを保存
:qVim を終了
:wq保存して終了
ZZ変更を保存して終了:wq と同等
ZQ変更を破棄して終了:q! と同等

編集

入力動作備考
i挿入モードへ移行
aカーソル位置の後ろから挿入モードへ
o新しい行を追加して挿入モードへ下に新しい行
O新しい行を追加して挿入モードへ上に新しい行
xカーソル位置の文字を削除
dwカーソル位置の単語を削除d は削除コマンドの
プレフィックス
ddカーソル位置の行を削除
gg + d + G内容をすべて削除
yyカーソル位置の行をコピーy はコピーのコマンド
pコピーした内容を貼り付け
/検索語文書内での検索
n次の検索結果へ移動
N前の検索結果へ移動
uアンドゥ直前の操作を元に戻す
Ctrl + rリドゥアンドゥを元に戻す

sudoを忘れてvim実行後にreadonlyでも保存する

以下のコマンドをvimのコマンドモードで使用します。

vim
:w !sudo tee %

このコマンドはどのように機能するかというと、wコマンドはファイルを書き込むためのものですが、!を使用することで外部コマンドを実行できます。sudo tee %は現在のファイル(%が現在のファイル名に展開されます)に対してsudo権限でteeコマンドを実行し、入力をファイルに書き込みます。これにより、読み取り専用で開いてしまったファイルも、sudo権限があれば保存することができます。

成功すると、ファイルはsudo権限で上書き保存されます。ただし、この操作を行うには、sudoを使用する際のパスワード入力が求められる場合があります。また、この方法を使うことでファイルの所有者やパーミッションが変わる可能性があるので注意が必要です。

解説

:w !sudo tee % コマンドは、Vim で読み込み専用ファイルを開いた後に編集内容を保存したいときに特に便利なコマンドです。このコマンドの動作を理解するために、それぞれの部分を分解してみましょう。

  • :w コマンドは、現在の編集内容をファイルに書き出します。
  • ! は、外部コマンドを実行するためのプレフィックスです。
  • sudo は、スーパーユーザー権限でコマンドを実行するためのコマンドです。
  • tee コマンドは、標準入力から受け取った内容をファイルに書き込みつつ、標準出力にも出力します。
  • % は、Vim で現在編集中のファイル名に展開されます。

つまり、:w !sudo tee % コマンドは、Vim の現在の編集内容をスーパーユーザー権限で現在編集中のファイルに保存するために使用します。この方法は、ファイルのパーミッションが原因で直接ファイルを保存できない場合に特に便利です。

特定の行へ移動する

Vimで特定の行へ移動するには、コマンドモードで行番号を指定してジャンプするコマンドを使用します。以下の方法で特定の行に直接移動できます。

  • :<行番号> を入力してEnterキーを押します。たとえば、50行目に移動したい場合は、:50 と入力します。
  • 通常モードで 50G もしくは 50gg を使用しても、50行目にジャンプできます。この場合、50は目的の行番号に置き換えてください。

これらのコマンドを使用すると、大きなファイル内でも素早く特定の位置に移動することができます。

バッファ間の素早い移動

入力動作
:ls開いているバッファのリストを表示
:b <番号>指定番号のバッファへ移動
:bn次のバッファへ移動
:bp前のバッファへ移動
:bd現在のバッファを閉じる
:bnext次のバッファへ移動(:bn と同じ)
:bprev前のバッファへ移動(:bp と同じ)
:bfirst最初のバッファへ移動
:blast最後のバッファへ移動
:bdelete指定のバッファを閉じる(複数可能)


複数のファイルをバッファとして開いている場合に、これらのコマンドで素早くバッファ間を移動できます。E37: No write since last change (add ! to override) エラーが出た場合は、:wで一旦保存したからバッファ移動するとエラーの解消ができます。

バッファとは

Vim での「バッファ」は、開いているファイルの内容をメモリに保持するための領域を指します。ファイルを開くと、Vim はその内容をバッファに読み込み、編集作業はこのバッファ上で行われます。

バッファを活用することで、複数のファイルを同時に開いて作業することができ、効率的にファイル間を移動しながら編集を進めることが可能になります。たとえば、コードを書いているときに参照用のドキュメントを別のバッファで開いておくことができます。また、バッファを使って一時的なメモを取ることもできます。

ファイル内の文字列を一括置換

vim
:%s/検索語/置換後の語/g

現在開いているファイル内で検索語を置換後の語で一括置換します。g フラグはファイル内の全てのインスタンスに対して置換を行います。

セッションの保存と復元

  • 保存: :mksession ~/session.vim
  • 復元: vim -S ~/session.vim

Vim の現在のセッション(開いているタブ、ウィンドウ、レイアウトなど)を保存し、後で再開することができます。これは複数のファイルを同時に編集しているときに特に便利です。

関連記事

最後までご覧いただきありがとうございます!

▼ 記事に関するご質問やお仕事のご相談は以下よりお願いいたします。
お問い合わせフォーム