【Vim】初級~中級者向けTIPS(実践Vim備忘録)
はじめに
概要
実践Vimを5部まで読んで、自分が便利と思ったTIPを集めた記事です。
今まで手癖でやっていたパッとしない操作を置き換えるようなものがメインです。
対象読者
想定している層は、主要なコマンドを一通り知っている初級者~中級者ぐらいです。
vimをよく知らない人も、もしよかったら「こんなことできるのか~」ぐらいに眺めていってください。
環境
VS Code & VSCode Neovim
(キャプチャを撮る際にスクリーンキャスト機能が便利だった)
ちなみに、自分は普段vimはメモ帳程度にしか使ってないです。メインで使う環境はVisual Studioなので、拡張機能のVsVimを使ってます。
なので厳密には、本記事はVimの話というより、Vimキーバインドの話がメインになります。
サンプルについて
一部のTIPにはgifでサンプルを載せてます。写ってるコードは一応java scriptですが、エディタの話なので基本中身に触れることはなく、js知らなくても問題ないです。
動確してないので構文ミスとかあるかもしれない。
TIP集
各コマンドは、特段の記載がなければ、ノーマルモードの話です。
※各項のうしろについてるTIP~
というのは実践Vim内の記載と対応しています。
,
fモーションを逆順にたどる TIP4
fコマンドによる移動を前に進めるのは;
ですが、戻りたい場合は,
です。
なかなか定着しなくてbとかFとか使ってしまう。
g~
大文字小文字をトグルする TIP12
g~
で大文字小文字をトグルすることができます。
gu
, gU
しか知らなかった。たいていの場合はトグルで事足りると思うので便利そう。
UNIXライクなキーバインド TIP13
UNIXライクなキーバインドが挿入モードで使えるそうです。
linuxとかmacとか使ってる人には馴染み深いかもしれません。私はあまり慣れてないですが、挿入モードで使える貴重な機能なので覚えて活用したいです。
-
<C-h>
一文字削除 -
<C-w>
一単語削除 -
<C-u>
行頭まで削除
(キー入力がうまく表示されてないですが、<C-h>
, <C-w>
, <C-u>
の順に実行してます。 )
0
ヤンクレジスタ TIP15
無名レジスタはすぐに上書きされますが、直近のヤンクを保持しているレジスタがあります。
以下は変数の中身を入れ替えるとき、ヤンク後にうっかりd
コマンドを使ってしまったケースを、ヤンクレジスタで何とかする例です。
=
Expressionレジスタ TIP16
vimスクリプトによる評価が発生するレジスタです。
<C-r>=1+1
とかすると2
になります。
便利そうですが、本記事の環境では使えませんでした。
s
一文字消してから挿入モード TIPS19
実践Vimの受け売りですが、+
を +
にしたい場合などに便利そうです。
今までは、まれによくうっかり押してポルナレフ状態になってましたが、理屈が分かれば怖くないですね。
o
ビジュアルモードの操作位置をトグルする TIP21
ビジュアルモードに入ると、選択範囲の終端部分を動かしていくことになりますが、oを押すと始点を動かせます。
いつも始点ミスったことに気づいたらビジュアルモード入りなおしてたのでめちゃくちゃ助かる。
以下はfugaObj
の別変数に切り出そうとしたら、ビジュアルモードの始点が間違っていたのを、o
でなんとかする例です。(見返して気づいたけど)da{
で良い
gv
直近の選択範囲を再選択 TIP27
直近の選択範囲を再選択してビジュアルモードに入ってくれます。全く知りませんでしたが、すごく便利そう。
以下はTIP21のサンプルの続きで、切り出し元のオブジェクトの中身が要らなくなったので、gv
で再選択して書き換える例です。
'<,'>
範囲指定のマーク TIP28
範囲指定してからコマンドラインを触ると入ってる奴です。
直近の選択範囲の始点('<
)から終点('>
)という意味だそうです。
normal
コマンドラインからノーマルモードのコマンドを実行する TIP30
選択行のそれぞれにノーマルコマンドを当てたりできます。省略形はnorm
。
これも実践Vimの受け売りですが、以下は各行につけ忘れていたセミコロンを、normal
コマンドに.
を渡してつける例です。
/
コマンドによるジャンプはモーション TIP50
全然知らなかったのですが、/
コマンドによるジャンプはモーションで、オペレータに渡せます。
しかもd
コマンド等のオペレーターに渡した場合は、検索文字列の手前までのみが消えてくれます。
排他的なモーションだからだそうです(?)。
Tab
と<C-i>
は等価 TIP55
<C-o>
で戻り過ぎて、<C-i>
で進ことがあると思いますが、tab
でも同様に進めるようです。押しやすいし直感的なので助かる。
ちなみに挿入モードで<C-i>
を入力するとTab
が入ります。こっちはありがたくない。
g;
, g,
直近の編集個所をたどる TIP60
<C-o>
, <C-i>
の編集箇所だけたどれるバージョン(違うかも)。
p
コマンドすると選択範囲が上書きされる TIPS 61
ビジュアルモードで言われてみれば直感的ですが全く知らなかった。
下は、引数の定義を丸ごと上書きする例です。
今までこういった場合はP
→l
→dt)
とかしてましが、こっちのほうが対応できるケースが多いうえに、ミスも減りそうで良い。
.
コマンドを使う TIP66
マクロ中にn
→.
はよくあるパターンですが、それをそのままマクロに記録できます。
いわれてみれば当たり前ですが、考えたこともありませんでした。いつも頭の中で予行練習してから一発撮りみたいな感じでマクロを記録してたので、だいぶハードルが下がりました。
q<レジスタの大文字>
マクロに追記 TIP68
qQ
とかでマクロに追記できます。今まで忘れた操作あったらu
連打から全部やり直してました...
終わりに
買おう!
参考文献
実践Vim 思考のスピードで編集しよう! – 2013/8/29
Drew Neil (著), 新丈径 (翻訳)
Discussion