我经常发现自己在开发时做这样的事情:
:e <file>
:vsplit <the_same_file> "reopen/re-edit with a vertical split
正如一些回复者所指出的,有一个更好的方法来做到这一点::vs<CR>
.暂时假设没有。
如果我在我的 shell 中打开文件,我会使用 !$
历史扩展以捕获上一个命令的最后一个参数,如下所示:
$ echo "Hello" "stackoverflow"
Hello stackoverflow
$ echo "I'm posting on !$"
I'm posting on stackoverflow
这个扩展,和many others like it,完全重新定义了我使用命令行的方式。 vim 中有等效项吗?我知道%
别名当前文件。过去的命令参数呢?
最佳答案
据我所知,Vim 没有历史扩展。
然后自然而然的事情就是使用 Vim 在命令行上为我们提供的工具。我们有选择!
-
<Up>
箭头过滤 - 命令行编辑命令
-
CTRL-W
向后删除一个单词 -
<Left>
和<Right>
四处走动,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
当然,如果您真的决定走这条路,请对更复杂的表达式使用函数。
关于bash - 有没有等同于 bash 的 '!$' 的 vim?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18494837/