一連のキーストロークを単語のすべての出現に適用するにはどうすればよいですか?


13

すべての単語を削除したい場合は、次のようなことをするので簡単です。

:s%/WORD//g

しかしxyz、「WORD」のすべての出現に対して実行したい場合はどうなりますか?たとえば、「WORD」を含むすべての行を削除するとします。これを行うにはいくつかの方法が考えられますが、どれも理想的とは思えません。

1)

/WORD

そして、ddnddnddnddn...発生がなくなるまで手動で押します。ただし、これを行う行が多数ある場合、これには時間がかかります。

2)

qd/WORD<enter>ddq

そしてWORDが何回出現するかを推測してから、例えば:

500@d 

しかし、これは、A)行の束を見逃すか、B)余分な行の束を削除します。

これを行うより良い方法はありますか?


3
まさに500@dあなたが説明しているように、実際には安全です。検索語が見つからないと、マクロの再生は停止します。そのため、それを含むすべての行が削除された後、「パターンが見つかりません:WORD」というエラーが表示されます。
ワイルドカード

@Wildcardありがとう、知って本当にうれしいです!
DJMcMayhem

回答:


17

これには:globaland :normalコマンドを使用できます。:globalコマンドの構文は次のとおりです。

:global/{pattern}/{command}

これにより、「パターン」が出現するたびに「コマンド」が実行されます。その後、この:normalコマンドを使用して、を使用して単語が出現するたびに一連のキーストロークを実行でき:globalます。そのようです:

:g/WORD/normal {keystrokes}

これらのキーストロークにのような特別なキーが含まれる場合<Ctrl>:execute次のようなコマンドと組み合わせることができます。

:g/WORD/exe "normal {keystrokes}"

特殊キーが現れるたびにバックスラッシュを置く必要があることに注意してください。

これらのコマンドの詳細については:help :normal、およびを参照してください:help :global


それに私を打ちます。入力が遅すぎたと思います。:)
ワイルドカード

3

完全を期すために、一致する 場合:substitute、-を使用できます-例(WORD を含む全体を削除)-WORDを含む行全体、例えば:

:%s/^.*\<WORD\>.*\n

これには、暗黙的に「何も持たない置換に置換」があります。つまり、次の短い形式です。

:%s/^.*\<WORD\>.*\n//

組み合わせることで\zs\ze\(- \)(グループ化)、および\=(交換部品で)とsubmatch():substitute非常に強力することができます。


2

探しているようです:global

:g/WORD/d_

アンダースコアは何をしますか?
ワイルドカード

これは機能しますが、私が知っているコマンドはどれも機能しません。「エディタコマンドではありません」と表示され続けます。
DJMcMayhem

1
@Wildcard:アンダースコアは、カットされているものを破棄します。実際に実行されるコマンド:deleteは、通常モードの操作ではありませんd
リュックエルミット

@DJMcMayhem:他の通常の操作には、が必要:normalです。そして、あなたは特別なキーが必要な場合、あなたも、必要があるかもしれません:exe- > `EXE「通常aFooFar \ <ESC>」
リュックHermitte
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.