16

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.

asked Sep 22, 2011 at 10:33
1

2 Answers 2

33

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.

answered Sep 22, 2011 at 13:21
4

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?.

answered Sep 22, 2011 at 10:45
4
  • Why has("gui running")? I don't believe that'll ever be true. Should be has("gui"). Commented Sep 22, 2011 at 13:41
  • 3
    This 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. Commented 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). Commented 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. Commented Sep 22, 2011 at 22:51

Your Answer

Draft saved
Draft discarded

Sign up or log in

Sign up using Google
Sign up using Email and Password

Post as a guest

Required, but never shown

Post as a guest

Required, but never shown

By clicking "Post Your Answer", you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.