📝

Vimを勧めるときのすヽめ

2024/01/22に公開

始めに

https://x.com/YKirin0418/status/1745413612393619781

最近、業務で自分のVimを使いながら、Vimの良さを伝えています。
そんな中で分かったことが、Vimの良さを伝えるときに相手にとって一番有益な情報は、Vimの中で生活することではないということです。(それは本当にそう、何を当り前のことを…。)

そもそも普段VSCodeやIDEといったエディタを使っている方からすると、Vimは不便なエディタであり、サーバーに入ったとき止むを得ず使うエディタなのです。
普段Vimmerが何気なく使っているキーバインドでも、Vimを使い慣れない人からしたら、目から鱗の超絶便利機能だったりします。

この記事ではVimの良さを伝えたいけど、何を教えると喜んでもらえる操作なのか、それに少し気がついた気がするので、それを共有したいと思います。

対象とする読者

ある程度Vimの操作ができる人で、Vimの良さを伝えたいという思いがある人。

注意点

  • 無理に勧めない。
  • 時間に余裕があるときに限る。
  • 必要があれば、都度デモ操作を挟むこと。

ゴール

Vimに慣れない人へ、簡単なVimキーバインドをレクチャーできるようになる。
もしくは、レクチャーしていく方針を掴む。

検索方法

Vimmerからしたら「超基礎中の基礎じゃないか!」と思われるかもしれませんが、これ知らない人って結構以外と居るんです。
当たり前と思っていることが、Vimmer以外では当たり前ではないのです。

/?による通常検索

これは実際にVimを使う場面に遭遇して知ったことなのですが、/?で検索を開始することを知らないことがあるので教えると喜ばれます。
仮に知っていても、検索から次の検索項目へ行くときに、nで前方Nは後方移動できるということは知らないということがあります。
また、検索で文字列を途中まで入力して、ESCでコマンドモードから抜けてしまう人もいるのでフォローしてあげるとよいでしょう。

*#によるカーソル下の文字列を検索

通常の検索で心を掴むことができたら、もう一押しです。
Vimはカーソル下の文字列を検索するために、*#を押せばカーソル下の文字列を自動でコマンド欄にインプットして検索を開始します。
通常のエディタであれば、検索対象の文字列を選択してからCtrl-fなどで検索モードになったりしますが、Vimなら一瞬という体験をしてもらえます。

これに関していうと、モードという概念のあるVimのよさの1つです。
Vimキーバインドのシンプルさを体験できる簡単な方法なので、機会があれば是非教えてみてください。

編集方法

Vimの真骨頂である文字列の編集です。
編集方法を伝えるときは、高度なものよりも簡単な操作と安心感を伝えるのが大事です。
「少しだけVimキーバインドを試してみて」という感じで、タイプするキーを順番に言ってあげるのがポイントです。
また後述しますが、オペレータを交えた操作はVim初心者には高度な操作に感じてしまうため、ビジュアルモードをベースにするのがよいでしょう。

undo/redo

テキストエディタとして無くてはならない機能といえば、undo/redoです。

  • uで元に戻す
  • Ctrl-rで元に戻した操作をやりなおす

この操作もVimを使い慣れない人からすると知らない機能です。
テキストを編集した後に、後学のためと言いながら教えるのがよいでしょう。
ちょっとしたミスを戻したり、戻しすぎても元に戻せる機能は、テキストエディタの心理的安全性ですね。

ビジュアルモード

特定の文字列に対して変更を行なったり、消したりという操作はテキスト編集の基礎です。
通常のエディタで行なう操作でも、Vimの中だと雰囲気がガラっと変ります。
編集範囲を視覚的に分かりやすくする方法として、ビジュアルモードはとても大事です。

手慣れたVimmerであれば、オペレータと合わせて編集操作を行ないますが、その感覚はVimに慣れない人からすれば高等テクニックです。
後述するテキストオブジェクトをレクチャーするときは、必ずビジュアルモードを介すようにしましょう。

テキストオブジェクト

