次のグローバルコマンドを使用して、テキスト内の段落をイニシャルに従って並べ替えたいと思います。
g/_p/,/^$/mo$
これは単独で機能します。しかし、一度に複数のグローバルコマンドを使用すると、エラーが発生します。
g/_p/,/^$/mo$|g/_w/,/^$/mo$
これにより、次のエラーが発生します。
Cannot do :global recursive
これらのコマンドを一度に順番に実行するにはどうすればよいですか?
: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