while ("im the true Vim master");

2008-07-07

abbreviationの展開はユーザーから直接入力されたキーでのみ行われる (was Re: rubyneko - rubyで頻繁にendをednとtypoしてしまう)

20:25

edn+spaceはend+spaceになるんだけど、残念ながらedn+returnはend+returnになってくれない。

ライブドアブログ(livedoor Blog)| 読みたいブログが見つかる

ええー、展開されますよ。もしかして<Return>を何かにmapしてませんか? 今すぐ:imapでチェックを。

というのも、abbreviationの展開はユーザーから直接入力されたキーで行われるからです。Key mappingされたキーシーケンスは「ユーザーから直接入力された」とは見做されませんから、abbreviationの展開は行われません。

Key mappingの削除と本体の修正以外の回避策は恐らくありません。この現象はkey mappingで対処できませんし、feedkeys(..., 't')も効きませんでしたから(しかしfeedkeys(..., 't')が効かないのはバグ臭いですね)。


蛇足

最初、私の環境でも<Return> (≒<C-m>)で展開されなくて驚いたのですが、何故か<C-j>では展開されたり、inoremap <Return> <C-]><Return>で何故か<C-]>がそのまま入力されたりする現象から原因が発覚しました(私の環境では物理的なキーの位置をベースにkey mappingを定義するために<Return>を含む一部のキーをmapしています)。

しっかし、これ:helpに書いてませんよ。「直接入力」云々の区別は:help feedkeys()にさりげなくそれっぽい記述があるだけで、abbreviationとの関連なんて一切書かれていません。これはさすがにBramさんにツッコミを入れるべきでしょうか。

mattnmattn2008/07/08 09:36あれ?私のedn<cr>でendでした。vim72/trunkの-u NONE -U NONEです。

ka-nachtka-nacht2008/07/09 09:30inoremap <Return> <Return>
の有無で挙動が変わるかどうか試してください。7.1.330では上記の設定賀されている場合、展開が行われません。

mattnmattn2008/07/09 11:52inoreabbrev とか?

トラックバック - http://vim.g.hatena.ne.jp/ka-nacht/20080707
最近のコメント
あわせて読みたいブログパーツ
AX