在插入模式下,命令CTRL-]扩展缩写而不输入空格。因此,如果您设置:abbrev foo bar
,则键入foo<C-]>
会将foo
更改为bar
。
但是,如果您未为bar<C-]>
设置任何缩写,则键入bar
会发生什么?
在一个版本的vim(7.3.754)中,CTRL-]被忽略。在我有权访问的其他版本(7.3.0和7.2.411)中,插入了一个文字字符^]
,因此您获得了bar^]
。
这是一个修复过的错误吗?或者由于不同的编译选项,是不同的处理?当我必须在这些较旧的病毒中工作时,有没有办法避免插入无关的^]
?
答案 0 :(得分:0)
正如评论中所讨论的,7.3.489中的行为发生了变化,修复了一个相关的错误,如果通过映射插入了<C-]>
,则<C-]>
无法扩展缩写。
有趣的是,我遇到这个的原因是因为我正在定义一个映射
inoremap <CR> <C-]><CR><C-U>g
在插入模式下按下每个<CR>
后,最后三个字符只会创建一个新的撤消点。在正常情况下,按Enter键也会扩展缩写(如果适用),但如果已重新映射<CR>
则不会。 <C-]>
强制扩展缩写。事实证明,这是导致Yichao Zhou编写上述错误修正的确切映射。
这不是一个完美的解决方法,但在定义地图时使用if has("patch489")
,您至少可以优雅地降级到旧版本的vim。按Enter键不会扩展缩写,但至少不会插入<C-]>
。