In vim, in my .vimrc, how can I redefine a command (i.e. :e) as something else?
I want to redefine :e *
as :tabe *
.

- 347,512
- 102
- 1,199
- 985

- 14,179
- 14
- 48
- 71
3 Answers
cnoreabbrev
workaround
The best workaround without a plugin that I have seen so far is:
cnoreabbrev <expr> e getcmdtype() == ":" && getcmdline() == 'e' ? 'tabe' : 'e'
If you use a simple:
cnoreabbrev e E
as suggested by @Yktula would break your command if you want to do:
echo e f
which would become:
echo E f
instead.
As explained by @pydave in the comments, the cmdalias plugin adds a simpler interface to doing the safe alias simply as:
:Alias e tabe
At the time of writing the plugin also uses the getcmdtype() == ":"
technique to implement its functionality.

- 347,512
- 102
- 1,199
- 985
-
1You can use [cmdalias](http://www.vim.org/scripts/script.php?script_id=746) to simplify that to `:Alias e tabe` and it will do the getcmdline magic for you. – idbrii Dec 13 '13 at 19:09
I figured out a way to do it. See How to disable a built-in command in vim . From that, we can see that we can use cabbrev to change what a command does. For my needs, cabbrev e tabe
is perfect.
But we can generalize this solution to make commands starting with lower case characters accessible to users for user-defined ones: use cabbrev to (re)define a built-in command as a user-defined one. As such, we are able to redefine built-in commands as well as user-defined ones.
Here's an example, which is equivalent to my aforementioned solution to my problem:
:command -nargs=+ E :tabe "<args>"
:cabbrev e E
That's all.
-
2This breaks if you want to type: `echo e f`, which would become `echo E f` instead. My answer attempts to overcome this. – Ciro Santilli OurBigBook.com Jun 17 '14 at 12:21
As I understand it, you can't. User defined commands must have an uppercase first letter.
:help :command
for more information

- 41,746
- 15
- 73
- 90