Vim 基本操作まとめ

カーソル移動

h, j, k, l [左下上右]へ移動
gj 表示行単位で移動(↓)
gk 表示行単位で移動(↑)
^ 行頭へ移動
$ 行末へ移動
% 対応する括弧へ移動

Vimにおける、基本操作のチートシート。だいぶ使えるようになってきたのでメモっておきます。

モード切替 i 挿入モード(カーソル位置から)
a 挿入モード(カーソルの後から)
: コマンドラインモード
v ビジュアルモード
C-[ ノーマルモード
<ESC> ノーマルモード

Vimは複数のモードを持ち、これらを切り替えることで全ての編集機能を扱えるようになっている。以後はノーマルモードを基本として紹介します。ちなみに「C-a」で「Ctrl+a」みたいな感じです。よろしく!

保存&終了 :e ファイルを開く。新規作成もコレ(:editと同じ)
:w 保存(:w!で強制的に保存)
:q 終了(:q!で編集結果を破棄して終了)
:f ファイル名を変更して編集を続ける(:fileと同じ)
ZZ 保存して終了(:wq微妙に同じ)
ZQ 保存せずに終了
C-z 中断(fgで復帰。:suspendと同じ)
コピー&ペースト [数値]dd 行をカット
[数値]yy 行をコピー
P ペースト(カレント行)
p ペースト(カーソルの下)
取り消し&やり直し u 取り消し(Undo)
U 行に対して行った変更の全てを取り消す
C-r やり直し(:redoと同じ)
マクロ(キーのレコード) qa[操作]q aレジスタにコマンドを記録
qA[操作]q aレジスタにコマンドを追記
[数値]@a aレジスタのコマンドを再生
@@ 直前に実行したレジスタを再生
選択 v 選択開始
V 行選択
C-v 矩形選択
gv 直前の選択範囲を再選択
検索 /[文字列] 前方検索
?[文字列] 後方検索
# カーソル位置の単語を前方検索
* カーソル位置の単語を後方検索
n 次の候補
N 前の候補
gd カーソル位置のローカル宣言を検索
gD カーソル位置のグローバル宣言を検索
置換 :% s/from/to/g %でページ全体
:32,40 s/from/to/g 32行目から40行目までの間で実行
:/search/s//replace/g 検索候補から置換する

memo1: 置換の構文 → :[範囲]s/[検索語句]/[置換語句]/[オプション]

memo2: gオプション → 繰り返し。cオプション → 1回ごとに確認(yで置換。Enterで次へ)

memo3: 選択中に「:」でコマンドモードに入ると、選択領域の範囲指定が自動で挿入される(:‘<,’>)。これを置換に利用すれば直感的に作業できる。

テキスト操作 x 1文字を削除(Deleteキーと同じ方向)
X 1文字を削除(BSキーと同じ方向)
D カーソル位置から行末まで削除
s 1文字を削除して挿入モードへ
S 現在の行を削除して挿入モードへ
r カーソル位置の1文字だけ置換
R 置換モードへ
J 行を連結(スペースあり)
gJ 行を連結(スペースなし)
~ 大文字/小文字を変換
C-a カーソル位置の数字をインクリメント
C-x カーソル位置の数字をデクリメント
C-p (挿入モード時)単語を後方向に検索し、補完する
C-n (挿入モード時)単語を前方向に検索し、補完する
インデント == カレント行のインデント
=[範囲] 指定範囲のインデント
=’m カレント行からマークの位置(この場合はm)までインデントする。
=G カレント行から最終行までインデントする
> カレント行をインデント
< カレント行を逆インデント
画面分割 :sp 画面を上下に分割(:splitと同じ)
:vsp 画面を左右に分割(:vsplitと同じ)
:q ウィンドウを閉じる
:qall 全てのウィンドウを閉じる
C-wo カレントウィンドウ以外を閉じる
C-ww ウィンドウを順番に移動
C-w[hjkl] ウインドウを{上,下,左,右}に移動
C-w[HJKL] カレントウィンドウを一番{上,下,左,右}に移動
[数値]C-w+ ウィンドウサイズを数字分増やす
[数値]C-w- ウィンドウサイズを数字分減らす
バッファ管理 :e ファイルを開く。新規作成もコレ(:editと同じ)
:ls バッファのリストを表示
:bp 前のバッファ
:bn 次のバッファ
:b[バッファ番号] 指定したバッファを表示
:b# 直前に開いていたバッファを表示
:bd バッファ削除
高度な移動 gg 最初の行へ
G 最後の行へ
[行番号]G 指定した行へ
0 行の最初へ(インデントを無視)
^ 行の最初へ(テキストの最初へ)
$ 行の末尾へ
前の行の最初へ
+ 次の行の最初へ
% 対応する括弧へ
H 画面上の1行目へ移動(2Hで2行目)
M 画面上の中央行へ移動
L 画面上の最下行へ移動(2Lで下から2行目)
C-o 前回のジャンプ位置に戻る
C-i 次回のジャンプ位置に進む
z<Enter> カレント行が画面のトップになる
zz カレント行が画面の中央になる
m[マーク] マークを付加。a-zのレジスタを指定可能。
`[マーク] マークへ移動
単語移動(横移動) w 次の単語に移動
b 前の単語に移動
e 単語の末尾に移動
W 次の単語に移動(記号などは無視)
B 前の単語に移動(記号などは無視)
E 単語の末尾に移動(記号などは無視)
スクロール(↑) C-b 1画面ずつ
C-u 半画面ずつ
C-y 1行ずつ
スクロール(↓) C-f 1画面ずつ下へ
C-d 半画面ずつ下へ
C-e 1行ずつ下へ
スクロール(→) zl n文字ずつ右へ
zL 半画面ずつ右へへ
スクロール(←) zh n文字ずつ左へ
zH 半画面ずつ左へ

 

文字コード/改行コード

:set fenc=[文字コード] 文字コードを変更(:set fenc=shift_jis など。:set fileencoding と同じ)
:set ff=[ファイルフォーマット] 改行コードを変更(:set ff=unix など。:set fileformat と同じ)
:e ++enc=[文字コード] 編集中のバッファを、文字コードを指定して再読込
ga カーソル位置の文字コードの値を調べる
:asci カーソル位置の文字コードの値を調べる

おまけ

ディレクトリ移動 :cd [パス] カレントディレクトリをpathに変更
:cd $HOME カレントディレクトリをホームディレクトリに変更
:cd %:h カレントディレクトリをカレントファイルのパスへ変更
システムコマンド :![コマンド] コマンドを実行し、結果を表示するex1. :!mkdir -m 775 ./test/

ex2. :!perl -cw test.cgi

:[範囲]![コマンド] 選択範囲を標準入力でコマンドに渡し、出力結果で置換する
:r![コマンド] コマンドを実行し、標準出力を挿入する(カーソル位置)
レジスタ :display 格納されているレジスタを表示
“ap aレジスタを貼付け
“*p クリップボードの中身を貼付け
C-ra aレジスタを貼付け(ノーマルモード、コマンド入力時、検索時)
レジスタの詳細
0 最後にカット/ヤンクした文字列
[1–9] カット/削除した文字列が1から順に格納されている
[a–z] ユーザ定義。マクロ、マークなど
% 編集中のバッファのファイル名
# 直前に開いたバッファのファイル名
* システムのクリップボード
/ 直前の検索語句
? 直前の検索語句
: 直前に入力したコマンド
削除した文字列(1行以下)
. 挿入モードにて入力した文字列
= 計算式(数式、文字列、Vim変数、Vim関数)を入力 → pなどで貼付け

Posted in Linux