忘備録として vim の簡単ガイドをまとめました。
ETC
操作 |
意味 |
コマンドラインにペースト |
:を押してコマンドラインに入った状態でCtrl-Rを押してから"を押すとコマンドラインにペースト |
エンコーディング |
エンコードを指定して開き直す :e ++enc=encoding (encoding: euc-jp, shift_jis, utf-8, etc) |
vimのエンコーディング確認 |
:set enc? |
ファイルのエンコーディング確認 |
:set fenc? |
ファイルのエンコーディング変更 |
:set fenc=encoding (encoding: euc-jp, shift_jis, utf-8, etc) |
検索、ジャンプ (quickfix リスト) |
:vimgrep, :grep など 実行後 :copen |
キーボードマクロ
操作 |
意味 |
q[key] |
[key]で記録開始 |
q |
記録中に押すことで記録終了 |
@[key] |
記録したマクロを実行 |
(ex) |
|
qa -> 操作 -> q -> @a |
|
qc -> 操作 -> q -> @C |
|
マーク
操作 |
意味 |
:marks |
mark一覧を表示する |
m[a-zA-Z] |
カーソル位置をmarkする |
`` |
直前のマークへ移動 |
C-o |
古いマークへ移動 |
C-i |
新しいマークへ移動 |
`[a-zA-Z] |
指定のマークに移動 |
'[a-zA-Z] |
指定のマークの行頭に移動 |
:delmarks |
[a-zA-Z] マークの削除 |
:delmarks! |
マークの一括削除 |
検索
操作 |
意味 |
/ |
続けて文字を打ち, Enterで文字列を確定し, 後方検索をかける |
? |
続けて文字を打ち, Enterで文字列を確定し, 前方検索をかける |
* |
カーソル下の単語を, 後方検索する |
| カーソル下の単語を, 前方検索する
g*| カーソル下の単語を含む文字列を, 後方検索する
g#| カーソル下の単語を含む文字列を, 前方検索する
n| 次の単語に移る
N| 前の単語に移る
UNDO / REDO
操作 |
意味 |
u |
undo(アンドゥ)一動作分、前の状態に戻す。 |
Ctrl + r |
redo(リドゥ)。アンドゥで戻した操作を、元に戻す。 |
バッファ操作
操作 |
意味 |
:ls, :buffers, :files |
開いているバッファ一覧(バッファリスト)を表示する |
:bfirst, :bf |
先頭のバッファに移動する |
:blast, :bl |
最後のバッファに移動する |
:bnext, :bn |
次のバッファに移動する |
:bprev, :bp |
前のバッファに移動する |
:b NUM |
NUM番目のバッファに移動する |
:badd |
バッファにファイルをロードする (badd filename) |
(別ファイルを新バッファに読み込み) |
|
:bun[load] |
バッファメモリ開放 (バッファリストには残る) |
:bd[elete] |
バッファをアンロードする |
(現在のバッファを削除) :ls! では表示される |
|
:bw[ipeout] |
バッファを完全に削除 :ls! でも表示されない |
:enew :new :vnew |
新規バッファを開く |
:new filename |
新規バッファでファイルを開く |
モード移行
操作 |
意味 |
ESC |
コマンドモードへ移行 |
i |
カーソルの左隣へ挿入 |
a |
カーソルの右隣へ挿入 |
I |
カーソル行の先頭に挿入 |
A |
カーソル行の末尾に挿入 |
O |
カーソル行の上に1行空けて挿入 |
o |
カーソル行の下に1行空けて挿入 |
カーソル操作
操作 |
意味 |
h, j, k, l |
左, 下, 上, 右 |
gj, gk |
下, 上に1行移動 |
(エディタで表示されている行上で移動) |
|
(つまり, エディタの横幅の制約によって行が折り返されている場合でも, 移動可能) |
|
w |
1単語分進む |
W |
1単語分進む(記号では区切られないので, 次のスペースや, 改行文字まで飛ぶ) |
b |
1単語分戻る |
B |
1単語分戻る(記号では区切られないので, 前のスペースや, 改行文字まで飛ぶ) |
f[文字] |
次の[文字]まで飛ぶ |
F[文字] |
前の[文字]まで飛ぶ |
t[文字] |
次の[文字]の手前まで飛ぶ |
T[文字] |
前の[文字]の次まで飛ぶ |
; |
f, F, t, Tで検索した文字を同方向に繰り返し検索する |
, |
f, F, t, Tで検索した文字を逆方向に繰り返し検索する |
g; |
直前に変更した位置にカーソルを移動(繰り返し入力することで, 変更リストを遡る) |
g, |
g#を使用して遡った変更リストを逆順に進め, カーソルを移動する. |
gg |
ファイルの先頭に移動 |
G |
ファイルの最後に移動 |
[数値]gg, [数値]G, :[数値] |
[数値]行に移動 |
H, M, L |
画面に表示されている行について, |
最初の行(H), 真ん中の行(M), 最後の行(L)に移動 |
|
0 |
行の先頭に移動 |
^ |
行のテキスト部分の先頭に移動 |
$ |
行の最後に移動 |
% |
対応する括弧に移動 |
( |
文単位での移動. 前の文の先頭に移動 |
) |
文単位での移動. 後ろの文の先頭に移動 |
{ |
段落単位での移動. 前の段落の先頭に移動 |
} |
段落単位での移動. 後ろの段落の先頭に移動 |
Ctrl-u |
半画面分戻る |
Ctrl-d |
半画面分進む |
Ctrl-b |
1画面分戻る |
Ctrl-f |
1画面分進む |
Ctrl-o |
ジャンプリストを遡ってカーソルを移動する |
(検索や行数指定移動などがジャンプリストに保存されている) |
|
Ctrl-i |
ジャンプリストを進めてカーソルを移動する |
(検索や行数指定移動などがジャンプリストに保存されている) |
|
- |
1行上の左端へ |
RETURN |
1行下の左端へ |
e |
単語の末尾へ |
(カーソル位置が単語の途中の場合はその単語の末尾) |
|
(カーソルが単語末尾なら次の単語の末尾) |
|
(カーソルが行末なら次行先頭の単語の末尾) |
|
nG |
ファイルの先頭からn行目の左端へ |
削除, コピー
操作 |
意味 |
x |
カーソル上の文字を消す |
X |
カーソル左一文字削除 |
s |
カーソル上の文字を消して, インサートモードに入る |
dd |
カーソルがある行を消す |
dw |
カーソル位置から1単語分削除する |
diw |
カーソル位置にある単語を1つ削除する |
dt( |
カーソル位置から, 次に最初に出現する(までを削除する |
df<文字> |
カーソル位置から<文字>の位置まで削除 |
d^ |
カーソル位置から左削除 |
d$ |
カーソル位置から右削除 |
cc |
カーソルがある行を消して, インサートモードに入る |
cw |
カーソル位置から1単語分削除して, インサートモードに入る |
ciw |
カーソル位置にある単語を1つ削除して, インサートモードに入る |
ct( |
カーソル位置から, 次に最初に出現する(までを削除して, インサートモードに入る |
D |
カーソル位置から行末まで削除 |
C |
カーソル位置から行末まで削除して, インサートモードに入る |
yy |
カーソルがある行をコピー ([Y]と同じ) |
y |
ビジュアルモードで選択されている部分をコピー (ビジュアルモード中) |
yw |
カーソル位置の単語をコピー |
y<移動コマンド> |
現在位置から移動先までをコピー (y`<マークキャラ> など) |
P |
カーソル行の上の行にペースト |
(xやddで削除したものもペーストできる) |
|
p |
カーソル行の下の行にペースト |
(xやddで削除したものもペーストできる) |
|
Ctrl-r 0(ゼロ)(インサートモード中に) |
|
レジスタ0に保存されている文字列を貼り付ける |
|
通常, yを使用してコピーした文字列は, レジスタ0に保存される |
|
置換
操作 |
意味 |
r[文字] |
カーソル上の文字を[文字]に置換 |
R |
カーソル位置から複数文字置換 |
s |
カーソル上一文字を複数文字に置換 |
r |
カーソル行全体を置換 |
cc |
カーソル行全体を置換 |
cw |
カーソル位置から現単語置換 |
cf<文字> |
カーソル位置から<文字>の位置まで置換 |
|
:%s/before/after/g| ファイル上の全ての"before"を"after"に置換
:s/before/after/g| カーソルの行の全ての"before"を"after"に置換
:10,20s/before/after/g| 10~20行目の全ての"before"を"after"に置換
:'<,'>s/before/after/g| ビジュアルモードで選択中の範囲の全ての"before"を"after"に置換
| " '<,'> "の部分は, 範囲を選択中に":"を押すと自動的に出ます
編集, 保存, 終了
操作 |
意味 |
:e |
<ファイル名> <ファイル名>を読込む |
:r |
<ファイル名> カーソル行の下に<ファイル名>の内容を挿入 |
:w |
上書保存 |
:w <ファイル名> |
編集中のデータを<ファイル名>のファイルに保存 |
:q |
終了 |
:wq |
保存して終了 |
:q! |
保存せず終了 |
ZZ |
保存して終了 |
ZQ |
保存せずに終了 |
ウィンドウ操作
操作 |
意味 |
:sp [file] |
ウィンドウを横に分割し, fileを開く(file名はなくても良い) |
:vs [file] |
ウィンドウを縦に分割し, fileを開く(file名はなくても良い) |
Ctrl-w s |
ウィンドウを横に分割する |
Ctrl-w v |
ウィンドウを縦に分割する |
:only |
カーソルのあるウィンドウ以外閉じる |
Ctrl-w o |
カーソルのあるウィンドウ以外閉じる |
Ctrl-w w |
次のウィンドウに移動 |
Ctrl-w p |
前のウィンドウに移動 |
Ctrl-w h, j, k, l |
左, 下, 上, 右のウィンドウに移動する |
Ctrl-w H, J, K, L |
カーソルがあるウィンドウを左, 下, 上, 右方向に移動する |
Ctrl-w _ |
縦に最大化 |
Ctrl-w |
|
Ctrl-w = |
大きさを揃える |
Ctrl-w > |
幅を増やす |
Ctrl-w < |
幅を減らす |
Ctrl-w + |
高さを増やす |
Ctrl-w - |
高さを減らす |
画面操作
操作 |
意味 |
Ctrl-f |
1ページ分下に画面を移動 |
Ctrl-b |
1ページ分上に画面を移動 |
Ctrl-d |
半ページ分下に画面を移動 |
Ctrl-u |
半ページ分上に画面を移動 |
Ctrl-l |
画面を再描画 |
Ctrl-g |
行番号を表示 |
モード変更
操作 |
意味 |
ESC |
ノーマルモードに戻る |
Ctrl-[ |
ノーマルモードに戻る |
i |
カーソル位置からインサートモードに入る |
a |
カーソルの直後からインサートモードに入る |
I |
行頭からインサートモードに入る |
A |
行末からインサートモードに入る |
Ctrl-o(インサートモード中に) |
インサートノーマルモードに入る |
(インサートモード中に1コマンドのみノーマルモードのコマンドを使用できる) |
|
v |
ビジュアルモードに入る |
V |
行単位の選択をするビジュアルモードに入る |
Ctrl-v |
矩形選択をするビジュアルモードに入る |
gv |
前回選択した範囲が再選択された状態でビジュアルモードに入る |
: |
コマンドラインモードに入る(続けてコマンドを打ち, Enterで実行) |
起動
操作 |
意味 |
% vi |
フォアグラウンド起動 |
% vi <ファイル名> |
<ファイル名>のファイルを読み込んで起動 |
その他
操作 |
意味 |
Ctrl-a |
カーソル行上で, カーソル以降の最初に出現した数字をインクリメント |
Ctrl-x |
カーソル行上で, カーソル以降の最初に出現した数字をデクリメント |
= |
カーソルがある行をインデント. ビジュアルモードで範囲を選択していれば, その範囲をインデント |
>> |
インデントを追加 |
<< |
インデントを削除 |
. |
直前のコマンド繰返し |
u |
直前に実行したコマンドの取り消し |
U |
カーソル行に対して行った変更を全部取消す |
:!cmd |
シェルコマンドの実行 |
:r!cmd |
コマンドを実行し,その結果を挿入 |
:shell |
シェルを呼び出す。exitなどでシェルを抜ければviに戻る |
:set number |
行番号を表示 (set nu) |
:set nonumber |
行番号表示を止める (set nonu) |
:h |
ヘルプ表示 |
:viusage [<コマンド>] |
viコマンドモードのコマンド一覧表示。 |
<コマンド>を付加するとそのコマンドの説明を表示。 |
|
:exusage [<コマンド>] |
exコマンドモードのコマンド一覧表示。 |
<コマンド>を付加するとそのコマンドの説明を表示。 |
|
:set readonly |
リードオンリーモードにする (set ro) |
:set noreadonly |
リードオンリーモードを解除する (set noro) |
TIPS
多くのコマンドは, 直前に数字などを組み合わせて使うことができます
例えば, 3ddとすれば3行削除できます. 10iでインサートモードに入って,
文字を入力した後にノーマルモードにもどれは, 入力した文字が10個分入力されます
<コマンドラインにペースト>
:を押してコマンドラインに入った状態でCtrl-Rを押してから"を押すと
コマンドラインにペースト