2013-07-22 25 views
6

X,我發現自己擊中:X時,我的意思是輸入:x與禁用加密:在VIM

有沒有一種方法來禁用:X加密,這樣在打字VIM有:X沒有效果?

我假設有一個命令可以放在.vimrc文件中?

回答

9

存在使用此cnoreabbrev/cnoremap的稍微標準方式:

cnoremap <expr> X (getcmdtype() is# ':' && empty(getcmdline())) ? 'x' : 'X' 

cnoreabbrev <expr> X (getcmdtype() is# ':' && getcmdline() is# 'X') ? 'x' : 'X' 
:與 x檢查它是否在命令行唯一的字符替換 X之前

。不同的是,首先會阻止你打字:Xfoo(將翻譯成:xfoo),第二不會,但將防止打字:X!(將翻譯成:x!這確實有道理不像:X!)。

搜索(/X很好),input()提示等沒有區別,如果輸入X不是第一個也沒有區別。

+0

我怎麼做,第二個不能阻止我打字'!X'? – BPm

+0

@BPm你爲什麼要問?運行':X!'拋出「E477:不!允許「,重新定義':X'也是不可能的。如果你要求重映射其他的東西,那麼'X'使用附加的'getchar(1)不是char2nr('!')'條件。 – ZyX

+0

我問,因爲我傾向於錯誤鍵入':W',但另一個插件有一個':W!'命令。我會嘗試附加條件。謝謝! – BPm

1

您可以使用:cmap映射X爲X,但也有副作用,比如不能夠使用的字母X的任何地方

:cmap X x 

對於略少侵入版本

:cmap X^M x^M 

當你在之後立即回車時,它只會將X映射到x。

5

使用:cnoreabbrev具有相同的功能覆蓋:X:x

cnoreabbrev X x 

:cnoreabbrev最好:cabbrev因爲:x可能已經被重新映射到別的東西。

請注意,使用cabbrev通常會影響命令行中的所有單字母單詞X,例如, :X X將轉換爲:x x,可能不是意圖。請參閱@ ZyX的解決方案。