有没有办法覆盖 vim 的默认命令?

Is there a way to overwrite vim's default command?

我想将 :bd 映射到 :bd! 使用:

command! -nargs=* -complete=buffer bd :call bd!

但是vim告诉我"User defined commands must start with an uppercase letter"


根据答案更新解决方案:

cnoremap bd bd!

另一种方式

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

您可以创建一个 "user-defined" 命令来包装目标命令,在您的例子中是 bd。然后你必须让命令名称以大写字母开头。

实际上,如果我理解你的需求是正确的,你希望在命令模式下键入 bd 时始终执行 bd!,那么你可以创建一个映射:

cnoremap bd bd!

这样,当您键入 :bd 时,! 将自动出现。

P.S.

当您使用 call 时,您调用的是 function() 而不是命令。