先日の VimConf 2024 のスポンサーになりました 記事にあるように、株式会社リクルートは、VimConf 2024 という世界最大の Vim の国際カンファレンスのスポンサーになり、何名かが VimConf に参加してきました。
(過去には Vim初心者に贈る、Vimの各種モードを完全に理解するとっておきの方法 にあるように、社員から登壇者も出ています)
VimConf 2024について語ることは膨大な量があるのですが、スタディサプリProduct Team Advent Calendar 2024 の6日目の記事である本ページでは、VimConf 2024のうち daisuzuさんによる Mastering Quickfix というセッションについて軽く勝手に補足説明を行わせていただこうと思います。
背景
VimConf 2024の各発表の内容は、Vim自体の将来の方向性、Vim plugin開発、Vimの活用の応用例などが豊富ですが、中にはVimの基本機能のうちとくに重要なものを深く掘り下げるものもあります。本記事で取り上げるMastering Quickfixもその一つで、これは何度強調しても強調しすぎることはない重要な要素でもあり、改めてVim使いの皆様にお伝えしたいと思い、今回改めて記事としても取り上げてみることにしました。1
発表者のdaisuzuさんは、VimConf 2017, 2018, 2019に続いて4回目の発表になり、Vimの基本機能についての基礎と発展的話題を扱うことが多い方です。今回のセッションは、Quickfix というVimの機能についての話題です。
余談ながらdaisuzuさんが英語で発表するのは今回が初めてだったそうです。(VimConf運営による日本語への同時通訳も提供されています)
Quickfix
Vimの強みは、文書の記述でなく編集機能も優れている点です。世のtext editorと呼ばれているものの多くは実態としてはtext inserterにedit機能もついているというものが多いですが、Vimはその中で希少な、text editerにinsert機能もついているという立ち位置をとっています。2
Quickfixはまさにその編集のために非常に有用な基本機能のうちの一つです。
例えば、Goなどのコンパイル型言語でコードを書く際のコンパイルエラー時に、エラーの原因となった特定箇所を編集中のVimで改めて開きたいといったシーンで、エラーメッセージを目で読んだ上で、わざわざ手動でそのファイル名を指定して手元で開き、メッセージで指定された行番号を手動で入力してジャンプするのは本来二度手間です。メッセージに応じてVim側に解釈を任せ、該当箇所に自動的にジャンプしてもらいたくなることはよくあると思います。皆さんの中にはそういった時、例えばエラーメッセージのファイル名と行番号を指定している該当箇所をコピペして、vimの :e
や :new
の引数に与えるなどでジャンプさせることもあると思います。
Quickfix はそのような問題を解決するためのVimが公式に提供する汎用的な機能の1つです。
Quickfixという名前を知らなくても、 :make
とか :vimgrep
などを単体で使ったことがある人はかなり多いと思います。これらもQuickfixを利用しています。
また、LSPなどのVimプラギンがQuickfixを使っていることも多く、Quickfixの操作のための :copen
, :cclose
などが必須とされていたりもしますね。
Quickfix自体については、ぜひ以下に挙げる本発表をご参照ください。
Advanced Techniques
本発表の後半部分です。実際のユースケースに基づいた応用例を示しています。
https://speakerdeck.com/daisuzu/mastering-quickfix?slide=16
複数のファイルにまたがったyankをした上で、該当箇所をいい感じに上書きするようpasteする、というのを複数の候補に対してまとめて行うという課題に対して、
:lgrep!
getloclist()
- ^ を内部的に用いるVim scriptの関数
- ^ を内部的に呼び出すmacro
の組み合わせで解決しています。このような課題の解決方法はいろいろあり、たとえばRubyなどの慣れたスクリプト言語で書いてその場で実行するとか、気合で1つずつぬくもりある手作業で行うなども考えられます。ですが、せっかくVimで編集しているので、Vim上の機能をさっと組み合わせるだけで解決できるというのを学んでおくのは価値があります。 とくにこのような行為は、普段から意図的に練習しておかないと、いざというときに呼吸をするようにさっと生み出すことはできません。そういった意味で、とても良い例だなと思いました。
発表
スライド:
https://daisuzu.hatenablog.com/entry/2024/11/23/232620
普段の練習の時は基本的に何も見ないようにしていた
スライドを見ながら喋ることでトークが途切れにくくなる
(中略)
そして今日も今まで通りGoogleスライドを使いましたが、なんと会場のスクリーンにプレゼンを映しながらスピーカーノートを表示することができませんでした。
接続チェックの段階でそれに気付いたときはかなり焦りましたが*3、スピーカーノートが完成したところで満足せず、何も見ないで話せるようになるまで練習しておいたおかげで事なきを得ました。
とあるように、発表練習を反復するというプロセスがありました。 こちらの記事では明確に書かれていませんが、懇親会3 でも発表内容に関する英語での議論が行われていたと推測します。おそらくその場でもこの事前練習が役立っていたのではないかと想像しています。
動画
2024-12-06 記事公開時点ではVimConf 2024の動画はまだ公開されていませんが、近日中に公開されるはずです。 以下の動画一覧を毎日チェックすることで、VimConf 2024の動画が公開され次第すぐに確認することができます。
https://www.youtube.com/@vim-jp/videos
(毎日チェックするのが大変な場合は、チャンネルをsubscribeするという別解もあります)
[UPDATED 2024-12-08] 動画が公開されました。
VimConf 2024 に参加してきました (Quickfix編) ということで、Mastering Quickfixの発表についての議題を主に取り上げました。
VimConf 2024 は他の発表も非常に多様で濃厚で、懇親会では僕を含むVim使いの皆様による議論は大変盛り上がっていました。VimConf開催後も、各ソーシャルメディアやvim-jp slackなどでVimConf関連話題の議論が続いており、改めてとても有意義なカンファレンスだったなと感じています。
文責
- 一方VimConf 2024にはVim入門のような内容の発表は一切存在しません。VimConf はすでにVimを使っている人向けのカンファレンスなためです。↩
-
Vimを起動した直後はnormal modeという文字を入力するのではなく編集するモードになっています。文字を実際にバッファ (ほぼファイル) に書き込むためには、
i
やa
などによってinsert modeに移行する必要があります。これは、EmacsやnanoやVSCodeやInteliJ IDEAやAtomなどの多くのエディタとは異なる点です。↩ - VimConfは例年懇親会を最重要なものとして位置づけています。日頃Vim自体の開発やVimを用いて別のものを開発しているさまざまなVimユーザが、VimConfでの各発表という話題をもとに、実際に交流する機会を設けることで、以後のVimコミュニティのさらなる発展を促進することを目的としているからです。↩