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.
-
1possible duplicate of Vim: Redefine a commandeckes– eckes2013年12月19日 10:29:29 +00:00Commented Dec 19, 2013 at 10:29
2 Answers 2
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?.
-
Why
has("gui running")
? I don't believe that'll ever be true. Should behas("gui")
.Chris Morgan– Chris Morgan2011年09月22日 13:41:20 +00:00Commented Sep 22, 2011 at 13:41 -
3This has the problem then that if you ever enter "x" as a word, e.g.
:echo "1 + x = 3"
(convoluted, I know!), it'll be turned into:echo "1 + bd = 3"
. @Peter's solution is better because it doesn't have this flaw.Chris Morgan– Chris Morgan2011年09月22日 13:46:43 +00:00Commented Sep 22, 2011 at 13:46 -
@ChrisMorgan It should be
has("gui_running")
. It can be found in a list below:h has-patch
(use:helpg gui_running
).ZyX– ZyX2011年09月22日 16:42:20 +00:00Commented Sep 22, 2011 at 16:42 -
@ZyX Correct, my mistake. I've used it before but didn't refer to it...
has('gui')
certainly won't cut it.Chris Morgan– Chris Morgan2011年09月22日 22:51:52 +00:00Commented Sep 22, 2011 at 22:51