Vim操作のまとめ macOS/Linux/Unixシェルコマンド
Vim操作まとめ
以下は、よく使われるまたは便利な Vim の操作をまとめたものです。
カーソル移動
入力 | 動作 | 備考 |
---|---|---|
Ctrl + u | 半画面分上にスクロール | |
Ctrl + d | 半画面分下にスクロール | |
gg | ファイルの先頭に移動 | |
G | ファイルの末尾に移動 | |
$ | 行の最後へ移動 | |
0 (ゼロ) | 行の先頭へ移動 | |
^ | 行の最初の非空白文字へ移動 | |
w | 次の単語の先頭へ移動 | |
b | 前の単語の先頭へ移動 | |
} | 次の段落へ移動 | |
{ | 前の段落へ移動 |
コマンド
入力 | 動作 | 備考 |
---|---|---|
:w | ファイルを保存 | |
:q | Vim を終了 | |
: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のコマンドモードで使用します。
: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 はその内容をバッファに読み込み、編集作業はこのバッファ上で行われます。
バッファを活用することで、複数のファイルを同時に開いて作業することができ、効率的にファイル間を移動しながら編集を進めることが可能になります。たとえば、コードを書いているときに参照用のドキュメントを別のバッファで開いておくことができます。また、バッファを使って一時的なメモを取ることもできます。
ファイル内の文字列を一括置換
:%s/検索語/置換後の語/g
現在開いているファイル内で検索語を置換後の語で一括置換します。g フラグはファイル内の全てのインスタンスに対して置換を行います。
セッションの保存と復元
- 保存: :mksession ~/session.vim
- 復元: vim -S ~/session.vim
Vim の現在のセッション(開いているタブ、ウィンドウ、レイアウトなど)を保存し、後で再開することができます。これは複数のファイルを同時に編集しているときに特に便利です。
.vimrc で Vimの表示を整える
Vimで表示した際にUTF-8の日本語が文字化けする
vi ~/.vimrc で以下を追加します。.vimrc が存在しなければ、新規で作成しましょう。" 日本語の文字化け対策
set encoding=utf-8
set fileencodings=utf-8
set fileencoding=utf-8
set termencoding=utf-8
ハイライト表示(プログラムとコメントに色をつけたい)
vi ~/.vimrc で以下を追加します。" ハイライト表示
syntax on
▼ こんな感じで色がつきます。