Vimのテキスト編集を彩る一押し機能です。
ですがテキストオブジェクトによってどこまでの範囲が選択されるのか、影響範囲のイメージを付けてもらうためにも前述したビジュアルモードに入った状態でレクチャーしましょう。
範囲選択として、一番イメージがしやすいのはHTMLです。

適当にAIでサンプルのHTMLを生成させたので、操作例をキャプチャしておきました。

キーバインドサンプル

上記のHTMLに対して、ビジュアルモードで適当に選択操作をしてみました。
適当ゆえに、最後の方の操作が見切れているのはご了承ください…。

ビジュアルモードであれば、テキストオブジェクトによる選択範囲が分かりやすくなります。
また、HTMLのようなタグを範囲選択するという操作は、よくやる操作であり範囲選択のイメージがしやすくなります。

  • vit => タグの中を選択する
  • vat => タグも含めて選択する

Apacheの設定では、ディレクティブのブロックという形でタグが登場します。
実際に遭遇した例では、Apacheの設定を編集するときに、さきほど紹介したようなキーバインドを紹介して喜ばれました。

また、タイプしていくキーは順番に言っていくとよいです。
たとえばvitでタグ内を選択するときに、順番にvitと言いつつ、「ビジュアル・インナー・タグ」みたいな感じでタイプしているキーの意味合いが伝わるようにしています。
これによって、テキストオブジェクトで選択の範囲を指示しているというイメージがしやすくなるからです。

vatでタグも含めた選択をするときは、「ビジュアル・アラウンド・タグ」というようにしています。
「いや公式のヘルプでは"a word"じゃないか」と思われてしまうかもしれませんが、実際に選択される範囲のイメージのしやすさを考えたときに、アラウンド(周り)という単語で伝えた方が結果をイメージしやすくなります。

この範囲選択を切っ掛けに、クォーテーションの中や括弧の中を選択するというようなキーバインド紹介をするとよいと思います。

オペレータとドットリピート

ここまではビジュアルモードを介してのVimキーバインドを教えていく方針でしたが、オペレータを交えたキーバインド操作はエクストラステージと思ってもらった方がよいです。
場合によっては、画面共有や隣りで実際に操作をしてみる、といったアプローチをしてみてください。

画面上での変化が分かりやすいオペレータとして、cの変更オペレータを使っていきます
このときもビジュアルモード同様に、citなどタイプするキーを声に出しながら教えていきます。
これだけであれば文字列の削除後にインサートモードへ入るだけですが、オペレータを使うメリットとしてドットリピートできることを教えましょう。

このときに合わせて使うテキストオブジェクトはgnにしてみましょう。

help gn
                                            *gn* *v_gn*
gn          最後に使われた検索パターンを前方検索し (`n` のように)、
            マッチしたものを選択してビジュアルモードを開始する。
            カーソルがマッチの上にあるときは、それをビジュアル選択する。
            オペレータ待ちのときは、マッチに対してオペレータを実行する。
            例: "dgn" は次のマッチを削除する。
            すでにビジュアルモードなら、次のマッチの末尾まで選択範囲を拡大する。
            'wrapscan' が適用される。
            Note: `n` とは異なり、検索方向は前の検索コマンドには依存しない。

SVNという単語をcgnでGitに変更する操作をキャプチャしてみました。

キーバインドサンプル

cgnの操作に関しては置き換えでもよいかもしれませんが、目に見える変化は喜ばれやすいです。
最初の操作を繰り返すドットリピートでどんどん編集されていくところは、Vimを使う一番の理由ともいえるので可能であれば売り込みたい操作ですね。

まとめ

書き出してみて思ったのは、結構内容が「実践Vim」と同じような内容になったなぁと思いました。
実際、業務で活用できるという点に絞って活用例をまとめたので、必然と実践Vimっぽくなったのかなと個人的に考察してみたり。

教えている側からしても喜んで貰えることが一番大事ですし、小さな技術共有から効率が上がればwinwinですよね。
是非参考になれば幸いです!

GitHubで編集を提案

Discussion