Vim でキーをマップする方法

Vim Dekiwomappusuru Fang Fa



Vim では、キー マッピングは、特定のタスクを実行するために一連のキーまたはコマンドを特定のキーに割り当てるプロセスです。たとえば、ファイル内のすべての行を選択するには、 ggVG コマンドを実行するには 4 つのキーを押す必要があります。 1 回のキー入力だけで実行してみるのはどうでしょうか?ここで Vim のキー マッピングが役に立ちます。キー マッピングは、Vim で頻繁に実行される多くのタスクを自動化する方法です。そして、あなたも聞いたことがあるはずです。何かを 2 回以上行う場合は、自動化してください。

この包括的なガイドでは、操作を自動化するために Vim でキーをマップする方法を説明します。基本的なキー マップの作成から高度なキー マッピング、およびそれらを永続化および削除するプロセスまで。

構文

Vim でキーをマップするには、次の構文が使用されます。







<モード>マップ <引数>



上記の構文では次のようになります。



<モード>マップ nmap、imap、vmap、xmap、cmap、または omap
<引数>*

*上記の構文では、 セクションはオプションです。

Vim の特別な引数

Vim Special Arguments は、キーマップに追加機能を与えるために使用されるタグです。これらの引数は、:map コマンドの後、{rhs} と {lhs} の前に現れます。



たとえば、マップ バッファー固有のマップを作成するには、次の方法で特別な引数を使用します。

:地図 < バッファ > < C-a > ggVG
<サイレント> キーマップからエコーされたメッセージを抑制するには
<バッファ> マップをバッファー固有 (現在のバッファーに固有) にするには
<スクリプト> マップがスクリプトまたはプラグインの一部であることを示すため
<スペシャル> *<> 表記を使用したマッピング用の特殊キー (ファンクション キー、コントロール、シフト、その他の非アルファベット キー) を定義するために使用されます。
<式> これは、マッピングの左側が式であり、右側を取得するためにそれが評価されることを示します
<ユニーク> ローカル マップとグローバル マップ間でマップを一意にするため
<待ってません> マップ内の次のコマンド文字の待機をスキップするには

Vim の特別なキーの表記については、次の図で説明します。

たとえば、キー マッピングでスペース キーを使用する場合は、 表記が使用されます。

Vim での基本的なキーマップの作成

基本的な例で Vim のキー マッピングを理解しましょう。全行選択コマンド( ggVG ) に Ctrl+A キー。 Ctrl+A キーをマップするには、Vim で次のコマンドを実行します。

:地図 < C-a > ggVG

ここ、 を意味します Ctrl そして ある キーを押しながら、 ggVG ファイル内のすべての行を選択するコマンドです。の :地図 キーワードはデフォルトでは通常モードのマッピング用ですが、 :nmap に対して明示的に使用することもできます 普通 モード。

同様に、行番号をマップするには、 F1 キーの使用:

:地図 < F1 > :セット番号

ここで、F1 キーを押すと行番号が有効になり、もう一度押すと無効になります。

このメソッドは現在のバッファ内のキーのみをマップし、バッファを閉じるときに削除されることに注意してください。

キーマップのリスト

通常モード、ビジュアルモード、およびオペレーター保留モードのすべてのキーマッピングをリストするには、:map コマンドを使用します。

:地図

キーマッピングをリストするには 入れる そして コマンドライン モードの場合は、:map! を使用してください。指示。

:地図

特定のモードのキー マッピングを一覧表示するには、マップ キーワードの前にモードの頭文字を入力するだけです。

:nmap 通常モードの地図を表示するには
:imap 挿入モードのマップを表示するには
:vmap ビジュアルおよび選択モードのマップを表示するには
:スマップ セレクトモードのマップを表示するには
:xmap ビジュアルモードのマップを表示するには
:cmap コマンドラインモードのマップを表示するには
:オマップ オペレータ保留モードのマップを表示するには

さらに、プラグイン マップを含むすべてのマップをパスとともにリストするには、次を使用します。 :詳細マップ 指示。

:詳細マップ

特定のキーについては、コマンド内でキーを指定するだけです ( :verbose マップ <キー> )。

キーマップを永続化する

上のセクションで説明したキーマップは、現在のバッファ内のキーのみをマップします。 Vim キー マッピングを永続的にするには、マップを vimrc ファイルに配置する必要があります。

キーマップを vimrc ファイルの前にコロン (:) を追加しないでください。 地図 指示。

キーマップを配置した後、 vimrc ファイルを保存し、:wq コマンドまたは Shift+ZZ キーを使用して終了します。に配置されたキーマップは、 vimrc ファイルはグローバルになり、すべての Vim セッションで使用できます。ただし、現在のセッションの作業に影響を与える場合は、特定のキーマップを一時的に無効にすることができます。以下の「Vim でキーマップを削除する方法」セクションを参照してください。

