このブログの目次
はじめに
Vim の使い方 基礎編
- Vim のインストール
- Vim のヘルプの使い方
- Vim 操作方法まとめ記事のまとめ
- Vim のモード
- Vim の移動コマンド
- Vim のスクロールコマンド
- Vim の文字検索移動コマンド
- Vim のキーワード検索
- Vim の挿入コマンドとその取り消し、繰り返し
- Vim のテキスト編集 〜基礎編〜
- Vim のテキスト編集 〜ビジュアルモード〜
- Vim のテキスト編集 〜テキストオブジェクト〜
- Vim のウィンドウ分割機能
Vim のカスタマイズ
- Vim のカスタマイズ 〜導入編〜
- Vim のカスタマイズ 〜 set コマンド 〜
- Vim のカスタマイズ 〜 画面表示の設定 〜
- Vim のカスタマイズ 〜 カーソル移動関連の設定 〜
- Vim のカスタマイズ 〜 ファイル処理関連の設定 〜
- Vim のカスタマイズ 〜 検索/置換の設定 〜
- Vim のカスタマイズ 〜 ビープの設定 〜
- Vim のカスタマイズ 〜 コマンドラインの設定 〜
- Vim のカスタマイズ 〜 動作環境との統合関連の設定 〜
- Vim のカスタマイズ 〜 タブ/インデントの設定 〜
- Vim のカスタマイズ 〜 set コマンド オススメまとめ 〜
- Vim のカスタマイズ 〜 NeoBundle でプラグイン管理! 〜
- Vim のカスタマイズ 〜カラースキームで好みの配色にしよう〜
- Vim のカスタマイズ 〜キー割り当て変更方法〜
- Vim のカスタマイズ 〜キー割り当て変更の実例〜
- Vim のカスタマイズ 〜autocmd で自動処理〜
- Vim のカスタマイズ 〜autocmd で自動処理の実例〜
Vim プラグインについて
Vim のテキスト編集 〜ビジュアルモード編〜
ビジュアルモードは、テキスト選択のためのモードです。編集対象となるテキストを事前に「視覚的に」確認することが出来るので、「ビジュアルモード」と呼ばれます。
ビジュアルモードを開始するためのコマンド一覧
ビジュアルモードを開始するためのコマンドは3種類あり、それぞれに対応するビジュアルモードも細かく3種類に分かれます。それぞれのビジュアルモードは、対象とするテキストの範囲が違います。
コマンド | 開始できるビジュアルモード | |
---|---|---|
v | 通常のビジュアルモード | 文字単位でテキストを選択することが出来ます。 |
V | 行指向ビジュアルモード | 行単位でテキストを選択することが出来ます。 |
<c-v> | 矩形ビジュアルモード | 箱状にテキストを選択することが出来ます |
ビジュアルモード中に選択範囲変更に利用できるコマンド
一般的なテキストエディターでは、既存のテキストの選択中に新たに文字を入力すると、選択したテキストを削除して、新しい文字列の挿入が行われますが、Vim では、全く違った挙動をします。
ノーマルモードと全く同様のカーソル移動コマンドがひと通り利用可能で、移動により選択範囲を広げることが出来ます。
テキストオブジェクトを指定して選択範囲を指定することも出来ます。
ビジュアルモードを終了させるコマンド
テキストの挿入のコマンドは使えません。ただし、下の通り c (変更コマンド)を使うことは出来ます。
選択したテキストに対して、d (削除), y (コピー), c (変更)といったオペレーターをそのまま実行することが出来ます。
<esc> でテキスト選択を解除してノーマルモードに戻ることが出来ます。
コマンド | 機能 |
---|---|
c | 選択されたテキストを変更する。つまり削除してインサートモードに入る。 |
d | 選択されたテキストを削除してレジスタ(クリップボードのようなもの)に格納する。 |
y | 選択されたテキストをヤンク(コピー)する。 |
<esc> <c-[> <c-c> |
選択を解除する |
Vim のテキスト編集 〜基礎編〜
Vim はカーソル移動やテキストの挿入以外に、一般的なテキストエディターで言うところのカット、コピー、ペーストといったテキスト編集のためのコマンドも充実しています。
テキスト編集のためのコマンドは、オペレーターと対象テキスト指定とを組み合わせることで様々な応用が出来る様になっています。最初は少しむずかしいのですが、慣れるとテキストのいろいろな部位を手軽に素早く切り貼り出来るようになります。
オペレーター
他のコマンドと組み合わせて利用できる、テキスト編集のためのコマンドを「オペレーター」といいます。
特に重要なのは下の3つのオペレーターです。
オペレーター | 編集機能 | 備考 | 覚え方 |
---|---|---|---|
y | コピー ヤンク |
Vim ではコピーの事をヤンクといいます。対象のテキストが、レジスタに格納されます。 | yank, copy |
d | 削除 切り取り |
Vim では削除と切り取りが同じコマンドになっており、削除と同時に、削除したテキストがレジスタ(クリップボードのようなもの)に格納されて、貼り付け(Put)できるようになります。 | delete |
c | 変更 | オペレーター c を使うと、テキストを削除して、その場所からインサートモードを開始してテキストを挿入することが出来ます。 d(削除) と i(挿入) の組み合わせに近いのですが、c (変更)を使うと、後で . (ピリオド)コマンドで2つをまとめて繰り返すことが出来ます。 |
change |
行全体をコピー、削除、変更
上のオペレーターを2回繰り返して入力すると行全体を対象にすることが出来ます。
コマンド | 編集機能 |
---|---|
yy | 行全体をコピー |
dd | 行全体を削除、切り取り |
cc | 行全体を変更 |
カーソルから行末までを削除、変更
オペレーターを大文字にして入力すると、カーソルから行末までを削除、変更することが出来ます。
コピー(ヤンク)に限ってはこの通りではありません。これは vi との互換性維持のためだそうですが、カスタマイズして他のオペレーターに合わせることも出来ます。
コマンド | 編集機能 |
---|---|
Y | 行全体をコピー (カーソルから行末までのコピーではないので注意!) |
D | カーソルから行末までを削除、切り取り |
C | カーソルから行末までを変更 |
移動コマンドでオペレーターの影響範囲を指定する
オペレーターに続けて、カーソル移動コマンドを入力することで、その移動する分をオペレーターの影響範囲とすることが出来ます。
コマンド組み合わせ例 | 結果 |
---|---|
ce | カーソル位置から単語の末尾までを変更 |
dj | カーソル行とその次の行を削除 |
ct" | カーソル位置から同じ行の " の手前までを変更 |
ビジュアルモードでオペレーターの影響範囲を指定する
先にビジュアルモードでテキストを選択してから、オペレーターを実行することも出来ます。
テキストオブジェクトでオペレーターの影響範囲を指定する
オペレーターコマンドの後にテキストオブジェクトを指定することも出来ます。
コマンド組み合わせ例 | 結果 |
---|---|
ciw | カーソル位置にある単語を変更 |
daw | カーソル位置にある単語を削除 |
da' | '〜'で囲まれた文字列全体を削除 |
cit | HTMLタグの内側を変更 |
yi( | 括弧の内側をコピー(ヤンク) |
コピー、削除したテキストを貼り付ける(Put)
Vim では、テキストの貼り付けをペーストではなくて、Put といいます。コピー、削除、変更した対象のテキストを別の場所に貼り付けるには、そこに移動して、Put します。
コマンド | 編集機能 |
---|---|
p | カーソルの後ろに貼り付け |
P | カーソルの前に貼り付け |
Vim は、コピーや削除されたテキストを記憶する際に、行単位で行われたか、文字単位で行われたかも覚えています。
文字単位でコピー、削除したものは、カーソルの直前もしくは直後に貼り付けられて、行単位でコピー削除したものは、カーソル行の直前、もしくは直後に貼り付けられます。
Vim のウィンドウ分割機能
Vim は、ウィンドウを分割することが出来ます。Vim のウィンドウは、バッファと独立に存在する「覗き窓」です。
分割されたウィンドウで、同じバッファ(ファイル)を開くことも、別のバッファを開くことも出来ます。あるファイルを編集しながら、ウィンドウ分割を利用して、同じファイルの別の部分を参照することも、別のファイルを参照することも可能です。
Vim のウィンドウ関連でノーマルモードで利用できるコマンドは、すべて <c-w> から始まる2ストロークのコマンドです。
:h CTRL-W
からすべてを網羅した一覧を確認することも出来ます。
下に使用頻度の高いウィンドウ分割関連のコマンドを紹介します。
コマンド | 動作 | 覚え方 |
---|---|---|
<c-w>s <c-w><c-s> :sp (ファイル名) :split (ファイル名) |
ウィンドウの上下分割 | split |
<c-w>v <c-w><c-v> :vs (ファイル名) :vsplit (ファイル名) |
ウィンドウの左右分割 | vertical |
<c-w>w <c-w><c-w> |
次のウィンドウに移動する | w 二回で手軽に移動 |
<c-w>c <c-w><c-c> :close |
現在のウィンドウを閉じる | close |
<c-w>o <c-w><c-o> :only :on |
現在のウィンドウ以外のウィンドウを閉じる | only |
<c-w>h <c-w><c-h> |
ウィンドウを左に移動 | カーソル移動と同じ |
<c-w>j <c-w><c-j> |
ウィンドウを下に移動 | カーソル移動と同じ |
<c-w>k <c-w><c-k> |
ウィンドウを上に移動 | カーソル移動と同じ |
<c-w>l <c-w><c-l> |
ウィンドウを右に移動 | カーソル移動と同じ |
<c-w>x <c-w><c-x> |
現在のウィンドウと次のウィンドウを入れ替える | exchange |
<c-w>+ <c-w><c-+> |
現在のウィンドウを1文字分高くする | 高さ + 1 |
<c-w>- <c-w><c--> |
現在のウィンドウを1文字分低くする | 高さ - 1 |
<c-w>< <c-w><c-<> |
現在のウィンドウの横幅を1文字分狭くする | 幅 < |
<c-w>> <c-w><c->> |
現在のウィンドウの横幅を1文字分広くする | 幅 > |
ヘルプの
:h window
にウィンドウ分割の詳細な説明があります。
Vim の挿入コマンドとその取り消し、繰り返し
挿入を開始するコマンド
テキストの挿入を開始するためのコマンドはなんと6つもあります。
(他にも既存のテキストを削除してインサートモードに入る「変更(Change)コマンド」「置換(Substitute/Replace)コマンド」もあるのですが、別のところで紹介します。)
この6つはそれぞれカーソルに対しての挿入の開始箇所が違います。
コマンド | 挿入開始位置 | 覚え方 |
---|---|---|
i | カーソルの前 | insert |
I | カーソル行の先頭(行最初の非空白文字の前) | 行全体に i |
a | カーソルの後ろ | append |
A | カーソル行の末尾 | 行全体に a |
O | カーソル行の「前」に空行を挿入して、その行の先頭 | Open up a new line |
o | カーソル行の「次」に空行を挿入して、その行の先頭 | open up a new line |
下に位置関係をまとめてみました。| をコマンド前のカーソル位置としたときの、i, I, a, A, O, o それぞれのコマンドの挿入開始位置を図示しています。
O I i|a A o
テキストを挿入する
各コマンドでインサートモードに入ったあと、自由にテキストを入力することが出来ます。
挿入を終了する方法
挿入を終えるときは
<ESC>, <c-[>, もしくは <c-c> でインサートモードからノーマルモードに戻ってください。 このキーは繰り返し使うことになります。自分にあったキーを選びましょう。
取り消し(アンドゥ)、取り消しの取り消し(リドゥ)、繰り返し
コマンド | 機能 |
---|---|
u | 取り消し(アンドゥ) |
<c-r> | 取り消しの取り消し(リドゥ) |
. (ピリオド) | 最後のコマンドの繰り返し |
テキストの挿入コマンドは、インサートモードに入ってノーマルモードに戻るまでが、ひとつのコマンド操作としてカウントされます。
ですので、インサートモード一度で長文を入力してしまうと、アンドゥ一度でその長文がすべて消えてしまうことになります。まめにノーマルモードに戻って、編集の履歴を残しておくことをおすすめします。
また、いろんな場所に同じテキストを挿入したい場合は、. による最後のコマンドの繰り返しが重宝します。
Vim の移動コマンド
Vim のノーマルモードとビジュアルモードで利用できるカーソル移動コマンドをひととおり紹介します。
1文字(1行)単位の移動
Vim ではカーソルキーの代わりに、右手ホームポジションにある hjkl (←↓↑→に対応)の4つのキーを使います。
このキーバインドの起源を遡ると 1977年のADM-3a という CRT ターミナルにたどり着くのだとか…
コマンド | 方向 | 内容 | 覚え方 |
---|---|---|---|
h | ← | 左に一文字移動 | ローマ字で "h" idari |
j | ↓ | 下に一行移動 | j というアルファベットは「下」に鍵爪のようなものが伸びている |
k | ↑ | 上に一行移動 | k というアルファベットは「上」に棒が突き出ている。 |
l | → | 右に一文字移動 | l といっても left じゃなくて right |
コマンドの前に数字を入力すると、その回数だけ移動を繰り返します。
単語単位の移動
文字単位だけでなく単語単位の移動にもなれるとより速く移動できるようになります。8種類もコマンドがありますが基本的には、 w, b, e の3種類で十分です。
下の通りSHIFTキーを押すと空白区切りの単語移動が出来るようになります。これは、プログラミング言語で、メソッド呼び出しを一気にスキップしたい時に便利です。
コマンド | 移動先 | 移動方向 | 移動前後の例 | 覚え方 |
---|---|---|---|---|
w | 次の単語の先頭 | → | This is an apple. ↓ w This is an apple. |
word |
e | 単語の末尾 | → | This is an apple. ↓ e This is an apple. ↓ e This is an apple. |
end |
b | 前の単語の先頭 | ← | This is an apple. ↓ b This is an apple. |
back |
ge | 前の単語の末尾 | ← | This is an apple. ↓ ge This is an apple. |
|
W | 次の単語(空白区切)の先頭 | → | This is an up-to-date machine. ↓ W This is an up-to-date machine. |
WORD |
E | 単語(空白区切)の末尾 | → | This is an up-to-date machine. ↓ E This is an up-to-date machine. |
END |
B | 前の単語(空白区切)の先頭 | ← | This is an up-to-date machine. ↓ B This is an up-to-date machine. |
BACK |
gE | 前の単語(空白区切)の末尾 | ← | This is an up-to-date machine. ↓ gE This is an up-to-date machine. |
文字検索
f と t を使って、同じ行の指定文字まで移動することも出来ます。詳しくは別のページで紹介しています。
行頭、行末への移動
^ と $ は、それぞれ正規表現でも先頭と末尾を示す記号なので、それを覚える手がかりにすると良いと思います。
コマンド | 移動先 | This is a line. |
---|---|---|
0 | カーソル行の先頭 | This is a line. |
^ | カーソル行の先頭の最初の空白ではない文字 | This is a line. |
$ | カーソル行の末尾 | This is a line. |
行番号を指定して移動
コマンド | 移動先 |
---|---|
{数字}G | 数字で指定された番号の行 |
gg | バッファの先頭の行 |
G | バッファの最後の行(の先頭) |
段落移動
Vim は文字を含まない行(空行)で区切られた複数の行の塊を「段落(Paragraph)」とみなします。
もし編集中のテキストに、まめに空行が挿入されて段落分けがされている場合は、下の2つのコマンドで段落の間を移動すると便利です。
コマンド | 移動先 |
---|---|
{ | カーソル行より上方向にある最初の空行 |
} | カーソル行より下方向にある最初の空行 |
文字列検索
/ もしくは ? を使って、指定文字まで移動することも出来ます。詳しくは別のページで紹介しています。
画面の上端、中央、下端への移動
スクロールを発生させないように、画面位置を固定したまま、カーソルを移動させるコマンドです。あまり使うことはないかもしれません。
コマンド | 移動先 | 覚え方 |
---|---|---|
H | 画面の上端 | High |
M | 画面の中央 | Middle |
L | 画面の下端 | Low |