序章


Vimは、従来のviテキストエディタを改良したもので、コードとプレーンテキストの編集に非常に強力です。 最初は鈍くて難しいように見えるかもしれませんが、コマンド構文のような言語のため、テキストを編集する最も効率的な方法の1つです。

前回の記事では、vimのインストール方法と基本的な編集について説明しました。 このドキュメントでは、編集時に利用できる多様性を示すのに役立つ可能性のある、より高度なトピックに進みます。

vimがインストールされており、上記のリンク先の記事で説明されている基本的な移動および編集コマンドに精通していることを前提としています。

高度なナビゲーション


新しい資料を始める前に、前の記事で学んだナビゲーションを少し確認しましょう。

  • 基本的な動き

    • h:左
    • l:右
    • j:ダウン
    • k:上
  • その他の動き

    • gg:ドキュメントの先頭
    • G:ドキュメントの下部、またはGの前に番号が配置されている場合は行番号
    • w:次の言葉
    • e:単語の終わり
    • 0:行頭
    • $:行末

ご覧のとおり、すでにかなりの数の移動コマンドを自由に使用できます。 ただし、他の方法で移動を指示することもできます。

次のコマンドを使用して、ページの現在表示されている部分のさまざまな領域にカーソルを移動できます。

  • H :カーソルを現在表示されているページの上部に移動します(「高」と考えてください)

  • M :現在表示されているページの中央にカーソルを移動します

  • L :カーソルを現在表示されているページの下部に移動します(「低」と考えてください)

(スクロールのように)カーソルの代わりにページを移動したい場合は、次のコマンドを使用できます。

  • CTRL-D :Page Down

  • CTRL-U :Page Up

  • CTRL-E :1行下にスクロールします

  • CTRL-Y :1行上にスクロールします

