如何知道快捷方式执行了哪个Vim命令?

How to know which Vim command is executed by a shortcut?

如何知道默认 Vim 快捷方式执行的是哪个命令?

我见过类似的问题,其中接受的答案仅适用于自定义(用户或插件定义的快捷方式)。

例如,我想将(向下滚动半页)执行的操作映射到另一个快捷方式,因为我不知道要调用哪个命令。我无法将其映射到 <c-d>,因为我正在将该快捷方式用于另一个命令 (:q)。

您可以创建自定义映射,例如 nnoremap <leader>a ggVG <leader>a 被映射到命令序列:gg V G

我猜你的意思 "default shortcut" 就像上面例子中的 gg or V or G 一样。那些 "shortcuts" 确实调用了一些 function/programs,但我们不知道这些函数,因为它们是内置的东西,如果你想知道它们,你必须阅读 vim 的源代码代码。

对于您的问题,为 scroll half page down 创建映射,您可以尝试

nnoremap {yourKeysHere} <c-d>

:h ctrl-d 了解详情,<c-d> 将向下滚动半屏。换句话说,您只需创建到那些 "default shortcuts" 的映射,然后就可以了。

如果这不能回答您的问题,请给出具体要求,您想要达到的目标。

要查看默认映射可以查看 :help index

正如您提到的自定义映射,您可以使用 :map X:imap X

我找不到默认快捷方式的命令,但我发现了一种实现我想要的方法:

" My custom map, use noremap to prevent <c-u> from using overridden definition nnoremap <Space> <c-d>

map <c-d> :q <cr>

默认 "shortcuts" 不是 "shortcuts":它们是低级 命令。 您不需要知道它们映射到什么命令因为它们没有映射到 任何东西。

如果您想在映射中使用 d 提供的功能,只需使用 d:

nnoremap <key> <something>d<somethingelse>

关于您的以下评论之一:Ex 命令都是 line-wise 因为 Ex 是 line-wise 的,所以将它们视为普通模式命令的命令行版本,一般字符。

已经有几个很好的答案,但我认为您大多忽略了 :map:noremap 之间的区别。对于后者(和推荐的!),不考虑现有映射。

因此,如果您有到 <C-d> 的映射,但仍想在其他地方使用 "scroll down by half page",只需使用 :nnoremap ... <C-d>.

正如其他人所说,没有内置功能,默认的 <C-d> 功能。在函数中(相对于使用 :noremap 的映射),您还可以使用 :normal! 来触发它::execute "normal! \<C-d>".