vim更改:x函数删除缓冲区而不是save&放弃

时间:2011-09-22 10:33:33

标签: vim remap

我想在vim gui-mode中将:x设置为delete buffer因为我总是杀死整个gvim,这有点烦人。我知道我可以用if has("gui running")专门设置gui问题,但不知道如何重新映射:x

提前致谢

ps:也许标签/术语remap错了,但我不知道正确的术语,这就是谷歌没有提供任何帮助的原因。

2 个答案:

答案 0 :(得分:28)

我发现最安全的替代方法是使用表达式缩写:

cnoreabbrev <expr> x getcmdtype() == ":" && getcmdline() == 'x' ? 'bd' : 'x'

这将确保在使用bd时缩写仅扩展为:x,否则只需展开到x

获取更多帮助:

:h map-<expr>
:h getcmdtype()
:h getcmdline()

经过进一步检查后,似乎有一个插件由Hari Krishna Dara称为cmdalias.vim。它使用了上述技术的变体。

答案 1 :(得分:4)

这并不像看起来那么容易。 :map不能使用命令,:command只接受以大写字母开头的命令。但您可以使用:cabbrev

if has("gui_running")
  cabbrev x bd
endif

更新::cmap 可以实际使用::cmap x bd,但它无法正常工作:命令中每次出现x都会立即被替换bd

编辑:此问题与Can I (re)map Ex commands in vim?重复。