Nvim の:help ページ。 生成されたもので、ソース を tree-sitter-vimdoc パーサーを使用して生成されています。
:map <F2> a<C-R>=strftime("%c")<CR><Esc>これは、カーソルの後に現在の年月日と時刻を(<>表記 <> で)追加します。{lhs} {rhs} mapmode-nvo :map{lhs} {rhs} mapmode-n :nm :nmap :vm[ap] {lhs} {rhs} mapmode-v :vm :vmap :xm[ap] {lhs} {rhs} mapmode-x :xm :xmap :smap {lhs} {rhs} mapmode-s :smap{lhs} {rhs} mapmode-o :om :omap :map! {lhs} {rhs} mapmode-ic :map!{lhs} {rhs} mapmode-i :im :imap :lm[ap] {lhs} {rhs} mapmode-l :lm :lma :lmap :cm[ap] {lhs} {rhs} mapmode-c :cm :cmap :tma[p] {lhs} {rhs} mapmode-t :tma :tmap mapコマンドが適用されるモードに対して、キーシーケンス{lhs}を{rhs}にマップします。{rhs}を含む結果は、その後、マッピングに対してさらにスキャンされます。これにより、マッピングのネストと再帰的な使用が可能になります。 **注:** スペースは有効なノーマルモードコマンドであるため、末尾のスペースは{rhs}に含まれます。map-trailing-whiteを参照してください。{lhs} {rhs} mapmode-nvo :no :noremap :nor :nn[oremap] {lhs} {rhs} mapmode-n :nn :nnoremap :vn[oremap] {lhs} {rhs} mapmode-v :vn :vnoremap :xn[oremap] {lhs} {rhs} mapmode-x :xn :xnoremap :snor[emap] {lhs} {rhs} mapmode-s :snor :snore :snoremap :ono[remap] {lhs} {rhs} mapmode-o :ono :onoremap :no[remap]! {lhs} {rhs} mapmode-ic :no! :noremap! :ino[remap] {lhs} {rhs} mapmode-i :ino :inor :inoremap :ln[oremap] {lhs} {rhs} mapmode-l :ln :lnoremap :cno[remap] {lhs} {rhs} mapmode-c :cno :cnor :cnoremap :tno[remap] {lhs} {rhs} mapmode-t :tno :tnoremap mapコマンドが適用されるモードに対して、キーシーケンス{lhs}を{rhs}にマップします。ネストされたマッピングと再帰的なマッピングを回避するために、{rhs}のマッピングを許可しません。コマンドを再定義するために頻繁に使用されます。**注:** i_CTRL-]とc_CTRL-]を除き、{rhs}内のキーは省略形をトリガーしません。**注:** {rhs}に<Plug>が出現する場合、リマッピングが許可されていなくても、この部分は常に適用されます。{lhs} mapmode-nvo :unm :unmap :nun[map] {lhs} mapmode-n :nun :nunmap :vu[nmap] {lhs} mapmode-v :vu :vunmap :xu[nmap] {lhs} mapmode-x :xu :xunmap :sunm[ap] {lhs} mapmode-s :sunm :sunmap :ou[nmap] {lhs} mapmode-o :ou :ounmap :unm[ap]! {lhs} mapmode-ic :unm! :unmap! :iu[nmap] {lhs} mapmode-i :iu :iunmap :lu[nmap] {lhs} mapmode-l :lu :lunmap :cu[nmap] {lhs} mapmode-c :cu :cun :cunmap :tunma[p] {lhs} mapmode-t :tunma :tunmap mapコマンドが適用されるモードに対して、{lhs}のマッピングを削除します。マッピングは、適用される他のモードでは定義されたままになる可能性があります。{lhs}がマッピングの{rhs}と一致する場合にも機能します。これは、省略形が適用された場合のためです。**注:** 末尾のスペースは{lhs}に含まれます。map-trailing-whiteを参照してください。<buffer>引数を使用します :map-<buffer> **警告:** これにより、default-mappingsも削除されます。{lhs} mapmode-nvo :map_l{lhs} mapmode-n :nmap_l{lhs} mapmode-v :vmap_l{lhs} mapmode-x :xmap_l{lhs} mapmode-s :smap_l{lhs} mapmode-o :omap_l{lhs} mapmode-ic :map_l!{lhs} mapmode-i :imap_l{lhs} mapmode-l :lmap_l{lhs} mapmode-c :cmap_l{lhs} mapmode-t :tmap_l{lhs}で始まるキーシーケンスに対する、mapコマンドが適用されるモードでのキーマッピングを一覧表示します。:imap aa foo :imap aaa barVimが "aa" を読み込んだ場合、"aa" または "aaa" をマッピングする必要があるかどうかを判断するために、別の文字を取得する必要があります。これは、"aa" を入力した後、そのマッピングはまだ展開されず、Vimが別の文字を待っていることを意味します。スペースを入力すると、"foo" とスペースが挿入されます。"a"を入力すると、"bar"が挿入されます。
:map @@ foo :unmap @@ | printコマンドセパレータ「|」の前にある空白文字を含む「@@ 」のアンマッピングを試みるためです。末尾に空白文字がある他の例:
unmap @@ unmap @@ " commentエラーが発生しますが、
unmap @@の末尾の空白文字は見えないため、非常に識別が困難です。unmap @@| " comment
:map <buffer> ,w /[.,;]<CR>その後、別のバッファで ",w" を別のものに変換することができます。
:map <buffer> ,w /[#&!]<CR>ローカルバッファマッピングはグローバルマッピングの前に使用されます。より長いグローバルマッピングが存在する場合に短いローカルマッピングを有効にしないようにするには、下記の
<nowait>を参照してください。 "<buffer>"引数は、マッピングをクリアするためにも使用できます。:unmap <buffer> ,w :mapclear <buffer>ローカルマッピングは、バッファが削除されたときにはクリアされますが、アンロードされたときにはクリアされません。ローカルオプション値と同様です。map-precedenceも参照してください。
<nowait>引数を追加します。すると、マッピングが一致したときにマッピングが使用され、Vimはさらに文字が入力されるのを待ちません。ただし、文字が既にタイプされている場合は、それらが使用されます。これは、<nowait>マッピングが完全に一致し、部分一致の前に見つかった場合に機能します。これは以下の場合に機能します。:map <silent> ,h /Header<CR>このマッピングを使用すると、検索文字列はエコーされません。ただし、実行されたコマンドからのメッセージは引き続き表示されます。それらも無効にするには、実行されたコマンドに ":silent" を追加します。
:map <silent> ,h :exe ":silent normal /Header\r"<CR>コマンドの効果も無効になる場合があります。たとえば、マッピングがコマンドライン補完の別のエントリを選択する場合、表示されません。プロンプトは引き続き表示されます(たとえば、inputdialog()の場合)。省略形に"<silent>"を使用することは可能ですが、コマンドラインの再描画が失敗します。
{rhs}内の文字を、"<SID>"で始まるスクリプトにローカルに定義されたマッピングのみを使用して再マッピングします。これは、スクリプト外のマッピング(たとえば、mswin.vimでCTRL-Vが再マッピングされている場合)が干渉するのを防ぐために使用できますが、スクリプトで定義された他のマッピングは使用します。注記: ":map <script>"と":noremap <script>"は同じです。"<script>"はコマンド名を無効にします。再マッピングが(主に)無効になっていることが明確なため、":noremap <script>"の方が好ましいです。:map <unique> ,w /[#&!]<CR>ローカルマッピングを定義する場合、グローバルマップに既に存在する等しいものが存在するかどうかについてもチェックされます。失敗する例:
:map ,w /[#&!]<CR> :map <buffer> <unique> ,w /[.,;]<CR>キーをマッピングして、元のマッピングを実行する場合は、maparg()を参照してください。
{rhs}が取得されます。例::inoremap <expr> . <SID>InsertDot()s:InsertDot()関数の結果が挿入されます。カーソル前のテキストをチェックし、条件を満たしたときにオムニ補完を開始できます。グローバル名前空間を汚染しないように、スクリプトローカル関数の使用が推奨されます。マッピングが定義されたスクリプトを見つけるために、RHSに
<SID>を使用してください。{lhs}の展開方法を決定できます。v:charを挿入または変更しないでください。func StoreColumn()
let g:column = col('.')
return 'x'
endfunc
nnoremap <expr> x StoreColumn()
nmap ! f!x"f!"の実行前に"x"が評価されるため、"g:column"には"f!"を実行する前の値が表示されます。これは、式でマッピングされた文字の前に<Ignore>を挿入することで解決できます。nmap ! f!<Ignore>x副作用に非常に注意してください!式は文字を取得している間に評価されるため、コマンドが機能しなくなる可能性があります。そのため、
<expr>マッピングでは、以下がブロックされます。inoremap <expr> <C-L> nr2char(getchar()) inoremap <expr> <C-L>x "foo"ここで
CTRL-Lを入力しても、まだ何も起こりません。Vimはどのマッピングを使用するかを決定するために次の文字を必要とします。「x」を入力すると、2番目のマッピングが使用され、「foo」が挿入されます。他のキーを入力すると、最初のマッピングが使用され、getchar()が入力されたキーを取得して返します。let counter = 0 inoremap <expr> <C-L> ListItem() inoremap <expr> <C-R> ListReset() func ListItem() let g:counter += 1 return g:counter .. '. ' endfunc func ListReset() let g:counter = 0 return '' endfuncCTRL-Lは次の番号を挿入し、
CTRL-Rはカウントをリセットします。CTRL-Rは空の文字列を返すため、何も挿入されません。<Cmd>擬似キーは、「コマンドマッピング」を開始し、モードを変更せずにコマンドを直接実行します。マッピングの{rhs}で":...<CR>"を使用する可能性のある場所で、代わりに"<Cmd>...<CR>"を使用できます。例:noremap x <Cmd>echo mode(1)<CR>
:<C-U>、またはInsertモードでの<C-O>:よりも柔軟性があります。コマンドは常にNormalモードになるのではなく、現在のモードで直接実行されるためです。Visualモードは保持されるため、gvを使ったトリックは必要ありません。コマンドはコマンドラインモードで直接呼び出すことができます(それ以外の場合はタイマーハックが必要です)。Insertモードの途中で<Cmd>を使用する例:nnoremap <F3> aText <Cmd>echo mode(1)<CR> Added<Esc>
<expr>マッピングとは異なり、<Cmd>コマンドには特別な制限はありません。まるで(無制限の)autocommandが呼び出されたか、非同期イベントが処理されたかのように実行されます。<silent>は必要ありません。{rhs}は、マッピングが再帰的であっても、省略形や他のマッピングの対象になりません。line('v')とcol('v')を使用できます。カーソルは他端にあります。<Cmd>コマンドは終了する必要があります。つまり、マッピング定義の{rhs}では<CR>が続く必要があります。Command-lineモードは入力されません。{rhs}にリテラル<CR>を使用するには、<lt>を使用します。:omap { w"y{" を "yw" のように、"d{" を "dw" のように機能させます。onoremap <silent> F :<C-U>normal! 0f(hviw<CR>
CTRL-U (<C-U>) は、Vim が挿入する可能性のある範囲を削除するために使用されます。ノーマルモードのコマンドは最初の「(」文字を探し、その前の最初の単語を選択します。通常は関数名です。:map xx something-difficult :ounmap xx同様に、ビジュアルモードとオペレータ保留モード、またはノーマルモードとオペレータ保留モードのマッピング。
CTRL-^ コマンドi_CTRL-^ c_CTRL-^でマッピングを無効にできます。これらのコマンドは、'iminsert' オプションの値を変更します。通常の command line(検索パターンではない)の入力を開始すると、CTRL-^ が入力されるまでマッピングは無効になります。最後に使用された状態は、挿入モードと検索パターンのそれぞれについて記憶されます。挿入モードの状態は、"f" や "t" のようなコマンドの引数として文字を入力する場合にも使用されます。言語マッピングは、既にマッピングされている文字には適用されません。入力された文字にのみ使用されます。これは、マッピングを入力する時点で言語マッピングが既に完了していたことを前提としています。同様に、マクロを適用するのではなく、マクロを記録する際に言語マッピングが適用されます。<Space> ノーマル、ビジュアル、セレクト、オペレータ保留 n ノーマル v ビジュアルとセレクト s セレクト x ビジュアル o オペレータ保留 ! 挿入とコマンドライン i 挿入 l ":lmap" マッピング(挿入、コマンドライン、Lang-Arg 用) c コマンドライン t ターミナルジョブ{rhs} の直前に、特別な文字が表示される場合があります。* は再マッピングできないことを示し、& はスクリプトローカルのマッピングのみが再マッピング可能であることを示し、@ はバッファローカルのマッピングを示します。{lhs} の後の最初の空白以外の文字から行末(または '|')までは、{rhs} の一部と見なされます。これにより、{rhs} をスペースで終わらせることができます。{lhs} と {rhs} に対して照合されます。nvim_set_keymap() または nvim_buf_set_keymap() を使用して説明を追加した場合、パターンは説明にも照合されます。:verbose map <C-W>*
n <C-W>* * <C-W><C-S>*
Last set from ~/.config/nvim/init.vim詳細は :verbose-cmd を参照してください。CTRL-K を入力してからファンクションキーを押すか、「<F2>」、「<F10>」、「<Up>」、「<S-Down>」、「<S-F7>」などの形式を使用します(キーの表を参照key-notation、<Up> 以降のすべてのキーを使用できます)。CTRL-V のみであることに注意してください。'cpoptions' に 'B' が含まれていない場合、バックスラッシュもCTRL-V のように使用できます。その場合、<>表記を完全に使用できます<>。しかし、「<C-V>」をCTRL-V のように使用して、その後に続くものの特別な意味をエスケープすることはできません。{rhs} にバックスラッシュをそのまま使用するには、特殊シーケンス「<Bslash>」を使用できます。これにより、ネストされたマッピングを使用する場合にバックスラッシュを二重にする必要がなくなります。{lhs} にCTRL-C を使用することは可能ですが、Vim がキーを待機している場合にのみ機能し、Vim が何かでビジー状態の場合は機能しません。Vim がビジー状態の場合、CTRL-C はコマンドを中断/キャンセルします。MS-Windows の GUI バージョンを使用する場合、CTRL-C をマップして、クリップボードにコピーコマンドを許可することができます。Vim を中断するにはCTRL-Break を使用します。:map <F8> <Nop> :map! <F8> <Nop>
:set encoding=latin1 :imap <M-C> foo :set encoding=utf-8`<M-C>` のマッピングは latin1 エンコーディングで定義されており、0xc3 バイトになります。UTF-8 エンコーディングで á (0xe1 `<M-a>`) という文字を入力すると、これは 0xc3 0xa1 の2バイトになります。0xc3 バイトをマッピングしたくない場合、á文字を入力できなくなるためです。
map <Leader>A oanother line<Esc>以下のようになります
map \A oanother line<Esc>しかし、その後
let mapleader = ","以下のようになります
map ,A oanother line<Esc>"g:mapleader" の値は、マッピングが定義された時点で使用されます。"g:mapleader" をその後変更しても、既に定義されているマッピングには影響しません。
:map <buffer> <LocalLeader>A oanother line<Esc>
:map _ls :!ls -l %:S<CR>:echo "the end"<CR>挿入モードまたはコマンドラインモードで入力する文字のマッピングを回避するには、最初に `CTRL-V` を入力します。map-error
:map <F3> o#include :map <M-g> /foo<CR>cwbar<Esc> :map _x d/END/e<CR> :map! qq quadrillion questionsカウントの乗算
:map <F4> 3w2<F4>と入力すると、「23w」になります。したがって、2 * 3単語ではなく23単語移動します。カウントを乗算する場合は、式レジスタを使用します。
:map <F4> @='3w'<CR>引用符内の部分は、実行される式です。@=
:map <buffer> <nowait> \a :echo "Local \a"<CR> :map \abc :echo "Global \abc"<CR>\a と入力すると、バッファローカルマッピングがすぐに使用されます。Vim は、ユーザーが \abc と入力する可能性があるかどうかを確認するために、さらに文字を待ちません。
:set <F1>=<type CTRL-V><type F1>
:map <F1><Esc>OP :echo "yes"<CR>実際の `<Esc>` を入力しないでください。Vim はキーコードを認識し、`<F1>` に置き換えます。
:map ab abcd"a" コマンドを実行し、テキストに "bcd" を挿入します。`{rhs}` の "ab" は再度マッピングされません。
:noremap k j :noremap j kこれにより、カーソルの上下コマンドが交換されます。
:map x y :map y xVimはxをyに、次にyをxなどに置き換えます。これが'maxmapdepth'回(デフォルトは1000回)行われると、Vimは「再帰的マッピング」というエラーメッセージを表示します。
:imap <T-b> terrible1.12 SUPERキーまたはCOMMANDキーのマッピング :map-super-keys :map-cmd-key
:imap <D-b> barritone
nnoremap <expr> <F4> CountSpaces()
xnoremap <expr> <F4> CountSpaces()
" doubling <F4> works on a line
nnoremap <expr> <F4><F4> CountSpaces() .. '_'
function CountSpaces(context = {}, type = '') abort
if a:type == ''
let context = #{
\ dot_command: v:false,
\ extend_block: '',
\ virtualedit: [&l:virtualedit, &g:virtualedit],
\ }
let &operatorfunc = function('CountSpaces', [context])
set virtualedit=block
return 'g@'
endif
let save = #{
\ clipboard: &clipboard,
\ selection: &selection,
\ virtualedit: [&l:virtualedit, &g:virtualedit],
\ register: getreginfo('"'),
\ visual_marks: [getpos("'<"), getpos("'>")],
\ }
try
set clipboard= selection=inclusive virtualedit=
let commands = #{
\ line: "'[V']",
\ char: "`[v`]",
\ block: "`[\<C-V>`]",
\ }[a:type]
let [_, _, col, off] = getpos("']")
if off != 0
let vcol = getline("'[")->strpart(0, col + off)->strdisplaywidth()
if vcol >= [line("'["), '$']->virtcol() - 1
let a:context.extend_block = '$'
else
let a:context.extend_block = vcol .. '|'
endif
endif
if a:context.extend_block != ''
let commands ..= 'oO' .. a:context.extend_block
endif
let commands ..= 'y'
execute 'silent noautocmd keepjumps normal! ' .. commands
echomsg getreg('"')->count(' ')
finally
call setreg('"', save.register)
call setpos("'<", save.visual_marks[0])
call setpos("'>", save.visual_marks[1])
let &clipboard = save.clipboard
let &selection = save.selection
let [&l:virtualedit, &g:virtualedit] = get(a:context.dot_command ? save : a:context, 'virtualedit')
let a:context.dot_command = v:true
endtry
endfunction`<expr>`マッピングは、任意の接頭辞付きの数とレジスタを取得できるようにするために使用されます。これにより、コマンドラインを使用する必要がなくなり、CmdlineEnterとCmdlineLeaveのautocommandがトリガーされるのを回避できます。nnoremap <F4> <Cmd>let &opfunc='{t ->
\ getline(".")
\ ->split("\\zs")
\ ->insert("\"", col("'']"))
\ ->insert("\"", col("''[") - 1)
\ ->join("")
\ ->setline(".")}'<CR>g@
:ab hh hello
:ab foo four old otters
:ab #i #include
:ab ;; <endofline>
:iab if if ()<Left>さらに複雑なこともできます。たとえば、略語の後にタイプされたスペースを消費するには
func Eatchar(pat)
let c = nr2char(getchar(0))
return (c =~ a:pat) ? '' : c
endfunc
iabbr <silent> if if ()<Left><C-R>=Eatchar('\s')<CR>デフォルトの略語はありません。:abb <buffer> FF for (i = 0; i < ; ++i)
:verbose abbreviate
! teh the
Last set from /home/abcd/vim/abbr.vim詳細は :verbose-cmd を参照してください。<expr>] [<buffer>] [lhs] [rhs] ":ab" と同じですが、挿入モード専用で、この{rhs}のマッピングは行われません。<Esc>文字を入力するために "esc" を略語にしたいとします。Vimで":ab"コマンドを入力する際には、次のように入力する必要があります(ここで^VはCTRL-V、^[は<Esc>です)。<SNR>に置き換え、その後ろにスクリプトの一意の番号とアンダースコアを付けます。例:map <SID>Addは、"<SNR>23_Add"というマッピングを定義します。
<SID>が正しく展開できないコンテキストで値が使用される場合は、expand()関数を使用します。let &includexpr = expand('<SID>') .. 'My_includeexpr()'それ以外の場合、スクリプトコンテキストの外で"<SID>"を使用するとエラーになります。func s:ScriptNumber()
return matchstr(expand('<SID>'), '<SNR>\zs\d\+\ze_')
endfunc関数をリスト表示したり、マッピングを表示したりする際、"<SNR>"が表示されます。これは、それらが何に定義されているかを調べるのに役立ちます。<SNR>番号がいくつであるかを確認できます。:command Rename ... :command Renumber ... :Rena " Means "Rename" :Renu " Means "Renumber" :Ren " Error - ambiguous :command Paste ...スクリプトでは、ユーザー定義コマンドの完全な名前を使用することをお勧めします。
filter Pyth command:com[mand]
{cmd} {cmd}で始まるユーザー定義コマンドをリストします。<line1>, <line2>){attr}...] {cmd} {repl} ユーザーコマンドを定義します。コマンドの名前は{cmd}で、置換テキストは{repl}です。コマンドの属性(下記参照)は{attr}です。コマンドが既に存在する場合はエラーが報告されます。ただし、!を指定した場合は、コマンドが再定義されます。ただし、例外があります。スクリプトを再度ソースする際、そのスクリプトで以前に定義されていたコマンドは、黙って置き換えられます。:let s:error = "None" :command -nargs=1 Error echoerr <args>
:source script1.vim :let s:error = "Wrong!" :Error s:errorscript2.vim を実行すると、「None」が出力されます。意図した結果ではありません!関数呼び出しが代替手段となる場合があります。
:function {func}(ArgLead, CmdLine, CursorPos)関数はこれらの引数をすべて使用する必要はありません。関数は、戻り値として補完候補を提供する必要があります。:com -complete=custom,ListUsers -nargs=1 Finger !finger <args>
:fun ListUsers(A,L,P)
: return system("cut -d: -f1 /etc/passwd")
:endfun次の例は、'path' オプションで指定されたディレクトリからファイル名を補完します。:com -nargs=1 -bang -complete=customlist,EditFileComplete
\ EditFile edit<bang> <args>
:fun EditFileComplete(A,L,P)
: return split(globpath(&path, a:A), "\n")
:endfunfunction cmdpreview(opts, ns, buf)
-- If invoked as a preview callback, performs 'inccommand' preview by
-- highlighting trailing whitespace in the current buffer.
local function trim_space_preview(opts, preview_ns, preview_buf)
vim.cmd('hi clear Whitespace')
local line1 = opts.line1
local line2 = opts.line2
local buf = vim.api.nvim_get_current_buf()
local lines = vim.api.nvim_buf_get_lines(buf, line1 - 1, line2, false)
local preview_buf_line = 0
for i, line in ipairs(lines) do
local start_idx, end_idx = string.find(line, '%s+$')
if start_idx then
-- Highlight the match
vim.api.nvim_buf_add_highlight(
buf,
preview_ns,
'Substitute',
line1 + i - 2,
start_idx - 1,
end_idx
)
-- Add lines and set highlights in the preview buffer
-- if inccommand=split
if preview_buf then
local prefix = string.format('|%d| ', line1 + i - 1)
vim.api.nvim_buf_set_lines(
preview_buf,
preview_buf_line,
preview_buf_line,
false,
{ prefix .. line }
)
vim.api.nvim_buf_add_highlight(
preview_buf,
preview_ns,
'Substitute',
preview_buf_line,
#prefix + start_idx - 1,
#prefix + end_idx
)
preview_buf_line = preview_buf_line + 1
end
end
end
-- Return the value of the preview type
return 2
end
-- Trims all trailing whitespace in the current buffer.
local function trim_space(opts)
local line1 = opts.line1
local line2 = opts.line2
local buf = vim.api.nvim_get_current_buf()
local lines = vim.api.nvim_buf_get_lines(buf, line1 - 1, line2, false)
local new_lines = {}
for i, line in ipairs(lines) do
new_lines[i] = string.gsub(line, '%s+$', '')
end
vim.api.nvim_buf_set_lines(buf, line1 - 1, line2, false, new_lines)
end
-- Create the user command
vim.api.nvim_create_user_command(
'TrimTrailingWhitespace',
trim_space,
{ nargs = '?', range = '%', addr = 'lines', preview = trim_space_preview }
)<line1> コマンド範囲の開始行。<line2><line2> コマンド範囲の最終行。<range><range> コマンド範囲内の項目の数:0、1、または 2 <count><count> 提供された任意の個数('-range' と '-count' 属性について説明されているとおり)。<bang><bang> ('-bang' 属性を参照)コマンドが ! 修飾子付きで実行された場合は ! に展開され、それ以外の場合は何も展開されません。<mods> <q-mods> :command-modifiers <mods> コマンド修飾子が指定されている場合、その修飾子を展開します。指定されていない場合は、何も展開しません。サポートされている修飾子は :aboveleft、:belowright、:botright、:browse、:confirm、:hide、:horizontal、:keepalt、:keepjumps、:keepmarks、:keeppatterns、:leftabove、:lockmarks、:noautocmd、:noswapfile、:rightbelow、:sandbox、:silent、:tab、:topleft、:unsilent、:verbose、および :vertical です。:filter はサポートされていないことに注意してください。例command! -nargs=+ -complete=file MyEdit
\ for f in expand(<q-args>, 0, 1) |
\ exe '<mods> split ' .. f |
\ endfor
function! SpecialEdit(files, mods)
for f in expand(a:files, 0, 1)
exe a:mods .. ' split ' .. f
endfor
endfunction
command! -nargs=+ -complete=file Sedit
\ call SpecialEdit(<q-args>, <q-mods>)<reg> ('-register' 属性を参照)指定されている場合はオプションのレジスタを、指定されていない場合は何も展開しません。<register> はこれの同義語です。<args><args> コマンド引数を、提供されたとおりにそのまま展開します(ただし、上記のように、カウントやレジスタによっては引数の一部が消費される場合があり、その場合は<args>の一部にはなりません)。<lt> 単一の '<'(小なり)文字。これらのエスケープシーケンスのリテラルコピーを取得する場合(たとえば、<bang>を取得する場合)に必要です。この場合は<lt>bang>を使用します。<q-args>)、その値は式で使用できる有効な値となるように引用符で囲まれます。引数を1つの値として使用します。引数がない場合、<q-args> は空文字列です。q-args-example を以下で参照してください。<f-args><f-args>(「関数引数」)があります。これは、コマンド引数をスペースとタブで分割し、各引数を個別に引用符で囲み、<f-args> シーケンスは、引用符で囲まれた引数のコンマ区切りリストで置き換えられます。以下の Mycmd の例を参照してください。引数が指定されていない場合、<f-args> は削除されます。<f-args> の引数に空白文字を埋め込むには、バックスラッシュを前に付けます。<f-args> は、バックスラッシュのペア(\\)を1つのバックスラッシュに置き換えます。バックスラッシュの後に空白文字またはバックスラッシュ以外の文字が続く場合、変更されません。また、f-args-example も以下で参照してください。概要<f-args>" Delete everything after here to the end
:com Ddel +,$d
" Rename the current buffer
:com -nargs=1 -bang -complete=file Ren f <args>|w<bang>
" Replace a range with the contents of a file
" (Enter this all as one line)
:com -range -nargs=1 -complete=file
Replace <line1>-pu_|<line1>,<line2>d|r <args>|<line1>d
" Count the number of lines in the range
:com! -range -nargs=0 Lines echo <line2> - <line1> + 1 "lines"<f-args>の例):com -nargs=* Mycmd call Myfunc(<f-args>)次のように実行された場合
:Mycmd arg1 arg2これは次を呼び出します
:call Myfunc("arg1","arg2"):function Allargs(command) : let i = 0 : while i < argc() : if filereadable(argv(i)) : execute "e " .. argv(i) : execute a:command : endif : let i = i + 1 : endwhile :endfunction :command -nargs=+ -complete=command Allargs call Allargs(<q-args>)Allargs コマンドは、Vim コマンドを任意の数引数として受け取り、引数リスト内のすべてのファイルに対して実行します。使用例(エラーを無視する「e」フラグと、変更されたバッファを書き込む「update」コマンドの使用に注意してください)
:Allargs %s/foo/bar/ge|updateこれは次を呼び出します
:call Allargs("%s/foo/bar/ge|update")