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

4

当打开命令行并按上箭头或下箭头键时,它会显示上次键入的命令。是否有办法映射此行为?例如,当我按下ctrl p时,我希望vim显示我以前的命令(使vim表现得像我按了上箭头)。对于下一个命令,ctrl n也是同样的。

如何实现这一点呢?


3
开箱即用,只需按 : 然后使用 Ctrl + p 导航到上一个。 - Tarek Dakhran
2
哈哈,真的是我需要的东西,而且一直都在那里。谢谢! - DasOhmoff San
2
CTRL-P和向上箭头之间有一个小差别,即向上箭头只会展开以您键入的字符开头的匹配项。 - filbranden
哦,我明白了,有没有办法让Ctrl+P的行为与向上箭头相同? - DasOhmoff San
@DasOhmoffSan 我重新修订并扩展了我的回答,希望对你有所帮助!如果有任何问题不是很清楚,请告诉我。 - filbranden
1个回答

10
CTRL-PCTRL-N按键已经可以实现您想要的功能,它们可以搜索您的命令历史记录。请参见:help c_CTRL-P,其中解释了如何“从历史记录中检索旧的命令行”。 CTRL-PCTRL-N的工作方式与向上和向下箭头略有不同,因为箭头只会遍历以您键入的字符开头的历史记录项。因此,:e、空格、向上箭头将转到您用于打开文件进行编辑的最后一个命令。有关详细信息,请参见:help c_<Up>
您可以重新映射它们,使其与它们的对应项相同,方法是使用cnoremap命令,该命令创建在Vim命令行中键入的按键映射。
例如,要使CTRL-PCTRL-N的行为与箭头相同(完全尊重前缀),您可以使用以下命令创建(有些天真的)映射:
cnoremap <C-P> <Up>
cnoremap <C-N> <Down>
这种方法的缺点是,在wildmenu上CTRL-PCTRL-N的行为不同,因此更完整的映射应该是:

这种方法的短处在于,对于wildmenu来说,CTRL-PCTRL-N的行为不同,因此一个更完整的映射如下:

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接