vim-jp / issues

有志で既知のバグや要望を検討・管理し、オフィシャルへの還元をしていきます。
https://vim-jp.org/
342 stars 11 forks source link

:lmapで作ったマッピングがlmap自身にremapしない #52

Open tyru opened 13 years ago

tyru commented 13 years ago

:help todoにも書いてあるのですが、:lmap (not :lnoremap)で作ったマッピングが lang-modeの他のマッピングにremapしません。 インサートモードやコマンドラインモードのマッピングにはremap(というかfallback)します。

前回報告した時のスレッド Bug: :lmap can't remap to :lnoremap?

:help todoからの抜粋

When a mapping exists both for insert mode and lang-insert mode, the last one
doesn't work. (Tyru, 2010 May 6)  Or is this intended?
mattn commented 13 years ago

もすこし具体例下さい。

tyru commented 13 years ago

すみません。以下が具体例です。(vim_devのスレッドそのままなのですが)

  1. 下のコード:sourceかquickrunする
  2. insert modeに入る
  3. <C-^>を押す
  4. "bar"と入力
  5. "lnoremap"と入力されるはずが"noremap!"と入力されている (lmapの方のfooは適用されない)

    lnoremap foo :echomsg 'lnoremap' noremap! foo :echomsg 'noremap!' lmap bar foo

mattn commented 13 years ago

これ許したらループしそうですねw

tyru commented 13 years ago

え?そうですか?

tyru commented 13 years ago

あ、確かにそういえばremapって先頭マッチしてもremapしないとか@thincaさんから言われた記憶... しかしhelpの項目が見つからないorz

ただ上のケースでループしそうな条件が思い付かないです...

tyru commented 13 years ago

helpの項目見つけました。 :help recursive_mappping

例外として、{rhs} が {lhs} で始まっている場合は、その文字は
再帰的にマップされません (これは Vi 互換です)。
例えば次のマップは: >
   :map ab abcd
"a" コマンドを実行して "bcd" を挿入します。{rhs} の中の "ab" は再帰的にマップ
されません。

ただこれも上のケースとは違う気が...

mattn commented 13 years ago

あー、先にlmap以外から見てるのかな?

tyru commented 13 years ago

かもしれないです。それか単純に見てないか。

ynkdir commented 13 years ago

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 commented 13 years ago

なるほど。確かに書いてありますね。

koron commented 8 years ago

@tyru これ、現在どんな状況なんですかね?

tyru commented 8 years ago

すみません、vim_devでの議論は追えてないです… 少なくとも上の再現コードではまだ再現するようです。 @ynkdir さんが教えてくれた通りlmap は remap されないものとするなら仕様なのかもしれません。 (もう一回Bramさんに確認した方が良い?)