How to create an alias for a command in Vim?

alias, command, vim

Solution

To leave completion untouched, try using

cnoreabbrev W w

It will replace `W` in command line with `w`, but only if it is neither followed nor preceded by word character, so `:W<CR>` will be replaced with `:w<CR>`, but `:Write` won’t. (Note that this affects any commands that match, including ones that you might not expect. For example, the command `:saveas W Z` will be replaced by `:saveas w Z`, so be careful with this.)

Update

Here is how I would write it now:

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

As a function:

fun! SetupCommandAlias(from, to)
  exec 'cnoreabbrev <expr> '.a:from
        \ .' ((getcmdtype() is# ":" && getcmdline() is# "'.a:from.'")'
        \ .'? ("'.a:to.'") : ("'.a:from.'"))'
endfun
call SetupCommandAlias("W","w")

This checks that the command type is `:` and the command is `W`, so it’s safer than just `cnoreabbrev W w`.

Problem

Vim is my preferred text editor when I program, and thus I always run into a particularly annoying issue. Frequently, when I quickly need to save the buffer and continue on to some other miscellaneous task, I do the typical ``` :w ``` However, I always — what seems to be like more than 50% of the time — manage to capitalize that `:w`. Naturally, Vim yells at me because `W` is an invalid command: ``` E492: Not an editor command: W ``` My question is how can one alias colon-commands in Vim. Particularly, could you exemplify how to alias `W` to `w`. I am aware of the process to map keys to certain commands, but that is not what I’m looking for.

Original source

Related problems