VimやNeovimで素早くコードを書きたい・変更したい
vimやNeovim(以下vim)を使い始めてみたものの使い慣れていなくて速度が遅い・・・うろ覚えで使ったコマンドが間違えててコードレビュー中にvim辞めたら?と言われてしまう・・・そんな辛い現実を超克するための覚書です。
速度を上げたかったらこんなテクもあるよ!や、なぜこれを使わない?というものがありましたら、ぜひご教示ください!
移動技
vim使いに特に必要なのは縦横無尽に速攻でカーソルを動きまわらせること。素早く動いてペアプロしている人たちの目を撹乱するくらいに早く動きたい・・・一度でいいから「もっとゆっくり打って・・・」と相手を困らせてみたい・・・
上下に1行ずつ移動
基本中の基本。jで下に一行ずつ、kで上に一行ずつ進む。jkにさわれている気分になれる良いコマンド。
左右に1文字ずつ移動
これも基本中の基本。lで右に一文字ずつ、hで左に一文字ずつ進む。
文頭・文末へ飛ぶ
これも基本中の基本。gを2回押下することで行の一番上へ飛ぶ。shift + gで行の一番最後へ飛ぶ。
行頭・行末へ飛ぶ
^コマンドでその行の一番最初の文字へ飛ぶ。shift + $コマンドでその行の一番最後の文字へ飛ぶ。
単語区切りで左右へ移動
wコマンドは単語区切りで前へ進む。bコマンドは単語区切りで後ろに進む。
編集技(単発コマンド編)
編集するときに初めてvimを触る人には独特な動きに見えるカーソルの位置が特徴的。初めて使うキャラが思うようにいうこと聞いてくれないあの感覚を味合わせてくれるそんなコマンド。
iコマンド
インサートモードに入って編集することができる。カーソルを変更したい文字に合わせてこいつを押すと、その文字の後ろに編集カーソルが出現するからなれる必要がある。
aコマンド
iコマンドがハラタツ動きをするので、カーソル変更したい文字に合わせてこのコマンドを押せば、変更したい文字の前で編集カーソルが出現してくれる。現時点で重宝しているコマンド。
oコマンド
カーソル位置から次の行へ挿入する形でインサートモードになるコマンド。
##rコマンド
上書き編集するコマンド。これさえあれば書き直す時にわざわざインサートモードに入る必要なんてない。
ctl + pコマンド
補完をしてくれるコマンド。
yコマンド
ヤンクと呼ばれる独特なコピーコマンド。選択した行をコピーしクリップボードに乗せることができる。
pコマンド
ペーストコマンド。コピーした行をカーソル位置から一行下に貼り付ける
d×2コマンド
dを2回押下することで一行を削除することができる。削除した行は一旦クリップボードにコピーされるので、pコマンドで別の場所に貼り付けることも可能。メソッドの場所きもいなぁってなった時とか便利。
xコマンド
一文字ずつ削除することができる。
# 編集技(コンボ編)
vimコマンドは組み合わせることで効果を伸ばすことができる。よく使うコンボは今の所以下のものですが、組み合わせ次第で効果的に使えるはず・・・超必ライクな組み合わせを編み出していきたい・・・
shift + v からのjコマンドからのyコマンド
shift + vがvisual lineのモードに移行し、一行を選択した状態になるので、ここからjコマンドで下に移動し、選択したい範囲まで動いてからコピーする。
shift + v からのjコマンドからのd×2コマンド
これは選択範囲を選んでまるごと吹き飛ばすことができる。
ctl + vからのw or bコマンドからのd×2コマンド
ctl + vでvisual blockモードに移行し単語区切りで横移動して削除。
:を使ったコマンド
vimには:を使ったコマンドも数多く存在する。
:w・:q・:wq
基本中の基本。wで保存。qで終了。:wqで保存して終了。
:行番号
これも基本中の基本。指定した行番号へ飛ぶ。
行番号 + shift + g
こっちの方がコロン打法の移動より便利だし、覚えやすいかもしれない。gは多分、GO!!の意味。
visual mode + : s/置換される文字列/置換する文字列/g
visual modeからコロンを打つと、自動で置換用のコマンドを使えるようになる。使えば、簡単に置換範囲を決めることができ、範囲分だけ置換をおこなえる。
:’a,’bs/書き直したい文字列/書き直す文字列/g
こちらも全部置換されて欲しくない時、範囲を指定してその範囲だけで置換を行えるものだが、上記のものより扱いやすい。理由は行数なんていちいち数えてられないから。つまり、局部分的に置換することができる。
始点で ma と押し、
行きたい場所まで移動したら、
終点で mb と押して、コマンドを入力する。
.\{-} という便利なやつ
特定の同じ記述に対して有効な置換方法。例えば、
class="aaa"
class="bbb"
class="ccc"
という記述があったとして、
:'<,'>s/class=".{-}"/class="置換後の文字"/g
と記述することで、
class="置換後の文字"
class="置換後の文字"
class="置換後の文字"
上記のような置換を行うことができる
他の文字列置換方法
最後にgを入れるとファイル内の全ての文字列を一括で置換
:%s/置換対象文字列/置換後の文字/g
最後にcを入れると。文字列を1つずつ確認しながら置換
:%s/置換対象文字列/置換後の文字/c
最後にgcを入れるとファイル内すべてのマッチした文字列を確認しながら置換
:%s/置換対象文字列/置換後の文字/gc
文字のエスケープ処理について
\も含めた文字列を変換したい場合、\をもう1つ入れて特殊文字扱いの\をエスケープさせてあげないと文字列扱いされず、置換対象に取れないので注意。
;を使うことで見易くできる。
ex) :%s;\書き直したい文字列;\書き直す文字列;g
置換する記述を補完することができる
visualモードで(shift+vなりctrl+v)で範囲を選んでshiftを押しながら「:」を押すと「:'<,'>」の置換を意味する文字列を補完してくれる。これに続けてs/・・・と繋げていくことができる。
終わりに・・・
もっと強くなるためのコマンドがあるはずなので、もっと調べて吸収したい・・・ぶっちゃけまとめ終わった後に見返してみたら知ってるコマンド少な!!!!!となった・・・
vimのカスタム状況はこちらです。ご参考になれば・・・また、このプラグインで強く慣れる!というのがあればそちらもまた教えていただけると嬉しいです。
私のvimカスタム