論理的な情報ブロックでナビゲートすることもできます。 これは、コードではなく通常のテキストを入力する場合に役立ちます。 これらは、単語と行のナビゲーションコマンドに似ています。

  • :次の文の先頭に移動します

  • :最後の文の先頭に移動

  • } :次の段落の先頭に移動します(空白行で区切られます)

  • {:最後の段落の先頭に移動します(空白行で区切られます)

ジャンプするファイルに独自のポイントを定義することもできます。 marksはファイル内の任意の場所で設定できます。 次に、これらのマークを参照して、そのポイントにジャンプするか、そのポイントを移動を受け入れるコマンドに渡すことができます。

  • m :「m」の後に文字を入力すると、その文字によるマーク参照が作成されます。

    • 小文字は現在のドキュメントに固有ですが、大文字は1回しか使用できません(別のドキュメントのセクションにジャンプするために使用できます)。
  • :一重引用符の後にマーク文字(以前は上記の「m」で定義)が続くと、カーソルがそのマークを含む行の先頭に移動します。

  • `:バックティックの後にマーク文字が続くと、カーソルがマークの正確な位置に移動します。

これらのコマンドを使用すると、マークを配置してから、現在の位置とマークの間に定義された領域でヤンク、削除、またはフォーマットすることができます。 これにより、編集オプションを非常にきめ細かく制御できます。

ドキュメントを管理する方法


多くの場合、ソフトウェアプロジェクトであろうとタームペーパーであろうと、作業しているときは、一度に複数のドキュメントを参照できるようにしたいと考えています。 Vimには、作業方法に応じて、これを行うためのいくつかの異なる方法があります。

バッファを管理する方法


複数のファイルを管理する1つの方法は、buffersを使用することです。 バッファは通常、編集用に開いているファイルを表します。 これらは基本的にvimが現在開いているすべてのものであり、簡単にアクセスできます。

次のようにvimで複数のファイルを開きます。

vim file1 file2 file3

これらの各ファイルは独自のバッファで開かれます。現在、最初のファイルしか表示されません。

:buffersと入力すると、使用可能なバッファーを確認できます。

:buffers

:buffers
  1 %a  "file1"             line 1
  2     "file2"             line 0
  3     "file3"             line 0
Press ENTER or type command to continue

次のバッファをチェックアウトする場合は、:bnと入力できます。 これは次のバッファに変更されます。 同様に、bに続けて番号または名前を入力することにより、番号(上記の最初の列)または名前でバッファーに切り替えることができます。 これは、ファイル名が完全でない場合でも機能します。

バッファを管理するためのコマンドのいくつかを次に示します。

  • :buffers :使用可能なバッファーを一覧表示します

  • :ls :上記と同じ

  • :bn :次のバッファに切り替えます

  • :bp :前のバッファーに切り替えます

  • :bfirst :最初のバッファーに切り替えます

  • :blast :最後のバッファーに切り替えます

  • :bdelete :現在のバッファーを削除します

  • :badd :次のファイル名で新しいバッファを開きます

  • :e :新しいバッファ内の別のファイルを編集して切り替えます。

Windowsを管理する方法


vimが複数のファイルを管理するために持っている別の制御メカニズムは、windowsまたはviewsの概念です。 これにより、現在の編集領域を異なるウィンドウに分割して、複数のバッファを同時に表示できるようになります。

現在のワークスペースを個別のウィンドウに分割するには、:splitまたは:spと入力します。 これにより、現在のウィンドウの上に新しいウィンドウが開き、フォーカスがそのウィンドウに変わります。 上記のバッファコマンドを使用して、新しいウィンドウに表示されるバッファを変更できます。

ウィンドウの作成と管理に使用できるコマンドは次のとおりです。

  • :sp :現在のウィンドウを2つに分割します。 最初は、同じバッファが各ウィンドウに表示されます。

    • 「sp」の前に数字を付けて、新しいウィンドウの高さを設定します。
  • :vs :現在のウィンドウを垂直に分割します。 最初は、同じバッファが各ウィンドウに表示されます。

    • 「vs」の前に数字を付けて、新しいウィンドウ幅を設定します。
  • CTRL-ww :フォーカスを次のウィンドウに変更します

  • CTRL-w(movement):指定された方向(h、j、k、l)でウィンドウにフォーカスを変更します

  • CTRL-wc :現在のウィンドウを閉じます

  • CTRL-w + :現在のウィンドウのサイズを大きくします

  • CTRL-w- :現在のウィンドウのサイズを小さくします

  • CTRL-w = :すべてのウィンドウを同じサイズに設定します

  • #CTRL-w_ :高さを前の「#」で示されたサイズに設定します

  • :only :現在のウィンドウ以外のすべてのウィンドウを閉じます

  • CTRL-wn :新しいバッファで新しいウィンドウを開きます

タブを管理する方法


vim内で複数のドキュメントを管理するための3番目の概念は、tabsの概念です。 多くのプログラムとは異なり、vimでは、タブにウィンドウを含めることができますが、その逆はできません。 タブには、バッファへのビューポートとして機能するウィンドウを含めることができます。

各タブのウィンドウレイアウトは個別に管理できます。 タブを作成するには、:tabnewコマンドを使用して新しいタブを開きます。

タブを管理する簡単な方法は次のとおりです。

  • :tabnew :新しいタブを開く

  • :tabclose :現在のタブを閉じる

  • :tabn :次のタブに切り替えます

  • gt :次のタブに切り替えます

  • :tabp :前のタブに切り替えます

  • gT :前のタブに切り替えます

  • :タブボール:個々のタブのすべてのバッファーを開きます

  • :tabs :使用可能なすべてのタブを一覧表示します

バッファ、ウィンドウ、タブをシャッフルすると、現在表示しているファイルが混乱することがあります。 現在表示しているファイル名をすばやく確認するには、次のように入力します。

  • CTRL-g :現在のファイル名を表示します

ドキュメント固有のコマンド


扱っているドキュメントの種類に応じて、vimには役立つ特定の機能があります。

プレーンテキスト


プレーンテキストドキュメントを編集している場合、vimはさまざまな方法であなたを支援することができます。 この機能に不可欠な機能の1つは、スペルチェックです。

vim内でスペルチェックをオンにするには、次のように入力します。

:set spell

使用する言語を設定するには、次のように入力します。

:set spelllang=[language abbreviation]

これで、ドキュメントのスペルがチェックされます。 通常の波線は、スペルミスのある単語の下に表示されます。 これがあなたの使い方です。

スペルミスのある単語間を行き来するには、次のように入力します。

]s    # Jump to next mistake
[s    # Jump to previous mistake

カーソルがスペルミスのある単語の上にあると、次のように入力してスペルの提案を表示できます。

z=

これにより、一致する可能性のあるリストが表示されます。 関連する番号を選択して必要なオプションを選択するか、Enterキーを押して単語をそのまま保持することができます。

単語のスペルをではなくとしてマークする場合は、その単語をスペルリストの1つに追加できます。 Vimは、現在のセッションで使用される通常のリストと一時的なリストの2つのスペルリストを保持しています。

「良い」単語リストに単語を追加するには、次のいずれかのコマンドを使用します。

zg    # Adds word to regular dictionary
zG    # Adds word to the current session dictionary

誤って単語を追加した場合は、その単語に移動して次のように入力することで削除できます。

zug   # Remove word from regular dictionary
zuG   # Remove word from the current session dictionary

フレーズの長い単語を頻繁に入力する必要がある場合は、略語を追加できます。

:abの後に省略形と展開を入力すると、vimは、省略形の後にスペースを入力するたびに展開を入力します。

たとえば、「Linux」の使用法を「GNU / Linux」で修正するというリチャード・ストールマンの例に従うスティックラーの場合、それを自動的に行う略語を作成できます。

:ab Linux GNU/Linux

これで、「Linux」と入力すると、vimは自動的に「GNU/Linux」に置き換えます。

Linux is an operating system.

変更点:

GNU/Linux is an operating system.

Linuxという単語だけが適切であるカーネルについて具体的に話している場合は、スペースを入力する前にCTRL-Vと入力して拡張をキャンセルできます。

GNU/Linux is an operating system with Linux(CTRL-V) as a kernel.

この略語を使用したくない場合は、次のコマンドで削除できます。

:una Linux 

これで、「Linux」は「Linux」のままになります。

あなたが時々しなければならないかもしれないもう一つのことは、伝統的なqwertyキーボードにない文字を挿入することです。 これらを「有向グラフ」と呼びます。 次のように入力すると、vimの有向グラフのリストが表示されます。

:digraphs

NU ^@  10    SH ^A   1    SX ^B   2    EX ^C   3    ET ^D   4    EQ ^E   5
AK ^F   6    BL ^G   7    BS ^H   8    HT ^I   9    LF ^@  10    VT ^K  11
FF ^L  12    CR ^M  13    SO ^N  14    SI ^O  15    DL ^P  16    D1 ^Q  17
D2 ^R  18    D3 ^S  19    D4 ^T  20    NK ^U  21    SY ^V  22    EB ^W  23
CN ^X  24    EM ^Y  25    SB ^Z  26    EC ^[  27    FS ^\  28    GS ^]  29
RS ^^  30    US ^_  31    SP     32    Nb #   35    DO $   36    At @   64

これで、CTRL-kに続けて左側の列に2文字を入力することにより、右側の列に任意の文字を挿入できます。

たとえば、私のコンピューターでは、英国ポンドの記号を入力するために、挿入モードで次のように入力できます。

CTRL-k Pd

£

ソースコード


コーディングしている場合、コードを操作するのに役立つさまざまなことがあります。

最も基本的なものの1つは、構文の強調表示です。 次のように入力すると、構文の強調表示を有効にできます。

:syntax on

これにより、検出されたファイル拡張子に基づいて、ファイルの構文の強調表示が設定されます。 強調表示されている言語を変更したい場合は、次のように言語を設定することで変更できます。

:set filetype=[language]

システムユーティリティを使用してファイル内の一部の行を変更する場合は、通常モードで!コマンドを使用して呼び出すことができます。

このコマンドはモーションを受け入れ、それを次のコマンドに送信します。

![motion] filter

たとえば、現在の位置からファイルの終わりまでの行を並べ替えるには、次のように入力します。

!G sort

Sortは、デフォルトでアルファベット順に入力をソートするLinuxコマンドです。

コマンドの出力をファイルに挿入する場合は、出力が必要な空白行に移動します。 タイプ:

!!command

これにより、指定したコマンドの出力がドキュメントに配置されます。

コマンドの結果を確認したいが、それをドキュメントに挿入したくない場合は、コマンドモード(:)バージョンを使用することもできます。これは次のようになります。

:!command

これにより、コマンドの結果が表示されますが、終了すると変更されていないドキュメントに戻ります。

繰り返しを減らす


多くの場合、あらゆる種類のファイルを編集または作成するときに、同じまたは類似の操作の多くを繰り返すことに気付くでしょう。 幸い、vimはコマンドのグループをマクロに保存するいくつかの方法を提供します。

マクロの記録を開始するには、qと入力してから、マクロを参照するための文字を入力します。

qa    # will save macro "a"

入力したコマンドはすべて、マクロの一部として記録されます。 マクロを終了するには、qをもう一度入力します。

したがって、次のように入力します。

qa0c3wDELETED<esc>q

これにより、マクロ(「a」として保存)が開始され、行の先頭に移動して、次の3つの単語が「DELETED」という単語に置き換えられます。 次に、挿入モードを終了し、マクロを終了します。

このマクロを再生するには、現在のカーソル位置から開始して、@文字の後にマクロ参照を使用します。

@a

これにより、現在の位置からマクロコマンドが再生されます。

挿入モードで終了するマクロを作成する場合は、別の方法でマクロを終了する必要があります(「q」と入力すると、aqが挿入されます)。 CTRL-Oを前に付けることで、挿入モードでノーマルモードコマンドを実行できます。

したがって、この行の最初の括弧の内容を変更する場合は、次のようなマクロを作成できます。

qi0f(lct)<CTRL-O>q

これにより、マクロ「i」が作成されます。 マクロは現在の行の先頭に移動します。 次に、開き括弧を見つけて、右に1文字移動します(括弧の内側に移動します)。 次に、閉じ括弧まですべてを変更します。 vimが挿入モードで置換テキストを待機している状態で、CTRL-Oを押してからqを押してマクロを終了し、挿入モードでテキストを置換できるようにします。

結論


これで、vimがあなたを助けることができるいくつかのより複雑な方法のアイデアを持っているはずです。 これは多くのように思えるかもしれませんが、表面を傷つけているだけです。

まだ触れていない機能がたくさんあり、すべてを知る必要はありません。 vimの使用方法に基づいて、何が重要かを学びます。 毎日練習して使うほど、自然に感じられ、パワフルになります。

ジャスティン・エリングウッド