【问题标题】:Vim "trigger abbreviation" command i_CTRL-] sometimes inserts literal <C-]>Vim“触发缩写”命令 i_CTRL-] 有时会插入文字 <C-]>
【发布时间】:2013-04-13 06:06:22
【问题描述】:

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

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

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

【问题讨论】:

  • This document 列出了自 7.3 以来的所有补丁。也许你会找到你正在寻找的东西。另外,我建议您仔细检查:h :abbrev:该功能可能一直稳定,也可能不稳定。
  • 这似乎是一个错误。这封电子邮件讨论了这个问题:article.gmane.org/gmane.editors.vim/103548
  • Further along the same thread,提到插入文字 ^] 是理想的行为。 (显然从那以后发生了一些变化。)
  • 我现在可以肯定地说,补丁 489 到 7.3 中的行为发生了变化。

标签: vim


【解决方案1】:

正如 cmets 中所讨论的,7.3.489 中的行为发生了变化,这修复了一个相关错误,如果通过映射插入 &lt;C-]&gt;,则该错误会阻止 &lt;C-]&gt; 扩展缩写。

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多