2

在插入模式下,命令 CTRL-] 扩展缩写而不输入空格。因此,如果您设置:abbrev foo bar,键入foo<C-]>将更foo改为bar

但是,如果您bar<C-]>在没有设置任何缩写的情况下键入会发生什么bar?在一个版本的 vim (7.3.754) 中,CTRL-] 被忽略。在我可以访问的其他版本(7.3.0 和 7.2.411)中,^]插入了一个文字字符,所以你得到bar^].

这是一个已修复的错误吗?或者是因为不同的编译选项而导致的不同处理?^]当我必须在这些较旧的 vim 中工作时,有没有办法避免插入无关的 s?

4

1 回答 1

1

正如评论中所讨论的,行为在7.3.489中发生了变化,它修复了一个相关的错误,如果通过映射插入,该错误会阻止<C-]>扩展缩写。<C-]>

有趣的是,我遇到这个的原因是因为我正在定义一个映射

inoremap <CR> <C-]><CR><C-U>g

最后三个字符只是<CR>在插入模式下每次按下后创建一个新的撤消点。在正常情况下,如果适用,按 Enter 也会扩展缩写,但如果<CR>已重新映射则不会。是<C-]>为了强行扩大缩略语。事实证明,这正是导致 Yichao Zhou 编写上述错误修复的确切映射。

这不是一个完美的解决方法,但通过if has("patch489")在定义映射时使用,您至少可以优雅地降级到旧版本的 vim。按 enter 不会扩展缩写,但至少不会插入<C-]>.

于 2013-04-12T22:06:22.797 回答