我希望在vi中实现以下功能:
关于上述要求我有以下命令
:%s/new page //g
删除前两列。
:g/abc/d
,:g/xyz/d
,:g/ddd/d
删除以特定字词开头的行
:%s/ .*//g
删除第一个单词后的所有内容。
总的来说,我想运行以下命令:
:%s/new page //g
:g/abc/d
:g/xyz/d
:g/ddd/d
:%s/ .*//g
如何在一个命令中执行上述所有命令。
我尝试了|
,但没有效果。
:g/abc/d|:g/xyz/d|:g/ddd/d
我收到以下错误:
E147: Cannot do :global recursive
我怎样才能做到这一点。我想在一个命令中执行所有命令。
由于
答案 0 :(得分:4)
您可以将所有这些命令放在一个函数中:
function! AllMyCommands()
%s/new page //g
g/abc/d
g/xyz/d
g/ddd/d
%s/ .*//g
endfunction
直接调用它:
:call AllMyCommands()
或通过自定义命令:
command! Foo call AllMyCommands()
:Foo
或通过自定义映射:
nnoremap <key> :<C-u>call AllMyCommands()<CR>
<key>
答案 1 :(得分:2)
我试过了|但它没有用。
<div id="main"> <div>A</div> <div>B</div> <div>C</div> <div>D</div> <div>E</div> <div>F</div> </div>
通常,命令可以按顺序执行,由:g/abc/d|:g/xyz/d|:g/ddd/d
分隔,但有例外,如|
所示:
:help :bar
作为一种解决方法,您可以将它们包装在These commands see the '|' as their argument, and can therefore not be
followed by another Vim command:
[...]
:global
[...]
:
:execute
但按照@ romainl的回答将它们放入:exe 'g/abc/d'|exe 'g/xyz/d'|g/ddd/d
可能更好。