| コマンド | モード | 内容 |
|---|---|---|
+ | j^ と同じ(次の行の先頭に移動)- にすると k^ になる | |
:expand(’%’) | 現在のバッファになっているファイルの相対パスを取得%:p にすると絶対パス | |
gh | カーソル位置にマウスホバーしたときの表示を出す | |
g& | 最後に実行した :s を全ての行で実行する | |
gi | 前回 insert を抜けた場所から挿入モード | |
gI (アイ大文字) | 0 カラム目から挿入モード(0 キーで移動する場所から) | |
g[pP] | p/P で貼り付けた後、挿入したテキストの直後にカーソルを移動 | |
e | カーソル下の単語の末尾に移動 | |
gM | 行の中央に移動 | |
ge | 前の単語の末尾に移動(b みたいなもの) | |
W/B | 空白区切りの単語ジャンプ | |
za | カーソル下の折りたたみを切り替え | |
zf<motion> | <motion> 範囲を折りたたみ | |
:w !sudo tee % | sudo で保存 :h :w_c で確認できるが、 :w !<cmd> でファイルを <cmd> の標準入力としてパイプして実行という意味 ただ sudo のパスワードを入力できなくて詰む | |
:(no)?ignorecase | 検索時の大文字小文字区別を無効化(VSCodeVimでは smartcase がついてる) | |
C-t | insert | インデント増加 |
C-d | insert | インデント削除 |
gc<motion> | コメント切り替え(1行用、// など)現在の行を1行コメントにする場合は gcc | |
gC<motion> | コメント切り替え(複数行、/* */ など)現在の行をブロックコメントにする際は gCC | |
o | visual | 選択範囲の逆へ移動 |
O | visual | 矩形選択の時は、同じ行における選択範囲の逆へ移動(前方にいるなら後方に移動) 矩形でない場合は o と同じ |
gu<motion> | 小文字にするオペレータ(guiw でカーソル下の単語を小文字に) | |
gU<motion> | 大文字 | |
g~<motion> | 大文字・小文字の反転を行うオペレータ | |
:h <str> | only | <summary> |
:q: ←?? | コマンド履歴を開くEnter を押すとカーソル下のコマンドを実行できる | |
C-w +/- | ウィンドウサイズを1行増減 | |
z{count}<CR>{count}C-w _:res(ise)? {count} | ウィンドウの高さを {count} 行に設定 | |
:as[cii] OR ga | カーソル下の文字を ASCII コードで出力 | |
g8 | カーソル下の文字を UTF-8 バイト列で出力 |
覚えた(かもしれない)リスト
| コマンド | モード | 内容 |
|---|---|---|
| gd | 定義にジャンプ(F12) | |
| S{char} | visual | 選択範囲をcharで囲む |
| c | 削除してinsertモードに(ccで行削除+insert、Cで行末まで) | |
| zz | 現在行が画面中央になるようにスクロール | |
| % | 対応する括弧に移動 | |
| , (comma) | ; の逆(直前にfやFで検索した方向とは逆方向に、同じ文字を検索) | |
| C-[y/e] | カーソルそのまま、1行ずつ上下(extra | |
| C-[u/d] | ページ上下(アップダウン) | |
| t | fとほぼ同じ、該当文字の一つ前に移動する | |
| ds{char} | 囲い char を削除(括弧など、Delete Surround) | |
| cs{char1}{char2} | 囲いchar1をchar2に(Change Surround) | |
| ys | 囲いcharでmotionを囲む(You Surround?) | |
| T | Fとほぼ同じ、該当文字の一つ前に移動 | |
| N | nの逆(上方向に検索) | |
| H | 画面の一番上にある行に移動(High) | |
| M | 画面の中央にある行に移動(Middle) | |
| L | 画面の一番下にある行に移動(Low) | |
| C-o | motionのundo(jump listの1つ前に戻る / 1つ前のカーソル位置に移動) 対極:C-i(motionのredo; 1つ後のカーソル位置に移動) | |
| = | 自動インデント(これ機能する?) | |
| z[tzb] | 現在の行を画面の{ 上部,中央,下部} に移動(Top / Bottomで t / b) | |
| :set clipboard? | 現在の変数を確認(“clipboard” の部分は変数名) | |
| :sav(eas)? | 名前をつけて保存+現在のバッファに設定 | |
:%bd | 全バッファ削除 | |
:noa w | 自動フォーマット等を無効化して保存 | |
C-r <x> | insert | レジスタ <x> の中身を貼り付け |
[ または ] を2つ使うやつ:1文字目は [ なら後方、 ] なら前方 2文字目が [ なら終点 } 、 ] なら始点 {
ex) ]] :前方にある始点 { にジャンプ
1文字目は自然な気がするが、2文字目は逆……?
Vimでは右・下方向が正の方向で、大文字になるとそれが逆になるっぽい
- fは右方向に検索、Fは左方向に検索
- oは下方向に挿入、Oは上方向に挿入
- 反例?:ggはファイル頭にジャンプ、Gはファイル末尾にジャンプ
単語ジャンプ系は例外で、W/Bは「記号を無視して(空白区切りの)」単語移動 という意味になる
move
*は任意の文字
- f*:*が出るまで(find)
- w/b:単語単位で移動(forward/back)
- gn:検索結果
レジスタ
:h {register} でヘルプ
"<x><command> でコマンドに渡したり、 @<x> でマクロとして実行したりする
- “:レジスタのコマンド開始
:格納したいレジスタ - [a-z] で表される一般的なレジスタと、数字・記号で表される特殊なレジスタがある
_:”The black hole register”, 削除用のレジスタ%:現在のファイル名[0-9]: リングバッファみたいなやつ?
- [a-z] で表される一般的なレジスタと、数字・記号で表される特殊なレジスタがある
:y, pなど
一般レジスタは大文字にすることで追記となる(ex: "Xyyでxレジスタにヤンク内容を追記)
コマンドモードでは(: を入力した状態)C-r → レジスタ名 でレジスト内容をコマンドラインにペーストできる
ヤンクしたものをペーストしたいなら yy:<C-r>0 のようにする
検索・置換
:%s/old/new/gc :oldをnewに置換、1つずつ確認する(confirm)
\C を付けると大文字・小文字を区別する; \CsearchWord というかんじ
バイナリファイルの編集
- -b オプションを付けてファイルを開く(
vim -b test.bin) :%! xxdでバッファを16進数テキスト形式にする- いい感じに編集(右のASCII表示は編集しなくていいらしい)
:%! xxd -rでテキストをバイナリに戻す:wで保存
xxd -r せずに保存するとバイナリファイルがテキスト形式になってしまうので気をつけよう
diff
vim -d OLD NEW
easymotion
Leader(スペース2回)がprefix
j / kで上下行移動