Vi 一行中的多个命令

Shi*_*ppa 4 vi vim

我想在 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

我怎样才能做到这一点。我想在一个命令中执行所有命令。

谢谢

rom*_*inl 5

您可以将所有这些命令放在一个函数中:

function! AllMyCommands()
    %s/new  page   //g
    g/abc/d
    g/xyz/d
    g/ddd/d
    %s/ .*//g
endfunction
Run Code Online (Sandbox Code Playgroud)

并直接调用它:

:call AllMyCommands()
Run Code Online (Sandbox Code Playgroud)

或通过自定义命令:

command! Foo call AllMyCommands()
:Foo
Run Code Online (Sandbox Code Playgroud)

或通过自定义映射:

nnoremap <key> :<C-u>call AllMyCommands()<CR>
<key>
Run Code Online (Sandbox Code Playgroud)