15

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

Ciro Santilli OurBigBook.com
  • 347,512
  • 102
  • 1,199
  • 985
Yktula
  • 14,179
  • 14
  • 48
  • 71

3 Answers3

11

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.

Ciro Santilli OurBigBook.com
  • 347,512
  • 102
  • 1,199
  • 985
  • 1
    You 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
11

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.

Community
  • 1
  • 1
Yktula
  • 14,179
  • 14
  • 48
  • 71
2

As I understand it, you can't. User defined commands must have an uppercase first letter.

  :help :command

for more information

Jerub
  • 41,746
  • 15
  • 73
  • 90