我想在vim的GUI模式下将:x
设置为删除缓冲区
,因为我总是不小心杀死整个gvim,这有点烦人。 我知道我可以使用 if has("gui running")
来特别设置GUI问题,但不知道如何重新映射 :x
。
提前致谢
附:也许标签/术语remap
是错误的,但我不知道正确的术语,这就是为什么谷歌根本没有提供任何帮助的原因。
我发现最安全的选择是使用表达式缩写:
cnoreabbrev <expr> x getcmdtype() == ":" && getcmdline() == 'x' ? 'bd' : 'x'
这将确保只有在使用:x
时才会将缩写扩展为bd
,否则只扩展为x
。如需更多帮助:
:h map-<expr>
:h getcmdtype()
:h getcmdline()
进一步检查发现,Hari Krishna Dara开发的cmdalias.vim插件完全可以实现这个功能。它使用了上述技术的变体。
:map
命令不能与其他命令一起使用,而 :command
命令只接受以大写字母开头的命令。但是你可以使用:cabbrev
命令:if has("gui_running")
cabbrev x bd
endif
更新:实际上可以使用:cmap x bd
,但它不能正常工作:命令中每个x
的出现都会立即被替换为bd
。
编辑:这个问题是在vim中我可以重新映射Ex命令吗?的副本。
has("gui running")
?我不相信它会变成真的。应该使用 has("gui")
。 - Chris Morgan:echo "1 + x = 3"
(有点绕口!),它会被转换为 :echo "1 + bd = 3"
。@Peter提供的解决方案更好,因为它没有这个缺陷。 - Chris Morganhas("gui_running")
。它可以在 :h has-patch
下面的列表中找到(使用 :helpg gui_running
)。 - ZyXhas('gui')
当然不会管用。 - Chris Morgan