あるマップをノーマルモードとビジュアルモードで使用し、そして、演算待ち状態モー
ドでは使用しないという場合は、3つのモードに対してマップを定義してから演算待ち
状態モードのマップだけを削除します: :map xx something-difficult :ounmap xx
ビジュアルモードと演算待ち状態モードの場合や、ノーマルモードと演算待ち状態モー
ドの場合も同様にします。
CHAR MODE <Space> ノーマル、ビジュアル、セレクト、演算待ち状態モード
n ノーマルモード
v ビジュアルモード、セレクトモード
s セレクトモード
x ビジュアルモード
o 演算待ち状態モード
! 挿入モード、コマンドラインモード
i 挿入モード
l Lang-Argモード。|language-mapping|
c コマンドラインモード
二つのキーの意味を入れ換えるような場合は :noremap を使ってください。例えば: :noremap k j :noremap j k
これは、カーソルの上下移動のコマンドを入れ換えます。
普通の :map コマンドでマップを定義した場合、'remap' オプションがオンになってい
ると、そのマップが使用された後のテキスト ({rhs}) に {lhs} が含まれている限り、
マップが再帰的に繰り返されます。例えば、次のようなマップを使用する場合: :map x y :map y x
Vim はまず、 x を y で置き換え、それから y を x で置き換え、...。これを 'maxmapdepth' に設定した回数だけ (標準設定は1000回) 繰り返し、"recursive
mapping" というエラーメッセージを表示します。
例: ({CURSOR}は非キーワード文字を入力する場所です) :ab foo four old otters
" foo{CURSOR}" は " four old otters" に展開されます
" foobar{CURSOR}" は展開されません
"barfoo{CURSOR}" は展開されません
短縮入力の後で、カーソルを動かすこともできます: :iab if if ()<Left>
これは、'cpoptions'に'<'フラグが含まれていると、うまく動作しません。|<>|
さらに手の込んだこともできます。例えば、短縮入力を展開するときに入力したスペー
スを消してしまうには: func Eatchar(pat) let c = nr2char(getchar(0)) return (c =~ a:pat) ? '' : c endfunc iabbr <silent> if if ()<Left><C-R>=Eatchar('\s')<CR>
標準設定されている短縮入力はありません。
短縮入力の展開は再帰的には行われません。":ab f f-o-o" という短縮入力を問題なく
使うことができます。しかし、展開された文字にはマップが適用されます。 {Vi のい くつかのバージョンで再帰的な短縮入力をサポートしていますが、そこになんら明確な 理由はありません}
:verbose command TOhtml Name Args Range Complete Definition TOhtml 0 % :call Convert2HTML(<line1>, <line2>) Last set from /usr/share/vim/vim-7.0/plugin/tohtml.vim
コマンド <f-args>
XX ab 'ab'
XX a\b 'a\b'
XX a\ b 'a b'
XX a\ b 'a ', 'b'
XX a\\b 'a\b'
XX a\\ b 'a\', 'b'
XX a\\\b 'a\\b'
XX a\\\ b 'a\ b'
XX a\\\\b 'a\\b'
XX a\\\\ b 'a\\', 'b'
例
" 現在行から最後行までを削除します :com Ddel +,$d
" 現在のバッファ名を変更します :com -nargs=1 -bang -complete=file Ren f <args>|w<bang>