Vim
必須
操作 x 中身だけか全体か x 範囲
- 操作
c: changey: yankd: delete
- 中身だけか全体か
a: all objecti: inner object
- 範囲
w: words: sentencep: paragraphgn: 直前に検索した単語やパターンの次の出現箇所(カーソルがすでに単語上にあればその単語全体)- 各種囲み記号
- parenthesis
- bracket
- brace
- tag(
tの一文字で表される。React で多用しそう) - ほか多数
番外編(vim-surround)
ds <消したい囲み記号>cs <消したい囲み記号> <新しい囲み記号>- ビジュアルモードで
Sを押して囲み記号の追加
ファイルを開く
:e {file name or directory}: ファイルを開く
移動
hjkl: 左、下、上、右 (gをつければスクリーン上)w,b,e,ge: 単語の先頭、末尾、単語の先頭へ$: 行末へ0: 行頭へ^: 行頭の非空白文字へ%: 対応する括弧へShift + {}: ブロック移動G, gg: ファイルの最後、最初へVisual Mode + o: 選択範囲の先頭、末尾へ
ページ送り
Ctrl + fbudey: スクロールzz, zt, zb: カーソル位置を中央、上、下に
挿入
aA: カーソルの後ろ、行末へiI: カーソルの前、行頭へoO: 下、上に行を挿入
検索置き換え
/? + nN: 検索*# + nN: 単語検索fFtT + ;,: 行内検索:%s/old/new/g: 置換%なしだと現在行または選択範囲のみを処理対象とする。ありだと文書全体を処理対象とする。gなしだと行内の最初の一つだけ置き換える。つけると行内の全てを置き換える。*したあとだと、置き換え前の文字をわざわざ入れなくていいので便利。
レジスタ
:di: レジスタの内容を見る"": 無名レジスタ。デフォルトレジスタ。なにもしなければこれがデフォルトで使われる。"0ヤンクレジスタ。最後にヤンクしたものが入り、dcxしても上書きされない。"1-9: 削除変更レジスタ。ccやddなど行単位の削除変更履歴が順に入る。"a-z: 名前付きレジスタ。ユーザーが自由に使えるレジスタ。
編集
(g)J: 行を結合>>, <<: インデントCtrl + t, d: インデント
ジャンプ
g; g,: 変更履歴をたどるCtrl + o戻るm a-z: マーク' a-z: マークの行へ移動backtick a-z: マークへ移動
支援
gd: goto definitiongh: goto help
画面分割
Ctrl-w s: 縦分割Ctrl-w v: 横分割Ctrl-w hjkl: 移動
マクロ
q a-z: マクロの記録q: マクロの記録終了@ a-z: マクロの実行
コマンド実行
:!{cmd}: シェルコマンドの実行- 範囲選択した状態で実行すると、範囲を標準入力としてコマンドに渡し、出力を受け取って範囲を書き換える。jqなどすると便利。
:r!{cmd}: コマンドの出力を現在位置に挿入する:w!{cmd}: ファイルを標準入力としてコマンドに渡す
キーマップ
:nnoremap {押すボタン} {実行したいキー}: ノーマルモードのキーマップ- 先頭がnならノーマル、vならビジュアル、iならインサート、のモード設定
- アドホックに使うこともできるし、
.vimrcなどに設定すれば永続化して使うこともできる。
バッファ
:ls: バッファ一覧:b {buffer number}: バッファ切り替え