Nvim の :help
ページは、生成されたもので、ソースを tree-sitter-vimdoc パーサーを使って生成しています。
<F1>
を除くファンクションキーはVimで定義された意味がないため、これらをマップするのに適しています。例:map <F2> GoDate: <Esc>:read !date<CR>kJこれは3つのモードがどのように使われるかを示しています。「G」で最後の行に移動した後、「o」コマンドは新しい行を開き、挿入モードを開始します。テキスト「Date: 」が挿入され、
<Esc>
で挿入モードを抜けます。<>
内の特殊キーの使用に注意してください。これはアングルブラケット表記と呼ばれます。キー自体を押すのではなく、別々の文字として入力します。これによりマッピングが読みやすくなり、問題なくテキストをコピー&ペーストできます。「:」文字でVimはコマンドラインに移動します。":read !date"コマンドは"date"コマンドの出力を読み取り、現在の行の下に追加します。":read"コマンドを実行するには<CR>
が必要です。この実行時点で、テキストは次のようになります。:imap <F2> <CR>Date: <Esc>:read !date<CR>kJこれはノーマルモードでの
<F2>
のマッピングによく似ていますが、開始が異なるだけです。ノーマルモードの<F2>
のマッピングはまだ存在します。したがって、各モードで同じキーを異なるようにマップできます。このマッピングは挿入モードで開始されますが、ノーマルモードで終了することに注意してください。挿入モードで続行する場合は、マッピングに「a」を追加します。<F7>
がCプログラムブロック(中括弧 {} で囲まれたテキスト)を削除するように、<F7>
を定義したいとします。同様に、y<F7>
はプログラムブロックを名前のないレジスタにヤンクします。したがって、必要なのは、<F7>
が現在のプログラムブロックを選択するように定義することです。これは、次のコマンドで実行できます:omap <F7> a{これにより、
<F7>
は、タイプしたように、オペレータ待ちモードで選択ブロック "a{" を実行します。キーボードでa {を入力するのが少し難しい場合に、このマッピングは役立ちます。<F2>
:s/^/> /<CR>:noh<CR>``<F2>
:.,$s/^/> /<CR>:noh<CR>``<xHome>
<Home>
<xEnd>
<End>
<Esc>
がカラーで表示されている場合、それはエスケープ文字を表します。他のテキストと同じ色の場合、それは5文字です。<F2>
のマッピングは次のように短縮できます。:map <F2> G<F3> :imap <F2> <Esc><F3> :map <F3> oDate: <Esc>:read !date<CR>kJノーマルモードでは、
<F2>
は最後の行に移動し、<F3>
が押されたかのように動作するようにマップされます。挿入モードでは、<F2>
は<Esc>
で挿入モードを停止し、<F3>
も使用します。次に、<F3>
は実際の作業を行うようにマップされます。:map Q gqただし、まれにExモードをどうしても使用する必要がある場合があります。「gQ」をQにマップして、Exモードに移動できるようにしましょう。
:map gQ Qここで何が起こるかというと、「gQ」と入力すると、「Q」にマップされます。ここまでは順調です。しかし、その後「Q」が「gq」にマップされるため、「gQ」を入力すると「gq」になり、Exモードにはまったく移動できません。キーが再度マップされないようにするには、":noremap"コマンドを使用します
:noremap gQ Qこれで、Vimは「Q」が適用されるマッピングについて検査されないことを認識します。すべてのモードに同様のコマンドがあります
vim *.txt
で編集します。現在、最初のファイルを編集しています。このマッピングを定義します。:map ,, :s/5.1/5.2/<CR>:wnext<CR>,,ここで「,,」を入力します。これによりマッピングがトリガーされます。最初の行の "5.1" を "5.2" に置き換えます。次に、":wnext" を実行してファイルを書き込み、次のファイルを編集します。マッピングは「,,」で終わります。これにより、同じマッピングが再度トリガーされ、置換などが実行されます。これは、エラーが発生するまで続きます。この場合、置換コマンドが "5.1" の一致を見つけられないファイルである可能性があります。次に、「5.1」を挿入する変更を行い、再度「,,」を入力して続行できます。または、リストの最後のファイルであるため、":wnext" が失敗します。マッピングが途中でエラーが発生すると、マッピングの残りの部分は破棄されます。
CTRL-C
はマッピングを中断します(MS-Windows では CTRL-Break
)。:map <C-A> /---><CR> :vunmap <C-A>5つの文字 "<C-A>" は、単一のキー
CTRL-A
を表すことに注意してください。<Bar>
(5文字)を使用します。例:map <F8> :write <Bar> !checkin %:S<CR>同じ問題が、末尾に空白があることに注意する必要があるという追加事項付きで、":unmap" コマンドにも適用されます。これら2つのコマンドは異なります
:unmap a | unmap b :unmap a| unmap b最初のコマンドは、末尾にスペースがある「a 」をマッピング解除しようとします。
<Space>
(7文字)を使用します。:map <Space> Wこれにより、スペースバーは空白で区切られた単語を前方に移動します。
|"
を使用できます。これにより、コメント付きの新しい空のコマンドが開始されます。例:map <Space> W| " Use spacebar to move forward a word
:imap aa foo :imap aaa barここで、「aa」と入力すると、Vimは最初のマッピングを適用するか2番目のマッピングを適用するかを認識しません。別の文字が入力されるのを待ちます。それが「a」の場合、2番目のマッピングが適用され、「bar」になります。たとえば、スペースの場合、最初のマッピングが適用され、「foo」になり、その後にスペースが挿入されます。
<script>
キーワードを使用して、マッピングをスクリプトローカルにすることができます。:map-<script>を参照してください。<buffer>
キーワードを使用して、マッピングを特定のバッファーローカルにすることができます。:map-<buffer>を参照してください。<unique>
キーワードを使用して、既存のマッピングが存在する場合、新しいマッピングの定義を失敗させることができます。それ以外の場合、新しいマッピングは古いマッピングを上書きするだけです。:map-<unique>を参照してください。<Nop>
(5文字)にマップします。これにより、<F7>
キーはまったく何も行いません:map <F7> <Nop>| map! <F7> <Nop>
<Nop>
の後にスペースは入れないでください。:command DeleteFirst 1deleteこれで、":DeleteFirst"コマンドを実行すると、Vimは":1delete"を実行し、最初の行を削除します。
:command組み込みコマンドと同様に、ユーザー定義コマンドも省略できます。コマンドを他のコマンドと区別するのに十分な文字数だけを入力する必要があります。コマンドライン補完を使用して、フルネームを取得できます。
:command -nargs=0 DeleteFirst 1deleteただし、引数がゼロの場合はデフォルトであるため、"-nargs=0"を追加する必要はありません。-nargsのその他の値は次のとおりです。
<args>
キーワードで表されます。例::command -nargs=+ Say :echo "<args>"次のように入力すると
:Say Hello WorldVimは「Hello World」と表示します。ただし、二重引用符を追加すると、機能しません。例:
:Say he said "hello"特殊文字を文字列に変換し、式として使用できるように適切にエスケープするには、"<q-args>"を使用します。
:command -nargs=+ Say :echo <q-args>これで、上記の":Say"コマンドは、次の実行になります。
:echo "he said \"hello\""
<f-args>
キーワードには、関数呼び出し引数として使用するのに適した形式を除いて、<args>
キーワードと同じ情報が含まれています。例::command -nargs=* DoIt :call AFunction(<f-args>) :DoIt a b c次のコマンドを実行します。
:call AFunction("a", "b", "c")
{count}
である単一の数値として使用されます。<line1>
と<line2>
は、範囲内の最初と最後の行の値を取得します。たとえば、次のコマンドは、指定された範囲をファイル "save_file" に書き出すSaveItコマンドを定義します。:command -range=% SaveIt :<line1>,<line2>write! save_file
{number}
であるカウントを取ることができます。結果のカウントは、<count>
キーワードを通じて使用できます。 -bang !を使用できます。存在する場合、<bang>
を使用すると、!になります。 -register レジスターを指定できます。(デフォルトは名前のないレジスターです。)レジスターの指定は、<reg>
(別名<register>
)として使用できます。 -complete={type} 使用されるコマンドライン補完のタイプ。可能な値のリストについては、":command-completion"を参照してください。 -bar コマンドの後に|と別のコマンド、または"とコメントを続けることができます。 -buffer コマンドは、現在のバッファでのみ使用できます。<lt>
キーワードがあります。これは文字<を表します。言及した<>項目の特別な意味をエスケープするために使用します。:command -nargs=+ Say :echo "<args>" :command! -nargs=+ Say :echo <q-args>ユーザーコマンドを削除するには、":delcommand"を使用します。これは、コマンドの名前である単一の引数を取ります。例:
:delcommand SaveItすべてのユーザーコマンドを削除するには
:comclear注意してください、これは元に戻すことはできません!
:function DateInsert() : $delete : read !date :endfunctionこの関数は、バッファがファイルに書き込まれる直前に毎回呼び出されるようにする必要があります。これにより、そのようになります。
:autocmd BufWritePre * call DateInsert()"BufWritePre"は、この自動コマンドがトリガーされるイベントです。バッファをファイルに書き込む直前(pre)。"*"は、ファイル名と一致するパターンです。この場合は、すべてのファイルと一致します。このコマンドを有効にすると、":write"を実行するときに、Vimは一致するBufWritePre自動コマンドがあるかどうかを確認して実行し、その後、":write"を実行します。 :autocmdコマンドの一般的な形式は次のとおりです。
:autocmd [group] {events} {file-pattern} [++nested] {command}[group]名はオプションです。コマンドの管理と呼び出しに使用されます(詳細については後述します)。
{events}
パラメーターは、コマンドをトリガーするイベントのリスト(コンマ区切り)です。 {file-pattern}
は、通常はワイルドカードを含むファイル名です。たとえば、"*.txt"を使用すると、名前が ".txt" で終わるすべてのファイルに自動コマンドが使用されます。オプションの[++nested]フラグは、自動コマンドのネストを許可し(下記参照)、最後に、{command}
は実行するコマンドです。:augroup updateDate : autocmd! : autocmd BufWritePre * call DateInsert() :augroup ENDこれにより、新しい自動コマンドを定義する前に、
:autocmd!
で以前に定義された自動コマンドがすべて削除されます。グループについては後で説明します。:autocmd BufReadPost *.gsm set filetype=asmVimがファイルの種類を検出できる場合、'filetype'オプションが設定されます。これにより、Filetypeイベントがトリガーされます。特定のタイプのファイルが編集されたときに何かを行うためにこれを使用します。たとえば、テキストファイルの略語のリストをロードするには
:autocmd Filetype text source ~/.config/nvim/abbrevs.vim新しいファイルの編集を開始するときに、Vimにスケルトンを挿入させることができます。
:autocmd BufNewFile *.[ch] 0read ~/skeletons/skel.cイベントの完全なリストについては、autocmd-eventsを参照してください。
{file-pattern}
引数は、実際にはファイルパターンのコンマ区切りリストにすることができます。例:*.c,*.h
は ".c" および ".h" で終わるファイルと一致します。通常のファイルワイルドカードを使用できます。最もよく使用されるものの概要を次に示します。{command}
を省略し、!を使用します。例::autocmd! FileWritePre *これにより、"FileWritePre"イベントの "*"パターンを使用するすべての自動コマンドが削除されます。
:autocmd特にファイルタイプの検出を使用すると、リストが非常に長くなる可能性があります。コマンドの一部のみを一覧表示するには、グループ、イベント、および/またはパターンを指定します。たとえば、すべてのBufNewFile自動コマンドを一覧表示するには
:autocmd BufNewFileパターン "*.c" のすべての自動コマンドを一覧表示するには
:autocmd * *.cイベントに "*" を使用すると、すべてのイベントが一覧表示されます。cprogramsグループのすべての自動コマンドを一覧表示するには
:autocmd cprograms
{group}
項目は、関連する自動コマンドをグループ化します。たとえば、これにより、特定のグループ内のすべての自動コマンドを削除できます。特定のグループに対して複数の自動コマンドを定義する場合は、":augroup"コマンドを使用します。たとえば、Cプログラムの自動コマンドを定義しましょう。:augroup cprograms : autocmd BufReadPost *.c,*.h :set sw=4 sts=4 : autocmd BufReadPost *.cpp :set sw=3 sts=3 :augroup ENDこれは次と同じです。
:autocmd cprograms BufReadPost *.c,*.h :set sw=4 sts=4 :autocmd cprograms BufReadPost *.cpp :set sw=3 sts=3"cprograms" グループ内のすべての自動コマンドを削除するには
:autocmd! cprograms
:autocmd FileChangedShell * ++nested edit
:autocmd BufReadPost *.new execute "doautocmd BufReadPost " . expand("<afile>:r")これは、新しいファイルが編集されたときにトリガーされる自動コマンドを定義します。ファイル名の末尾は ".new" でなければなりません。":execute"コマンドは、式評価を使用して新しいコマンドを作成し、実行します。ファイル "tryout.c.new" を編集すると、実行されるコマンドは次のようになります。
:doautocmd BufReadPost tryout.cexpand()関数は、自動コマンドが実行されたファイル名を表す "<afile>" 引数を受け取り、":r" でファイル名のルートを取得します。
:autocmd BufReadPost *.log normal Gこれは、
*.log
ファイルを編集開始したときに、カーソルをそのファイルの最終行にジャンプさせます。":normal"コマンドの使用は少しトリッキーです。まず、その引数がすべての引数を含む完全なコマンドであることを確認してください。"i"を使って挿入モードに入る場合は、挿入モードから抜けるために<Esc>
も必要です。 "/"を使って検索パターンを開始する場合は、それを実行するために<CR>
が必要です。":normal"コマンドは、それ以降のすべてのテキストをコマンドとして使用します。したがって、|やそれに続く別のコマンドは使用できません。この問題を回避するには、":normal"コマンドを":execute"コマンドの中に入れます。これにより、印刷できない文字も便利な方法で渡すことができます。例::autocmd BufReadPost *.chg execute "normal ONew entry:\<Esc>" | \ 1read !dateこれは、長いコマンドを複数行に分割するためにバックスラッシュを使用する方法も示しています。これは、Vimスクリプトで使用できます(コマンドラインでは使用できません)。
:set eventignore=WinEnter,WinLeaveすべてのイベントを無視するには、次のコマンドを使用します。
:set eventignore=all通常の動作に戻すには、'eventignore'を空にします。
:set eventignore=