vimrc は、さまざまなコマンドや設定が含まれる Vim の設定ファイルです。それは、 /usr/共有/vim/ macOS 上のディレクトリと /etc/vim Linux 上で。注意することが重要です。 vimrc 前述のディレクトリ内のファイルはシステム固有のファイルです。これらのファイルをキー マッピング用に編集することもできますが、ユーザー固有のファイルを作成することをお勧めします。 vimrc ホームディレクトリにあるファイル。

再帰の回避

次に進む前に、Vim キー マッピングの再帰について学ぶことが重要です。その欠点とそれを防ぐ方法。例を使用することで理解できます。

:地図 DD 3jdd

上の例では、 DD キーを押して 3 行下に移動し、カーソル下の行を削除します。さて、 を押すと、 DD 、マップを実行しようとします 3jdd 。 Vim が解釈します DD 次の図に示すように、コマンドをマップとして作成し、マップを繰り返し実行します。

注記 : 再帰により Vim エディタがフリーズする可能性があります。凍結を解除するには、 を押します。 Ctrl+C キー。

再帰を避けるために、 地図 キーワード付き ノーアマップ 、 どこ ' のれ ' 手段 非再帰的 。交換させていただきます 地図 キーワード付き ノーアマップ 上記のキーマップの再帰を修正します。

:ノアマップ DD 3jdd

使用をお勧めします ノーアマップ の代わりに 地図 再帰マッピングを誤って作成することを避けるため。

モード固有のキーマップの作成

Vim はキー マッピングを非常に多用途にできるため、特定のモードのキーマップさえ非常に簡単に作成できます。たとえば、挿入モードのキーマップを作成した場合、 F1 キーを押すと、同じものをマッピングできます F1 まったく新しい操作を行うには、別のモードで キーを押します。

次の例では、 F1 キーを押して 3 行を削除します 普通 モードで 3 行をヤンクします。 入れる モード。

:nmap < F1 > 3dd
:imap < F1 > < ち、ち >

最初のマップは通常モードで F1 キーを押すと 3 行を削除しますが、2 番目のマップは挿入モードで同じキーを押すと現在の行に 1 つのインデントを追加します。ここで、各モードのマッピングを理解しましょう。

通常モードのマッピング

通常モードでマップを適用するには、次のみを使用します。 nmap キーワード。たとえば、次を使用してファイル内のすべての行をコピーするには、 Ctrl+C キーを押した場合は、次のコマンドを使用します。

:nmap < C-c > ggVGy

前に説明したように、キーのマッピングには非再帰的な方法を使用することがベスト プラクティスです。そのため、 nmap ノアマップ キーワード。

:noremap < C-c > ggVGy

コロン (:) を付けずに配置します。 vimrc ファイルを使用して永続的なキーマップにします。

私が使用します ノーアマップ の代わりに 地図 次の例では。

挿入モードのマッピング

挿入モードのキーをマップするには、次のようにします。 の代わりに n 。たとえば、挿入モードでは、 Ctrl+P そして Ctrl+N キーは、それぞれ後方一致と前方一致に基づいて単語を自動補完するために使用されます。マッピングするには、 Ctrl+P Tab キーを押した場合は、次のコマンドを使用します。

:inoremap < タブ > < CP >

さらに重要なのは、地図を作成したい場合 オペレータ保留モード のコマンド 挿入モード 、その後、を挿入する必要があります これらのコマンドを実行するには、右側のキーを押して挿入モードを終了します。たとえば、次のキーマップでは、 Ctrl+X キーを押して、挿入モードに戻ります。

:inoremap < C-x > 3ddi

さて、 を押すと、 Ctrl+X キーを押すと、 3ddi コマンドを実行する代わりに。

それを修正するには、 の前に 3ddi 指示。

:inoremap < C-x > < ESC > 3ddi

これで、コマンドが実行され、挿入モードに維持されます。

多くのミニノートパソコンには、 ESC キーは、現在のモードを終了するために重要です。したがって、マッピングするには、 ESC キーを押して挿入モードを終了すると、キー マッピングを利用できます。次の例では、 キーを押して通常モードに戻ります。

:inoremap ex < ESC >

を素早く押すと、 キーを押すと挿入モードが終了し、通常モードに入ります。

ビジュアルモードのマッピング

ビジュアル モードは、Vim エディターでテキストを選択するための非常に重要なモードです。ビジュアル モードには、基本的な選択の他に、ビジュアル ライン、ビジュアル ブロック モードなどのさまざまなモードがあります。

