vim 簡単ガイド

# 忘備録として vim の簡単ガイドをまとめました。

ETC
-------------
|操作|意味|
|---|---|
コマンドラインにペースト| :を押してコマンドラインに入った状態でCtrl-Rを押してから"を押すとコマンドラインにペースト
エンコーディング|      エンコードを指定して開き直す<br>:e ++enc=encoding<br>(encoding: euc-jp, shift_jis, utf-8, etc)
vimのエンコーディング確認 | :set enc?
ファイルのエンコーディング確認 |:set fenc?
ファイルのエンコーディング変更 |:set fenc=encoding<br> (encoding: euc-jp, shift_jis, utf-8, etc)
検索、ジャンプ<br>(quickfix リスト) | :vimgrep, :grep など 実行後<br>: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を押してから"を押すと
コマンドラインにペースト