Vim ゲームを次のレベルに引き上げたいですか? Vim を使用していた頃から、私は Vim で編集する際に膨大な時間と頭痛の種を節約するための多くの優れたヒントやコツを学びました。このガイドでは、ワークフローに組み込むことができるように、私が特に重要なヒントをいくつか紹介します。
Vim は、マウスや矢印キーに頼らずに効率的にナビゲーションできるように設計されています。 Vim のカーソル移動コマンドを知っていれば、大きなファイルを扱うときに多くの時間を節約し、正気を保つことができます。 Vim には、文字、単語、段落ごとの移動から特定の場所へのジャンプまで、カーソルを素早く移動する方法がいくつか用意されています。
矢印キーのほかに、H (左)、J (下)、K (上)、L (右) を使用して文字単位で移動できます。文字の前に数字を追加して、その文字数をジャンプすることもできます。したがって、5j を押すとカーソルが 5 行移動します。より長い距離を移動するには、次のものが必要です。
さらに、特定の行にジャンプしたい場合は、その行番号を入力してから、 G その線に行くために。したがって、500 行目に移動したい場合は、次のように入力します。 500G を押してその行にジャンプします。
開発者とコンテンツ作成者が直面する一般的な問題は、インデントの不一致です。チームやプロジェクトによっては、インデントにタブを好む場合もあれば、スペースを好むチームやプロジェクトもあります。 Vim では、プロジェクトの特定の要件に応じて、タブをスペースに変換したり、その逆に変換したりできます。
既存のファイル内のすべてのスペースをタブに変換し直す場合は、次の 2 つのコマンドを実行します。
:set noexpandtab
:retab!最初のコマンドは、スペースの代わりにタブが使用されるようにします。 2 番目のオプションでは、タブストップ設定に基づいてスペースを強制的にタブ文字に変換します。
スペースを使用し、既存のファイル内のタブを変換したい場合は、次のコマンドを実行します。
:set expandtab
:set tabstop=4
:set shiftwidth=4
:retab
これらのコマンドは、タブをスペースに変換する際のインデント ブロックの詳細を Vim に伝えます。
インデントは、ファイルをきれいに整理した状態に保つための良い習慣です。 Python などの言語を使用している場合、正しいインデントがより重要になります。 1 つのコマンドで、ファイル内のすべての行をインデントできます。まず、入力します ぐぐ ファイルの最初の行にジャンプします (これも役立つヒントになる可能性があります)。次に次のように入力します。 =G 行をインデントします。したがって、最後のコマンドは次のようになります。
gg=G
速く入力するとタイプミスやミスが多くなります。 Microsoft Word や Google ドキュメントなどの最新のワード プロセッサには、正しいスペルの単語を提案するスペル チェッカーが備わっています。 Vim にはスペル チェッカーも組み込まれています。スペルが間違っていると思われる単語が強調表示されます。スペル チェッカーをオンにするには、次のコマンドを使用します。
:set spell
ビジュアル モードで作業している場合は、文字、行、またはブロックごとにテキストを選択できます。いずれかの方向にテキストを選択し始めると、選択範囲を反対方向に展開または変更する必要があることに気づく場合があります。ビジュアルモードを終了して選択をやり直す代わりに、oボタンを押すと選択の方向を変更できます。
大規模なコードベースで作業する場合、多くの場合、コード ブロックの終わりを見つける必要があります。コードが適切にフォーマットされ、インデントされていない限り、それは困難です。 Vim では、対応する括弧にジャンプすることで、コード ブロックの先頭または末尾を簡単に見つけることができます。パーセント記号 (%) を押すと、まさにそのとおりになります。開始括弧上で % を押すと、終了括弧にジャンプし、その逆も同様です。
これは、括弧、中括弧、および角括弧に対して機能します。
これはかなり簡単です。デフォルトでは、Vim は行番号を表示せず、チルダ記号のみを表示します。 Vim ではさまざまなモードで行番号をオンにすることができます。絶対行番号モードでは、1 行から最後の行までの行番号が表示されます。これを設定するには、次のコマンドを実行します。
:set number
相対番号モードでは、カーソルがある行は 0 行目になります。残りの行には、カーソルが置かれている行を基準にして番号が付けられます。したがって、カーソルの上下の行は 1 から始まり、継続します。相対番号付けを有効にするには、次を実行します。
:set relativenumber
両方必要な場合はどうすればよいですか?ハイブリッド モードと呼ばれる別のモードがあり、両方を使用できます。ハイブリッド モードを有効にすると、カーソルが置かれている行の絶対行番号が表示されます。ただし、上下の線は相対的な数値を示しています。このモードを有効にするには、次のコマンドを実行します。
:set number relativenumber
Vim の :norm コマンドを使用すると、コマンドライン モードから通常モードのコマンドを実行できます。これは、繰り返しのタスクやバッチ編集に役立ちます。同じ通常モードのコマンドを複数の行に同時に適用する必要がある場合、各行に同じことを繰り返すのではなく、単一行を記述することで実行できます。
たとえば、数行の末尾にセミコロン (;) を追加したいとします。まず、すべての行を選択する必要があります。次に、次のコマンドを実行します。
:norm
A;
Enter キーを押すと、選択したすべての行の末尾にセミコロンが付きます。
同様に、テキストの挿入、大文字と小文字の変更、または複数行のインデントを一度に行うことができます。
従来のテキスト エディターには、文字や単語を削除するためのキーボード ショートカットが多数あります。 Vim には、テキストの一部をすばやく削除するための独自のショートカット セットがあります。文字、単語、行全体を削除できます。カーソルの前後方向から削除できます。便利なショートカットをいくつか紹介します。
スニペットは、ワークフローを高速化するためにすぐに挿入できる事前定義されたテキストのようなものです。同じ定型コードやテキストを繰り返し入力する代わりに、スニペットを使用して長いテキスト ブロックにすばやく展開できるため、時間を節約し、タイプミスを減らすことができます。動的スニペットは、現在の時刻、日付、その他の可変情報などの動的コンテンツをスニペットに含めることができるようにすることで、これをさらに一歩進めます。
UltiSnips や vim-snippets などのプラグインを使用すると、現在のコンテキストに基づいて調整される動的スニペットを定義できます。たとえば、「jd」を John Doe に展開するスニペットを作成してみましょう。 UltiSnips を使用している場合は、UltiSnips ファイル (通常は ~/.vim/UltiSnips/snippet_file_name.snippets:) に以下を追加します。
snippet jd
John Doe
endsnippet
時刻や日付などの動的なスニペットの場合は、次のようにフォーマットできます。
snippet time
`!v strftime("%H:%M:%S")`
endsnippet
ここで、「time」と入力して Tab ボタンを押すと、現在時刻が自動的に挿入されるはずです。
Vim には単語補完機能が組み込まれています。これは、単語が頻繁に登場するもの (プログラム内の変数など) を書くときに便利です。単語をオートコンプリートするには、単語の入力を開始し、Ctrl+N を押します。 Ctrl+P を入力することもできます。違いは、後者はリストを下 (最後の単語) から検索するのに対し、前者はリストを上から検索することです。
これらの新しいヒントを理解すれば、より自信を持って Vim を使用できるはずです。 Vim を終了して Vim プロファイルを定義する方法を説明する他のガイドもあります。