Vimを学ぶことによる副次的なメリットおわりにこの記事の目的エディタに興味の薄い競技プログラマー(あるいは誰でも)に、「Vimちょっと調べてみようかな、遊んでみようかな」と少しでも思ってもらうことです。私は昨年の4月に働き始めてからVimを使い始めて、1年半ほど経った今ではVimキーバインドは手放せないものとなりました。職場で周囲のほとんどの人がVimを使っていたことから、「きっと素晴らしいものなんだろう」と思いはじめました。当時は研修中で比較的時間に余裕があったため、帰宅してからVimについて調べたり練習したりしていました。一方で、昨年9月頃から始めた競技プログラミングでは、素早く問題を解くことが重要で、ひいては高速なコーディングがプレイする上で有利になります。最近ではVSCodeを使っている競技プレイヤーも多いようですが、幸いVSCodeにはVSCodeVimという優れたVim拡張があります。多少の初期投資によって今後一生活かせる、快適で高速で、そしてなにより楽しいコーディング体験をしてみませんか。Vimって難しいんじゃないの?しばしば、Vimの習得難易度は高いと聞きます。自分もVimを使い始めるまではそう思っていましたし、実際にそのとおりな部分もあると思います。自分の場合、よく使うコマンドを整理した上で数週間Vim縛りでコーディング、テキスト編集をしていたら、自然と定着していました。「とりあえずvimtutorをやってみよう」とか「実践Vimという本を読むといいよ」と呼びかけているのを見かけます。強い動機づけをすることで、意欲を保ったまま効率的に学習できると考えています。そのために、黒魔術のようなとても覚えられそうにないものではなく、すぐにでも便利に使えそうな操作を「下見してみる」のが良いかと思います。私が1年半ほど使ってみて、今でも変わらずに便利だと思っておりかつかんたんな操作は、以下のようなものです。私がVimを学び始めて一番「おおっ」となったのはこれで、今でも他人に勧めたい操作No.1です。略で、現在カーソルが置かれている単語を削除しインサートモードに移行するコマンドです。削除後にインサートモードに移行してくれるおかげで、単語を即座に修正することができます。ダブルクォート含めてすべて削除するコマンドです。いうようなバリエーションが有り、それぞれの要素数の掛け算の数だけ異なった操作ができることになります。同様な操作を普通のエディタでやるならば、マウスカーソルで正確にドラッグする手間が必要だと思います。space長押し、とかでしょうか。Vimであれば「雑に」目標位置にカーソルを移動させたあと、上記の3つのキーを押下するだけで、所望の結果が達成できます。コマンドめちゃくちゃ地味なんですが、これを知ったときかなり嬉しかったのを覚えています。このコマンドは、現在のカーソル位置に関わらず、1つ下に改行してインサートモードに移行します。行の途中にカーソルがあるけど、すぐ下に改行したい、というケースは結構あるのではないでしょうか。よる一行コピーこれもとても地味ですが、1行単位で削除したりコピーしたりというのは、頻繁に行う操作の1つかと思います。後ろにペーストできます。(行全体を選択するのに2回でいいときと3回やらないとダメなときとかがあって、ちょっといらっとするときがあります)。surround.vimによる「なにかを囲むもの」に対する操作Vimネイティブなものではなく、プラギンの範疇なのですが、おそらくは導入することになるので紹介しています。選択範囲を丸括弧で囲んでくれます。現在カーソル位置にある単語に対してダブルクォートで囲むことができます。カーソル位置の単語を二重引用符で囲むあるいは、既存の「囲んでいるもの」を別のものに置換することもできます。打つと、現在のカーソル位置を囲んでいる最近傍のシングルクォートを、ダブルクォートで置換します。すると、カーソル位置を囲む最近傍の丸括弧を削除します。紹介した操作の中ではちょっとだけ複雑ですが、何回も使っていると忘れないぐらいには頭に染み込んできます。直前に別のプログラミング言語を使っていて、「この言語では丸括弧が必要なのに丸括弧なしで書いちゃった」というときなどはよく使っています。一部ですが、私が特に便利だと感じている操作を紹介しました。殆どの操作において、普通のエディタならばマウスや矢印キーを慎重に使うことが要求されるのに対し、Vimでは雑かつ楽に実行できます。VSCodeのVim拡張VSCodeにおけるVim拡張がVSCodeVimなんですが、話を聞いたところ他のIDEのVimプラグインに比べて出来がいいようです*4。個人的に優れていると思うのは、以下の点です。モードごとに動作を変えたりもできます。込み入ったものでなければ.vimrcに記述しているようなカスタムマッピングは、たいていVSCodeVimでも再現できます。commentary.vimなどが該当します*5。対応する文字を入力すると、文字が付与されている部分にカーソルがジャンプします。打つとカーソル位置の行をコメントアウトしてくれます。打つと、その行範囲をすべてコメントアウトしてくれます。カーソル位置の行をコメントアウト選択した複数行をコメントアウト3については、そもそもVSCode本来の機能で便利なものが多いため、VSCodeの強みとVimの強みの両方を享受できます。VSCodeの話になりますが、ファジーファインダーになっているquickOpenが特にお気に入りです。インストール方法はVSCodeの他の拡張機能と同じで、簡単に導入・破棄できます。「ちょっとだけVim試してみよう」と思ったら是非気軽にインストールしてみてください。Vimを学ぶことによる副次的なメリットある程度Vimに習熟してから気づいたことですが、以下のようなメリットがあったことに気づきました。このあたりの抵抗が早めになくせたのは、個人的には結構大きいと思っています。これらをVimを学習する主たる動機にするのは難しいと思いますが、一応触れておこうと思いました。「自分はVimのここが好きで、そんなに導入コストは高くないと思うから試してみて!」という部分に特化した内容をまとめてみました。若い人などで「Vimってなんなの?」と思っている人が少しでも興味を持ってくれたりするととても嬉しいです。ちなみに、私は業務ではVSCodeを、競技プログラミングではneovimを使っています*7。scriptや周辺技術をちゃんと理解してプラギンを管理したり、あるいはプラギンを自作するとなると、とても難しくなってくるという認識です。*2:どちらも優れた教材なのは疑いようがなく、実際に私も両方やりました。*3:これは流石に自分のエディタ操作スキルが低いだけで、それぞれのエディタでショートカットがあるものなのかもしれません。*4:聞いたところによると、Vimの基本的な機能もエミュレートできていないものもしばしばあるとか。*5:最近はREADMEを読めていないので、もう少し増えているかもしれません。*6:厳密には、Leaderをspaceキーにマッピングする設定が必要です。*7:GoとVimの相性が良いのと、neosnippetがとても使いやすい。体験してしまいました。残り時間15分ぐらいで後回しにしたCが解けて5完でした。(A〜C解答)月別アーカイブはてなブログをはじめよう!magurogumaさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。