😀

【Vim】初級~中級者向けTIPS(実践Vim備忘録)

2023/10/30に公開

はじめに

概要

実践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とか使ってしまう。

tip4.gif

g~ 大文字小文字をトグルする TIP12

g~で大文字小文字をトグルすることができます。
gu, gUしか知らなかった。たいていの場合はトグルで事足りると思うので便利そう。

tip12.gif

UNIXライクなキーバインド TIP13

UNIXライクなキーバインドが挿入モードで使えるそうです。
linuxとかmacとか使ってる人には馴染み深いかもしれません。私はあまり慣れてないですが、挿入モードで使える貴重な機能なので覚えて活用したいです。

  • <C-h> 一文字削除
  • <C-w> 一単語削除
  • <C-u> 行頭まで削除

(キー入力がうまく表示されてないですが、<C-h>, <C-w>, <C-u>の順に実行してます。 )
tip13.gif

0 ヤンクレジスタ TIP15

無名レジスタはすぐに上書きされますが、直近のヤンクを保持しているレジスタがあります。

以下は変数の中身を入れ替えるとき、ヤンク後にうっかりdコマンドを使ってしまったケースを、ヤンクレジスタで何とかする例です。
tip15.gif

= Expressionレジスタ TIP16

vimスクリプトによる評価が発生するレジスタです。
<C-r>=1+1とかすると2になります。
便利そうですが、本記事の環境では使えませんでした。

s 一文字消してから挿入モード TIPS19

実践Vimの受け売りですが、+ + にしたい場合などに便利そうです。
今までは、まれによくうっかり押してポルナレフ状態になってましたが、理屈が分かれば怖くないですね。

tip19.gif

o ビジュアルモードの操作位置をトグルする TIP21

ビジュアルモードに入ると、選択範囲の終端部分を動かしていくことになりますが、oを押すと始点を動かせます。
いつも始点ミスったことに気づいたらビジュアルモード入りなおしてたのでめちゃくちゃ助かる。

以下はfugaObjの別変数に切り出そうとしたら、ビジュアルモードの始点が間違っていたのを、oでなんとかする例です。(見返して気づいたけどda{で良い)
tip21.gif

gv 直近の選択範囲を再選択 TIP27

直近の選択範囲を再選択してビジュアルモードに入ってくれます。全く知りませんでしたが、すごく便利そう。

以下はTIP21のサンプルの続きで、切り出し元のオブジェクトの中身が要らなくなったので、gvで再選択して書き換える例です。
tip27.gif

'<,'> 範囲指定のマーク TIP28

範囲指定してからコマンドラインを触ると入ってる奴です。
直近の選択範囲の始点('<)から終点('>)という意味だそうです。

normal コマンドラインからノーマルモードのコマンドを実行する TIP30

選択行のそれぞれにノーマルコマンドを当てたりできます。省略形はnorm

これも実践Vimの受け売りですが、以下は各行につけ忘れていたセミコロンを、normalコマンドに.を渡してつける例です。
tip30.gif

/ コマンドによるジャンプはモーション TIP50

全然知らなかったのですが、/コマンドによるジャンプはモーションで、オペレータに渡せます。
しかもdコマンド等のオペレーターに渡した場合は、検索文字列の手前までのみが消えてくれます。
排他的なモーションだからだそうです(?)。

tip50.gif

Tab<C-i> は等価 TIP55

<C-o>で戻り過ぎて、<C-i>で進ことがあると思いますが、tabでも同様に進めるようです。押しやすいし直感的なので助かる。
ちなみに挿入モードで<C-i>を入力するとTabが入ります。こっちはありがたくない。

g;, g, 直近の編集個所をたどる TIP60

<C-o>, <C-i>の編集箇所だけたどれるバージョン(違うかも)。

ビジュアルモードでpコマンドすると選択範囲が上書きされる TIPS 61

言われてみれば直感的ですが全く知らなかった。

下は、引数の定義を丸ごと上書きする例です。
今までこういった場合はPldt)とかしてましが、こっちのほうが対応できるケースが多いうえに、ミスも減りそうで良い。
tip61.gif

マクロ中に.コマンドを使う TIP66

n.はよくあるパターンですが、それをそのままマクロに記録できます。
いわれてみれば当たり前ですが、考えたこともありませんでした。いつも頭の中で予行練習してから一発撮りみたいな感じでマクロを記録してたので、だいぶハードルが下がりました。

q<レジスタの大文字> マクロに追記 TIP68

qQとかでマクロに追記できます。今まで忘れた操作あったらu連打から全部やり直してました...

終わりに

買おう!
https://www.amazon.co.jp/実践Vim-思考のスピードで編集しよう-Drew-Neil/dp/4048916599

参考文献

実践Vim 思考のスピードで編集しよう! – 2013/8/29
Drew Neil (著), 新丈径 (翻訳)

GitHubで編集を提案

Discussion