9

次のグローバルコマンドを使用して、テキスト内の段落をイニシャルに従って並べ替えたいと思います。

g/_p/,/^$/mo$

これは単独で機能します。しかし、一度に複数のグローバルコマンドを使用すると、エラーが発生します。

g/_p/,/^$/mo$|g/_w/,/^$/mo$

これにより、次のエラーが発生します。

Cannot do :global recursive

これらのコマンドを一度に順番に実行するにはどうすればよいですか?

4

1 に答える 1

9
:exe 'g/_p/,/^$/mo$' | g/_w/,/^$/mo$

さらにglobalコマンドを追加するには、コマンドを次のようにラップし続けますexecute

:execute 'g/aaa/s//bbb/g ' | execute 'g/ccc/s/ddd//g' | execute 'g/eee/s/fff/ggg/g' | g/^cake/s/$/ is a lie/g

エラーの理由は次の:help:barとおりです。

*:bar* *:\bar* |コマンドを区切るために使用できるため、1行に複数のコマンドを指定できます。引数で使用する場合|は、その前に。を付け\ます。

これらのコマンドは|を引数と見なすため、別のVimコマンドを続けることはできません。

  • (..コマンドのリスト..)
  • :global
  • (..コマンドのリスト..)

これは紛らわしいことに注意してください(Viから継承):コマンドに含まれている:gのは含まれていますが、含まれていません。|:s

とにかく別のコマンドを使用できるようにするには、:execute コマンドを使用します。

これは、以下のチェーンが問題なく機能する理由にも答えます。

%s/htm/html/c | %s/JPEG/jpg/c | %s/GIF/gif/c
于 2012-03-17T15:28:33.550 に答える