Vim完全バイブル 第2章 高度な編集

「Vim完全バイブル」のメモの続きです。
今回はより高度な編集方法についてです。
できるだけ少ないキータイプでVimを操作することを目指します。
なお、今回は第2章には載ってないことも一部補足してあります。


「第2章 高度な編集」の内容は以下の通りです。

  • 行番号表示
  • 移動
  • テキストの編集
  • ダイグラフ
  • キーボードマクロ
  • 補足

行番号表示

'number'オプションをonにすると、画面左側に行番号が表示されるようになる。非常に便利。
以下のコマンドを実行すると、行番号表示が有効になる。

:set number

行番号表示をやめるには、以下のコマンドを実行する。

:set nonumber

この段階ではVim完全バイブルには載っていないが、Vim起動時に毎回実行しておきたいコマンドは~/.vimrcに記述しておくとよい。例えば、~/.vimrcに":set number"と書いておくと、Vimが立ち上がると同時に~/.vimrcのコマンドが実行され、行番号表示が有効になる。

移動

カーソル移動

w 次の単語の最初の文字に移動
b 前の単語の最初の文字
$ 行末に移動
0 行頭に移動
^ 行頭の空白でない文字に移動


行内での検索移動

fx カーソル位置から行を右に検索し、最初に見つかったxの位置に移動
Fx カーソル位置から行を左に検索し、最初に見つかったxの位置に移動
tx カーソル位置から行を右に検索し、最初に見つかったxのひとつ前の位置に移動
Tx カーソル位置から行を左に検索し、最初に見つかったxのひとつ前の位置に移動

xの代わりにを入力すると、検索コマンドを中止することができる。これに限らず、Vimではほとんどの操作をでキャンセルすることができる。


特定の行に移動

nG n行目に移動
gg 1行目に移動
G 最終行に移動


その他

zz カーソル位置の行を画面の中央に表示する
CTRL-U 画面を半分スクロールアップする
CTRL-D 画面を半分スクロールダウンする
CTRL-G 現在のカーソル位置の情報を表示する

テキストの編集

テキストの挿入(挿入モードに移行)

i カーソル位置にテキストを挿入する
I 行頭の空白でない箇所からテキストを挿入する(^Iと同じ)
gI 行頭にテキストを挿入する(0iと同じ)
a カーソル位置の次の位置にテキストを挿入する
A 行末にテキストを挿入する($aと同じ)
o カーソル位置の下に新しい行を追加し、テキストを挿入する
O カーソル位置の上に新しい行を追加し、テキストを挿入する


テキストの削除

dw カーソル位置の単語を削除する
d3w カーソル位置から3単語を削除する
d$, D カーソル位置から行末まで削除する
dd カーソル位置の行を削除する
d{移動系コマンド} カーソル位置から移動系コマンドの移動先までを削除する


テキストの変換(範囲を削除して挿入モードに移行)

cw カーソル位置の単語を書き換える
c3w カーソル位置から3単語を書き換える
c$, C カーソル位置から行末まで書き換える
cc カーソル位置の行を書き換える
c{移動系コマンド} カーソル位置から移動系コマンドの移動先までを書き換える


文字の置き換え

rx カーソル位置の文字をxに置き換える
5rx カーソル位置から5文字をxに置き換える
~ カーソル位置の文字の大文字・小文字を入れ替え、カーソルをひとつ右に移動する


その他

. 直前の編集コマンドを繰り返す
J カーソル位置の行と次の行を連結する

ダイグラフ

§といったようなキーボードにない文字は、2文字で1文字を示すダイグラフを使って入力する。
どの2文字がどの文字に対応しているかは、以下のコマンドを使って確認することができる。

:digraphs

ダイグラフを使って文字を入力するには、挿入モードでCTRL-Kを入力した後に対応する2文字をタイプする。
例えば、§にと入力するにはCTRL-K S Eとタイプすればよい。

キーボードマクロ

キーボードマクロの概要

キーボードマクロを使うと、一連の操作を記録させて何度も呼び出すことができるようになる。
マクロを記録するには、qを入力した後にマクロを割り当てるキーをタイプし、記録させたい一連の操作を入力する。そして、qを入力して記録を終了する。

q{割り当てキー}{記録させる操作}q

マクロを実行するには、@を入力した後に、マクロを割り当てたキーを指定する。

@{割り当てキー}

なお、マクロ記録中の操作もすべてカーソル位置やテキストに反映されるので注意。

キーボードマクロの例

例えば、以下のテキストについて、最初の行の3文字目「d」にカーソルがあるとする。

stdio.h
fcntl.h
unistd.h
stdlib.h

以下のようにキーを入力すると、

qaI#include <A>jq

最初の行が編集されると同時に、aキーにマクロが割り当てられる(この時点でカーソル位置は2行目の行末)。

#include 
fcntl.h
unistd.h
stdlib.h

そして、@aを実行すると、先ほど記録した操作が実行され、以下のようになる(カーソル位置は3行目の行末)。

#include 
#include 
unistd.h
stdlib.h

さらに、2@aを実行すれば、残りの2行も同様に編集される。

#include 
#include 
#include 
#include 

補足

以下の事項はVim完全バイブルの第2章には載っていませんが、ちょっと補足したいので書いておきます。

「単語」について

wbは'iskeyword'オプションで指定された記号と文字の組み合わせを一単語とみなす。
'iskeyword'はデフォルトでアルファベット、数字、アンダースコア、ASCIIコードが192〜255の国際文字(日本語の場合は半角カタカナなど)が指定されている。

iskeyword=@,48-57,_,192-255

これに対し、WBは空白以外のすべての文字記号の組み合わせを一単語とみなす。
例えば、以下の行頭にカーソルがある場合、wを入力すると「,」に、Wを入力すると「w」にカーソルが移動する。

Hello, world!
c コマンドを使いこなす

cテキストの削除挿入モードへの移行を一度に行ってくれるので、使いこなせるとかなり便利。例えば、

Hello, world!

の行頭にカーソルがあるとき、WcwVimと入力するだけで、

Hello, Vim!

に書き換えることができる。

今回はここまで

次回は「第3章 検索」についてまとめる予定です。