Vim - 命令行 - 上一个和下一个命令键映射

Vim - Command Line - previous and next command key mapping

当打开命令行并按向上箭头或向下箭头键时,它会显示上次输入的命令。有没有办法映射这种行为?例如,当我按下 ctrl p 时,我希望 vim 显示我之前的命令(让 vim 就像我按下向上箭头一样)。下一个命令的 ctrl n 也是如此。

我怎样才能做到这一点?

CTRL-PCTRL-N击键已经做你想做的,他们搜索你的命令历史。请参阅 :help c_CTRL-P,其中解释了它将如何 "recall older command-line from history."

CTRL-PCTRL-N 的工作方式与向上和向下箭头略有不同,因为箭头只会遍历历史记录中以您键入的字符开头的项目。因此 :e、space,向上箭头将转到您用于打开文件进行编辑的最后一个命令。有关详细信息,请参阅 :help c_<Up>

您可以使用 cnoremap 命令重新映射它们,以便它们与对应的对象执行相同的操作,该命令为在 Vim 命令行中键入的击键创建映射。

例如,要使 CTRL-PCTRL-N 的行为与箭头相同(完全尊重前缀),您可以使用以下命令创建(有点天真)映射:

cnoremap <C-P> <Up>
cnoremap <C-N> <Down>

这种方法的缺点是 CTRL-PCTRL-N 在 wildmenu 上的行为不同,因此更完整的映射是:

cnoremap <expr> <C-P> wildmenumode() ? "\<C-P>" : "\<Up>"
cnoremap <expr> <C-N> wildmenumode() ? "\<C-N>" : "\<Down>"

这将在 wildmenu 中保留 CTRL-PCTRL-N 的原始行为。