据我所知,Vim没有历史扩展功能。因此,我们可以在命令行上使用Vim提供的工具,有多种选项可供选择:
- 使用“向上箭头”过滤。
- 命令行编辑命令:使用“CTRL-W”删除一个单词,使用“左箭头”和“右箭头”移动光标,使用“CTRL-B”和“CTRL-E”移动到行首/行尾。
- 使用命令行窗口“q:”(或者在命令行上按下“CTRL-F”)进行历史记录编辑。
- 找到与特定问题相适应的Vim风格的习惯用法解决方案,例如自动扩展的标记(如“%”和“#”)。
但是,如果您真的想要Bash风格的历史扩展,您可以使用命令行“<expr>”缩写轻松地实现一些简单的情况。我最常用的历史扩展项目(实际上并不经常使用)包括:
- “!!”,最近的命令行。
- “!-2”,倒数第二个命令行。
- “!*”,前一个命令行除了第一个参数之外的所有参数。
- “!$”,前一个命令行的最后一个参数。
以下是如何将它们实现为表达式缩写的方法:
cnoreabbr <expr> !! getcmdtype() == ':' ? @: : '!*'
cnoreabbr <expr> !-2 getcmdtype() == ':' ? histget(':', -2) : '!-2'
cnoreabbr <expr> !* getcmdtype() == ':' ? join(split(@:,'\s\+')[1:], ' ') : '!*'
cnoreabbr <expr> !$ getcmdtype() == ':' ? split(@:,'\s\+')[-1] : '!$'
以下是在Vim中如何使用您的示例:
:echo "Hello Stackoverflow"
Hello Stackoverflow
:echo "I'm posting on !$<Enter>
I'm posting on Stackoverflow
当然,如果你真的决定走这条路,对于更复杂的表达式,使用函数会更加合适。
!$
的东西。但是你可能会对使用q:
感兴趣,它可以打开命令行窗口。命令行窗口显示您最后一些命令的历史记录,并允许用户使用普通的vim命令对命令进行编辑。有关更多信息,请参见:h cmdwin
。 - Peter Rincker!$
可以更短:<alt-.>
。同时,如果您想在vim中实现问题开头的操作,在使用:e file
打开文件后,可以按<c-w>v
或<c-w><c-v>
,后者更容易按。 - Kent:e %
和:e #
命令来重新编辑当前文件和上一个文件 — 这对你有帮助吗? - Jonathan Leffler:vs<CR>
),也许你能用实际例子帮助我们理解你所需要的。 - romainl