2010-04-09 89 views
9

在vim中,在我的.vimrc中,如何重新定義一個命令(即:e)作爲別的東西? 我想重新定義:e *:tabe *Vim:重新定義命令

回答

10

我想出了一個辦法做到這一點。見How to disable a built-in command in vim。由此我們可以看到,我們可以使用cabbrev來改變命令的功能。根據我的需要,cabbrev e tabe是完美的。

但是,我們可以概括這個解決方案,使命令以小寫字母開頭,用戶可以訪問用戶定義的命令:使用cabbrev(重新)將內置命令定義爲用戶定義的命令。因此,我們能夠重新定義內置命令以及用戶定義的命令。

下面是一個例子,這相當於我的上述解決我的問題:

:command -nargs=+ E :tabe "<args>" 
:cabbrev e E 

這就是全部。

+0

如果您想鍵入:'echo e f',則會變成'echo E f',而不是。我的答案試圖克服這一點。 – 2014-06-17 12:21:50

1

據我所知,你不能。用戶定義的命令必須具有大寫的第一個字母。

:help :command 

瞭解更多信息

3

,我迄今所看到的沒有一個插件,最好的解決方法是:

cnoreabbrev <expr> e getcmdtype() == ":" && getcmdline() == 'e' ? 'tabe' : 'e' 

如果使用的是簡單的:

cnoreabbrev e E 

由@Yktula建議將打破你的命令如果你想這樣做:

echo e f 

這將變成:

echo E f 

代替。


正如評論所解釋的@pydave的cmdalias plugin增加了一個簡單的接口,以做安全別名簡稱爲:

:Alias e tabe 

在也寫作插件的時候使用getcmdtype() == ":"技術實現其功能。

+0

您可以使用[cmdalias](http://www.vim.org/scripts/script.php?script_id=746)將其簡化爲':別名和tabe',它會爲您執行getcmdline魔術。 – idbrii 2013-12-13 19:09:32