Vim“trigger abbreviation”命令i_CTRL-]有时会插入文字<c - ]> </c - ]>

时间:2013-04-10 17:34:47

标签: vim

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

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

这是一个修复过的错误吗?或者由于不同的编译选项,是不同的处理?当我必须在这些较旧的病毒中工作时,有没有办法避免插入无关的^]

1 个答案:

答案 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-]>