15

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

提前致谢

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

4

2 回答 2

30

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

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

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

如需更多帮助:

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

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

于 2011-09-22T13:21:02.937 回答
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 重复吗?.

于 2011-09-22T10:45:28.773 回答