【问题标题】:Can I (re)map Ex commands in vim?我可以在 vim 中(重新)映射 Ex 命令吗?
【发布时间】:2010-09-12 03:24:33
【问题描述】:

我喜欢 vim 和它给我的速度。但有时,我的手指太快了,我发现自己输入的是:WQ 而不是:wq。 (在德语键盘上,你必须按 Shift 才能得到冒号 :。)然后 Vim 会抱怨 WQNot an editor command

有没有办法制作WQ 编辑器命令?

【问题讨论】:

  • 您也可以使用 shift 在标准美式 QWERTY 上获取冒号。
  • 不应该是超级用户吗?
  • 你也可以映射; (或 : 键上的任何内容)到 : 反之亦然,因此您无需使用 shift 来获取 :.
  • ;默认情况下跳转到您使用 f 找到的字符的下一个实例(类似于 n 如何查找 a / 搜索的下一个实例)。如果您决定重新映射它,您将失去该功能。
  • @AnthonyDiSanti 如果您将; 重新映射回:,则不会! noremap ; :noremap : ;:P

标签: vim


【解决方案1】:

试试

 :command WQ wq
 :command Wq wq
 :command W w
 :command Q q

这样您就可以定义自己的命令。请参阅:help command 了解更多信息。

【讨论】:

  • 别忘了将上面的内容添加到你的 vimrc 中,这样你就不必每次都这样做了。
  • 请注意,在 .vimrc 中,您需要省略前导冒号。它应该是,例如:command Wq wq
  • 此解决方案仅限于以大写字母开头的命令名称。可以找到更好的解决方案here
  • 这不允许您使用参数,例如,如果您使用 :command W w 设置别名,:W example.txt 将无法工作
  • 使用 vim 8.0.1453,在我的 .vimrc 中,我必须使用 cmap WQ wq,而不是“命令”。 Vim 给了我E128: Invalid command name 否则。
【解决方案2】:

另一种方法:

使用“command abbreviations

:ca WQ wq

【讨论】:

  • 记住这一点的有用方法:完整的关键字是cabbrev。 :)
  • +1 这也允许别名以小写字母开头(与:command 不同)。
  • 此解决方案将替换命令中的WQ,而不仅仅是在开头,这对于“WQ”可能很少见,但对于更常见的类型字符串也不是。因此,this solution 更好。
【解决方案3】:

你可以使用

:cmap WQ wq

也是。 例如。我有

cmap h tab help

在我的.vimrc 中,这意味着在新标签页中打开帮助页面。

Thanks for the tip Jim Stewart:

但这里有一个比上面更好的解决方案(对于帮助映射, 所以它只适用于你这样做:h):

cnoreabbrev <expr> h getcmdtype() == ":" && getcmdline() == "h" ? "tab h" : "h"

【讨论】:

  • 如果 (G)Vim 在哪个版本上?当你输入 ':cmap h tab help:h' 会发生什么?
  • -1:接触太多了。例如,:echo 3 将生成 :ectab helpo 3:e sh.py 变为 :e stab help.py。等等。
  • 这是题外话,但您可能需要cnoreabbrev &lt;expr&gt; h getcmdtype() == ":" &amp;&amp; getcmdline() == "h" ? "tab h" : "h" 之类的帮助映射,以便它仅在您执行:h&lt;space&gt; 时适用。
  • 谢谢@JimStewart,这是一个更好的解决方案,我会将其添加到我的答案中!
  • :cmap h tab help 使 vim 输出选项卡在整个屏幕上永远循环。
猜你喜欢
  • 2013-05-25
  • 2015-07-17
  • 2012-01-13
  • 2011-11-21
  • 2010-09-24
  • 2013-12-24
  • 1970-01-01
  • 2015-05-13
  • 1970-01-01
相关资源
最近更新 更多