Vim完全バイブル 第4章 大きなサイズのテキストの編集および複数ファイルの編集

「Vim完全バイブル」のメモの続きです。
今回は大きなサイズのファイルの編集や、複数のファイルを編集するときに使うコマンドやオプションについてまとめます。


「第4章 大きなサイズのテキストの編集および複数ファイルの編集」の内容は以下の通りです。

  • 切り取り、貼り付け、ヤンク(コピー)
  • マーク
  • システムコマンドの利用
  • ファイルの扱い
  • 複数ファイルの扱い

切り取り、貼り付け、ヤンク(コピー)

Vimでの削除行為(dxなど)はすべて切り取りとして扱われる。


テキストの削除(切り取り)

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


切り取った文字列は以下のコマンドで貼り付けることができる。


テキストの貼り付け

p カーソル位置の次の位置に貼り付ける
P カーソル位置の次の位置に貼り付ける


ヤンク(コピー)は以下の通り。ヤンクしたテキストは同様にpPで貼り付けることができる。


テキストのヤンク

yw カーソル位置の単語をヤンクする
y3w カーソル位置から3単語をヤンク
y$ カーソル位置から行末までヤンクする
yy, Y カーソル位置の行をヤンクする
y{移動系コマンド} カーソル位置から移動系コマンドの移動先までをヤンクする

大文字のDCはそれぞれカーソル位置から行末までを対象(d$c$)とするのに対し、Yはカーソル位置の行全体をヤンク(yy)するので注意。

マーク

よく行き来するテキストの位置にマークを付けておくと、ファイル中でのカーソル移動が楽になる。
マーク関連のコマンドは以下の通り。
{mark}にはアルファベット小文字(aからzまで)のうち一文字を指定できる。


マーク

m{mark} カーソルの位置にマークとして{mark}を付ける
`{mark} マークとして{mark}を付けた位置にカーソルを移動する
'{mark} マークとして{mark}を付けた行の行頭にカーソルを移動する


`'は移動系コマンドであるため、例えばdcと組み合わせて、カーソルがある位置からマーク位置までのテキストを一度に編集することもできる。
なお、テキストの位置が移動しても、マークはテキストの同じ位置から動かないが、マークの付いたテキストを削除するとマークは削除される。

システムコマンドの利用

以下のようにすると、Vimからシステムコマンドを実行することができる。

!{移動系コマンド}{command}

カーソル位置から移動先までの範囲の内容を{command}の標準入力に渡して、その範囲の内容を{command}の結果で置き換える(filter)。


現在のカーソル行のみをシステムコマンドに渡す場合は以下のようにしてもよい。

!!{command}


例。
カーソル位置から10行目までの範囲をsortコマンドでソートする。

!10Gsort

カーソル位置の行をlsの結果と置き換える。

!!ls

Vim完全バイブルには上のように書いてあるが、lsの結果を挿入するだけなら以下のようにreadコマンドを使った方が良いかも。
こちらはカーソル行は削除されず、単にコマンドの出力結果が挿入される。

:r !ls

ファイルの扱い

ファイルを開いたり保存したりするためのコマンドは以下の通り。
[]で括られている部分は省略可能。
また、:で始まるコマンドはで確定する必要があるので注意。


ファイル関連のコマンド

:e[!] [{file}] ファイルを開く(!で現在開いているファイルの変更を破棄して強制的に開く)(edit)
:vi[!] {file} ファイルを開く(!で現在開いているファイルの変更を破棄して強制的に開く)
:view[!] {file} ファイルを読み取り専用で開く(!で現在開いているファイルの変更を破棄して強制的に開く)
:w[!] [{file}] ファイルを保存する(!で現在開いているファイルが読み取り専用でも強制的に保存)(write)


例。
foo.txtを開く(現在開いているファイルが保存済みor未編集の場合)。

:e foo.txt

現在開いているファイルの変更を破棄し、foo.txtを開く。

:e! foo.txt

現在開いているファイルを保存する。

:w

現在開いているファイルの内容をbar.txtに保存する。

:w bar.txt

現在開いているファイルを最後に保存したときの状態に戻す(開き直す)。

:e!

:viでできることは、:eでもできる(はず)。


なお、'autowrite'オプション(省略形は'aw')をオンにすると、ファイルの切り替えの時に編集済みの内容がファイルに自動的に保存されるようになる。

:set aw

autowriteをオフにする方法は以下の通り。

:set noaw

複数ファイルの扱い

Vimで複数ファイルを扱うときは、まずvimを立ち上げる時に編集したいファイルを複数指定する。
Vim起動時には最初に指定したファイルが開いた状態となる。

$ vim one.txt two.txt three.txt four.txt


編集するファイルの切り替えなどに使うコマンドは以下の通り。


複数ファイル関連のコマンド

:n[!] 次のファイルを開く(!で現在開いているファイルが未保存でも変更を破棄して強制的に開く)(next)
:wn 現在のファイルを保存して次のファイルを開く(wnext)
:N[!] 前のファイルを開く(!で現在開いているファイルが未保存でも変更を破棄して強制的に開く)(Next)
:pre[!] 前のファイルを開く(!で現在開いているファイルが未保存でも変更を破棄して強制的に開く)(previous)
:wN 現在のファイルを保存して前のファイルを開く(wNext)
:wp 現在のファイルを保存して前のファイルを開く(wprevious)
:rew 最初のファイルを編集する(rewind)
:fir 最初のファイルを編集する(first)(Vim6.x以降のみ)
:la 最後のファイルを編集する(last)
:CTRL-^ 直前に開いたファイルを編集する
:{n}CTRL-^ コマンドライン引数で{n}番目に指定したファイルを開く
:ar 編集中のファイル名を表示する(args)


例。
two.txtが保存済みの状態で次のファイル(three.txt)を開く。

:n

one.txtが保存済みの状態で二つ次のファイル(three.txt)を開く。

:2n

変更済みの状態three.txtを保存して前のファイル(two.txt)を開く。

:wp

one.txtを開いている状態で最後のファイル(four.txt)を開く。

:la

two.txt⇒four.txtの順に開いた状態で、two.txtを開く。

CTRL-^

three.txtを開く。

3CTRL-^

今回はここまで。

次回は複数ウィンドウについての話です。