ビジュアルモードでは、チルダ (~) ケースを切り替えるために使用されます。チルダ (~) を使用するには、2 つのキーを押す必要があります (シフト+~) 。次の例では、c キーをマッピングしています。 ビジュアルモード カーソルの下の単語を選択し、大文字と小文字を変更します。

:vnoremap c iw~

次の GIF に示すように、v を押してビジュアル モードに入り、c キーを押してカーソルの下の単語を切り替えます。

コマンドラインモードのマッピング

Vim に不可欠なコマンドの多くは、コマンドライン モードでのみ動作します。ファイルを保存するなど :で コマンドは同様に保存して終了するために使用されます。 :wq コマンドが使用されます。すべてのタブと分割操作もコマンドライン モードで実行されます。たとえば、新しいタブを作成するには、 :部下 コマンドが使用されます。さて、タブを簡単に作成するには、 Ctrl+T キーで十分です。

:cnoremap < ち、ち > 主題 < CR >

次に、コロン (:) を押してコマンドライン モードに入り、 Ctrl+T 新しいタブを開きます。全文を入力するよりもはるかに速いです 主題 コマンドと 戻る 鍵。

Vim カスタム コマンドの作成
コマンド モードに入ってマップを実行することはあまり有用ではないようです。ただし、Vim で独自のカスタム コマンドを作成するには、 :指示 オプション。この機能は Vim のキー マッピングによく似ています。たとえば、行番号とテキスト幅を 80 に設定するクイック コマンドを作成するには、次のコマンドを使用します。

:コマンド Mycmd :番号を設定 文字幅 = 80

次に、コマンドモードに入り、次のコマンドを実行します。 :Mycmd 指示。

オペレータ保留モードのマッピング

オペレーター保留モードは、オペレーター・キーが押された後、Vim がモーション・コマンドを待つモードです。一般的な演算子は y、d、c です。たとえば、現在の行とそれに続く 3 行を削除するには、d 演算子を次のように使用します。 3j モーション(d3j)。これらのキーを同時に押して、目的の操作を行うことはできません。

このモードは通常、モーションをマッピングするために使用されます。現在の行とそれに続く 3 行を選択するモーションをマップしてみましょう。

:onoremap < F2 > 3j

ここで、現在の行とそれに続く 3 行をヤンクするには、 ザF2 キーも同様に、 d 演算子も適用できます。

心に留めておくべきもう 1 つの重要な点は、上記のマップされたモーションにカウントを追加するとします。 2 の場合、マップでは 6j ではなく 23j として認識されます。これを修正するには、式 register '= を使用できます。上記のマップは次のように変更できます @='3j'

:onoremap < F2 > @ ='3j' < CR >

マウスイベントをマッピングする方法

Vim は完全にカスタマイズ可能なキーボード中心のテキスト エディターですが、マウス機能が利用できることでさらに優れたものになります。通常のキーボード キーとは別に、すべてのマウス イベントも Vim にマッピングできます。たとえば、右ダブルクリックと左ダブルクリックをそれぞれ前後にマークをジャンプするようにマッピングする場合は、次のマッピングを使用します。

:ノアマップ < 2 -右マウス > `
:ノアマップ < 2 -マウスの左 > [ `

マッピングできるその他のマウス イベントを次の表に示します。

<左マウス> <左リリース> <左ドラッグ> <2-左マウス>
<右マウス> <右リリース> <右ドラッグ> <2-右マウス>
<ミドルマウス> <ミドルリリース> <中ドラッグ> <3-左マウス>
<3-右マウス>
<4-左マウス>
<4-右マウス>

Vim でリーダー キーを使用してマッピングする方法

Vim マッピングはリーダー キーがないと不完全です。リーダー キーは、他のタスクを実行するためにキーがマップされている場合でも、キーのマップに使用できるデフォルト キーです。たとえば、 d キーを押してすべての行を削除すると、リーダー キーを使用して同じキーをマップして 5 行だけを削除できます。

なじみのない人のために、Vim リーダー キーを使用します。これは、コマンドまたは操作をマッピングするために、別のキーまたはキーのセットが接頭辞として付けられたキーです。 Vim のデフォルトのリーダー キーはバックスラッシュ (\) ですが、カスタマイズ可能です。

たとえば、 DD コマンドはカーソル下の行を削除するために使用されます。マッピングしたい場合は、 DD コマンドを使用してファイル内のすべての行を削除すると、リーダー キーを使用できるようになります。

:ノアマップ < リーダー > DD ggVGd

これで、 を押すたびに、 \dd キーを押すと、ファイル内のすべての行が削除されます。 Vim リーダー キーを Windows のコントロール キーまたは macOS のコマンド キーとして割り当てることができます。

