有没有相当于bash的'!'的vim?
我经常发现自己在开发时正在做这样的事情:
:e <file>
:vsplit <the_same_file> "reopen/re-edit with a vertical split
正如一些响应者指出的那样,有一个更好的方法来做到这一点:vs<CR>
。 假设暂时没有。
如果我在shell中打开文件,我会使用!$
history扩展捕获前一个命令的最后一个参数,如下所示:
$ echo "Hello" "stackoverflow"
Hello stackoverflow
$ echo "I'm posting on !$"
I'm posting on stackoverflow
这种扩展以及其他许多类似的扩展完全重新定义了我使用命令行的方式。 在vim中有等价物吗? 我知道%
别名当前文件。 过去的命令参数呢?
据我所知,Vim没有历史扩张。
那么自然要做的就是使用Vim在命令行中给我们的工具。 我们有选择!
<Up>
箭头过滤 CTRL-W
向后删除一个单词 <Left>
和<Right>
左右移动, CTRL-B
和CTRL-E
移动到行首或行尾 q:
或者在命令行上已经存在的CTRL-F
) 来获得最终的历史编辑能力 %
和#
这样的自动扩展令牌就是一个很好的例子 然而,如果你真的想要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
当然,如果你真的决定走这条路线,可以使用更复杂表达式的函数。
使用:vsp
不带参数的:vsp
分割当前窗口。
不完全是你要求的,但我经常使用%
,这是当前文件名:
:e some_file
:vsp %
请参阅:help cmdline-special
VIM技巧中最杰出的指出了历史重复的一个特定领域,即替代:
" Summary of editing repeats [N]
. last edit (magic dot)
:& last substitute
:%& last substitute every line
:%&gic last substitute every line confirm
g% normal mode repeat last substitute
g& last substitute on all lines
@@ last recording
@: last command-mode command
:!! last :! command
:~ last substitute
:help repeating
链接地址: http://www.djcxy.com/p/73977.html
上一篇: Is there a vim equivalent to bash's '!$'?
下一篇: Is it support Application cache in multiple server in asp.net(C#)?