2013-08-29 40 views
0

我想我剛剛發現了一個Vim bug,但在打擾Bram Moolenaar之前,我想我會在這裏檢查一下,如果我對Vim命令語法的理解是正確的。Vim的縮寫也適用於搜索(bug?)

在我.vimrc,我有

cnoreabbrev W w 
cnoreabbrev Q q 

,因爲我傾向於打字:w:q時,給予:W:Q來按住Shift鬱悶。但是,當我現在嘗試使用/W,?Q等嘗試搜索WQ時,Vim找到的出現次數爲wq。我發現這令人驚訝,因爲我認爲我只是縮寫了命令,而不是搜索字符串。從我的.vimrc中刪除兩行可以獲得所需的行爲。

這是一個錯誤或cnoreabbrev的功能?它出現在Debian打包的Vim 7.3.923和當前的Mercurial技巧中。

+0

順便說一句,在[vim_use(https://groups.google.com/forum/?fromgroups#!forum/vim_use)郵件列表是個好地方詢問潛在的錯誤(這可能會變成簡單的誤解;))。 – glts

+0

@glts:當然,但也是如此:) –

+0

btw,我有'nnoremap w:w '映射做快速保存,你可能也想試一試。我不認爲':W'更容易按,按':',我通常使用左移,而'w'也在左邊... – Kent

回答

1

特徵。

如果碰到空間?Q後,你將看到更改爲?q

我的方式固定它實際上只是定義用戶的命令。 (因爲它以大寫字母開頭反正它的工作原理)

command! Q q 
command! W w 
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命令 「:」 模式 搜索命令, 「?」和「/」,和過濾命令, 「!」。

+0

在':h getcmdtype()'你可以看到更多的Cmdline類型,「debug」,「input()'和':insert' /':append '(我試過了)。 – glts

2

命令行的縮寫是臭名昭著導致用戶不打算微妙的錯誤。您嘗試創建的別名類型可能應轉換爲命令。

command W w 
command Q q 

我將完成,爆炸參數和範圍參數作爲練習給讀者。

但是,如果你真的想要使用cnoreabbrev你需要認真對待。我通常會做一個表達式縮寫,它會檢查getcmdtype()並通過getcmdline()檢查命令行的值。下面

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

例如如果你不想自己創建的邏輯,你可以通過哈日克里希納達拉使用插件調用cmdalias

如需更多幫助,請參見:

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