2017-05-24 48 views
1

我想達到下列事項六:六多個命令在一行

  • 刪除前幾列
  • 刪除開始與特定的詞
  • 第一個字後刪除所有行。

我具有相對於下面的命令來上述要求

:%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

我怎樣才能做到這一點。我想在一個命令中執行所有命令。

感謝

+1

您不能在':g'之後添加其他命令。 –

回答

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 

或v IA自定義映射:

nnoremap <key> :<C-u>call AllMyCommands()<CR> 
<key> 
2

我已經試過|但它沒有奏效。

: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

:exe 'g/abc/d'|exe 'g/xyz/d'|g/ddd/d 

但根據@ romainl的回答,將它們放入:function可能會更好。