Vimscript 関数をマップする方法

Vim エディターはコマンドや操作に限定されません。 Vim には、Vimscript と呼ばれるカスタム機能を作成するためのプログラミング言語全体が存在します。スクリプトまたは関数を簡単に作成してキーにマッピングできます。たとえば、行番号、マウス機能、テキスト幅などの設定を有効にする関数を作成してみましょう。

関数 私の設定 ( )
セット 番号
セット ねずみ =a
セット 文字幅 = 80
エンドファンクション

この関数を vimrc ファイルに配置します。

この機能をリーダーと s キーにマッピングしましょう。私が使用します

:ノアマップ < リーダー > s :MySettings を呼び出す ( ) < CR >

これで、 を押すたびに、 \s キーを押すと、関数が呼び出され、関数内のすべての機能が実行されます。

注記 : Vim でカスタム関数を作成するときは、関数名の最初の文字を常に大文字にする必要があります。

Vim で外部コマンドをマップする方法

外部コマンドは Vim にマッピングすることもできます。外部コマンドとは、Linux または Unix コマンドを指します。たとえば、外部をマップする場合は、 選別 現在のバッファ内のすべての行を次のようにソートするコマンド F1 キーを押すには、次のコマンドを使用します。

:ノアマップ < F1 > : %! 選別 < CR >

同様に、スクリプト ファイルを作成し、Vim セッションを終了せずにそれを実行可能にしている場合は、 chmod 内部的にコマンドを実行します。たとえば、現在のファイルを実行可能にするには、次のコマンドを実行します。 :!chmod +x % ヴィムで。このタスクを頻繁に実行する場合は、キーをそれにマップするだけです。

:ノアマップ < F1 > : chmod +x %

Vim では、任意の外部コマンドを感嘆符 (!) 記号とともに使用できます。

Vim でキーマップを削除する方法

Vim でキーマップを削除するには、まずキーマップが定義されている場所を特定します。前に説明したように、キーマップはバッファローカルで永続的なものにすることができます。キーマップが永続的で vimrc ファイルに配置されている場合は、キーマップをファイルから削除するだけでキーのマップが解除されます。

マッピングが現在のバッファ内で行われている場合は、次のコマンドを使用して削除できます。 :マップ解除 または :マップを解除してください! コマンド。

  • :マップ解除 通常、ビジュアル、選択、またはオペレータ保留モードのキーマップをクリアします
  • :マップを解除してください! 挿入モードとコマンドライン モードのキーマップをクリアするには

たとえば、 キーを使用するには、 :アンマップ 。さらに、キーの削除はモード固有である可能性があります。ノーマルモードマップを削除したい場合は、 :nunmap <キー> 。キーマップを削除するその他のモード固有のコマンドについては、以下で説明します。

:nunmap のマップを削除するには、 普通 モード
:iunmap のマップを削除するには、 入れる モード
:vunmap のマップを削除するには、 ビジュアル そして 選択する モード
:サンマップ のマップを削除するには、 選択する モード
:xunmap のマップを削除するには、 ビジュアル モード
:カンマップ のマップを削除するには、 コマンドライン モード
:ounmap のマップを削除するには、 オペレータ保留中 モード

現在のバッファ内のすべてのマップを削除するには、 :マップクリア 指示。

:マップクリア

上記のコマンドは、ノーマル、ビジュアル、選択、またはオペレーター保留モードのすべてのキーマップをクリアします。

挿入モードとコマンド ライン モードのすべてのキーマップをクリアするには、次のコマンドを使用します。

:マップクリア

デフォルトの Vim コマンドはクリアできないことに注意してください。ただし、これは次のコマンドを使用して無効にすることができます。 :マップ解除 とのコマンド <いいえ> 。たとえば、カーソル下の行を削除する dd 機能を無効にしたい場合は、次を使用します。 :unmap dd <いいえ>。

:マップ解除 DD < いや >

dd は現在のバッファーでは機能しなくなります。この方法を使用すると、現在のセッションに対してキーマップを無効にすることができます。

Vim キー マッピングのチートシート

次の画像は、参照用にすべてのコマンドとその特定のモードのリストを示しています。

結論

Vim キー マッピングは、タスク、頻繁に使用されるキー バインド、コマンド、その他の操作を自動化する便利な方法です。これは多岐にわたるトピックであり、このガイドでは、Vim のキー マッピングに関連する主要な側面をすべてカバーしました。一般的な構文から基本的なキーマップの作成、そして高度な Vimscript 関数と外部コマンドのマッピングに至るまで。 Vim キー マッピングの詳細については、 :ヘルプキーマッピング Vim のコマンド。