Open tyru opened 13 years ago
もすこし具体例下さい。
すみません。以下が具体例です。(vim_devのスレッドそのままなのですが)
<C-^>
を押す"lnoremap"と入力されるはずが"noremap!"と入力されている (lmapの方のfooは適用されない)
lnoremap foo
これ許したらループしそうですねw
え?そうですか?
あ、確かにそういえばremapって先頭マッチしてもremapしないとか@thincaさんから言われた記憶... しかしhelpの項目が見つからないorz
ただ上のケースでループしそうな条件が思い付かないです...
helpの項目見つけました。 :help recursive_mappping
例外として、{rhs} が {lhs} で始まっている場合は、その文字は
再帰的にマップされません (これは Vi 互換です)。
例えば次のマップは: >
:map ab abcd
"a" コマンドを実行して "bcd" を挿入します。{rhs} の中の "ab" は再帰的にマップ
されません。
ただこれも上のケースとは違う気が...
あー、先にlmap以外から見てるのかな?
かもしれないです。それか単純に見てないか。
lmap は remap されないものだった気がします。
:help language-mapping
Language mappings will never be applied to already mapped characters. They
are only used for typed characters. This assumes that the language mapping
was already done when typing the mapping.
lmap は 'keymap' の機能のために使われていたり 入力モードやその切り替え (CTRL-^) が IM と共通であることから Input Method に近いものと考えられ 例えば IM での入力結果を再び IM への入力として与えるはおかしい ということなのかなぁと思いました。
まあ Bram さんが I suppose that's a bug. といっているのでそうなんでしょうけども。
なるほど。確かに書いてありますね。
@tyru これ、現在どんな状況なんですかね?
すみません、vim_devでの議論は追えてないです… 少なくとも上の再現コードではまだ再現するようです。 @ynkdir さんが教えてくれた通りlmap は remap されないものとするなら仕様なのかもしれません。 (もう一回Bramさんに確認した方が良い?)
:help todo
にも書いてあるのですが、:lmap (not:lnoremap
)で作ったマッピングが lang-modeの他のマッピングにremapしません。 インサートモードやコマンドラインモードのマッピングにはremap(というかfallback)します。前回報告した時のスレッド Bug: :lmap can't remap to :lnoremap?
:help todoからの抜粋