I want to set :x
in vim gui-mode to delete buffer
because I always kill the whole gvim, 开发者_如何转开发which is kind of annoying. I know i can specifically set gui problems with if has("gui running")
but don't know how to remap :x
thanks in advance
ps.: maybe the tag/term remap
is wrong but I don't know the correct term, that's why google didn't provide any help at all.
I find the safest alternative is to use an expression abbreviation:
cnoreabbrev <expr> x getcmdtype() == ":" && getcmdline() == 'x' ? 'bd' : 'x'
This will ensure the abbreviation will only be expanded to bd
when :x
is used otherwise just expand to x
.
For more help:
:h map-<expr>
:h getcmdtype()
:h getcmdline()
Upon further inspection there appears to be a plugin that does exactly this by Hari Krishna Dara called cmdalias.vim. It uses a variation of the technique above.
This is not as easy as it looks. :map
won't work with commands and :command
only accepts commands that start with an uppercase letter. But you can use :cabbrev
:
if has("gui_running")
cabbrev x bd
endif
UPDATE: :cmap
could actually be used: :cmap x bd
, but it doesn't work right: each occurrence of x
in a command is immediately replaced by bd
.
EDIT: This question is a duplicate of Can I (re)map Ex commands in vim?.
精彩评论