Vim";触发缩写;命令i_CTRL-]有时插入文字<;C-]>;

Vim";触发缩写;命令i_CTRL-]有时插入文字<;C-]>;,vim,Vim,在插入模式下,命令CTRL-]展开缩写而不输入空格。因此,如果设置:abbrev foo bar,键入foo将foo更改为bar 但是,如果您没有为bar设置任何缩写,则键入bar会发生什么情况? 在vim的一个版本(7.3.754)中,CTRL-]被忽略。在我可以访问的其他版本(7.3.0和7.2.411)中,插入了一个文本字符^],因此您可以得到bar^] 这是一个已经修复的bug吗?或者不同的处理是因为不同的编译选项?当我必须在这些较旧的VIM中工作时,有没有办法避免插入无关的^]s?如评

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

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


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

如评论中所述,行为发生了变化,修复了一个相关的错误,该错误阻止
通过映射插入缩写

有趣的是,我遇到这个问题的原因是因为我定义了一个映射

inoremap <CR> <C-]><CR><C-U>g
inoremap g
在插入模式下,每按一次
,最后三个字符只会创建一个新的撤消点。在正常情况下,如果适用,按enter键也会扩展缩写,但如果
已重新映射,则不会。
是强制扩展缩写。事实证明,这正是导致周一超编写上述错误修复的映射


这不是一个完美的解决方法,但在定义映射时使用
if-has(“patch489”)
至少可以优雅地降级到旧版本的vim。按enter键不会展开缩写,但至少不会插入

列出7.3版以来的所有修补程序。也许你会找到你想要的。另外,我建议您仔细检查
:h:abbrev
:该功能可能一直都很稳定,也可能一直都不稳定。看起来这是一个bug。此电子邮件讨论了以下问题:,其中提到插入文字
^]
是所需的行为。(很明显,从那以后情况发生了变化。)我现在可以肯定地说,在489到7.3补丁中,行为发生了变化。