Vim缩写也适用于搜索(bug?)

时间:2013-08-29 15:09:21

标签: vim

我想我刚刚发现了一个Vim错误,但在打扰Bram Moolenaar之前,我想我会在这里查看我对Vim命令语法的理解是否正确。

在我的.vimrc中,我有

cnoreabbrev W w
cnoreabbrev Q q 

因为在输入:w:q时,我会倾向于保持转变,提供:W:Q。但是,当我现在尝试使用WQ等搜索/W?Q时,Vim会发现w或{{1}的出现次数而是。我发现这令人惊讶,因为我以为我只缩写了命令,而不是搜索字符串。从我的q中删除两行会产生所需的行为。

这是.vimrc的错误还是功能?它出现在Debian打包的Vim 7.3.923和当前的Mercurial提示中。

3 个答案:

答案 0 :(得分:2)

我不会说它是bug,它是一个.....功能。 :d

您所做的只是在命令行模式下创建ab

/(搜索)也会使您进入命令行模式。这也是ab在那里工作的原因。

:h vim-modes
你可以看到:

Command-line mode   In Command-line mode (also called Cmdline mode) you
Cmdline mode        can enter one line of text at the bottom of the
            window.  This is for the Ex commands, ":", the pattern
            search commands, "?" and "/", and the filter command,
            "!". 

所以

  

这是针对Ex命令,“:”,模式                 搜索命令,“?”和“/”,和过滤器命令,                 “!”。

答案 1 :(得分:2)

命令行缩写因引起用户不想要的细微错误而臭名昭着。您尝试创建的别名类型可能应该转换为命令。

command W w
command Q q

我将完成,爆炸论证和范围论证作为读者的练习。

但是,如果您确实想要使用cnoreabbrev,则需要谨慎使用。我通常创建一个表达式缩写来检查getcmdtype()并通过getcmdline()检查命令行的值。以下示例

cnoreabbrev <expr> W getcmdtype() == ':' && getcmdline() ==# 'W' ? 'w' : 'W'

如果您不想自己创建逻辑,可以使用Hari Krishna Dara调用插件cmdalias

如需更多帮助,请参阅:

:h Command-line-mode
:h :command
:h :map-expression
:h getcmdtype()
:h getcmdline()

答案 2 :(得分:1)

功能

如果您在?Q后点击空格,则会看到更改为?q

我修复它的方法实际上就是定义一个用户命令。 (因为它始终以资本开始,它起作用)

command! Q q
command! W w