모든 단어에 키 스트로크를 적용하려면 어떻게해야합니까?


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 감사합니다, 정말 알아두면 좋습니다!
James

답변:


17

이를 위해 :global:normal명령을 사용할 수 있습니다 . 이 :global명령에는 다음과 같은 구문이 있습니다.

:global/{pattern}/{command}

"pattern"이 발생할 때마다 "command"가 실행됩니다. 그런 다음 :normal명령을 사용 하여을 사용하여 단어가 나타날 때 마다 일련의 키 입력을 실행할 수 있습니다 :global. 이렇게 :

:g/WORD/normal {keystrokes}

해당 키 입력에 특수 키가 포함 된 경우 <Ctrl>다음과 같이 :execute명령과 결합 할 수 있습니다 .

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

특수 키가 나타날 때마다 백 슬래시를 넣어야합니다.

이 명령에 대한 자세한 내용을 참조 :help :normal하고 :help :global.


나를 이길; 너무 느리게 입력 한 것 같습니다. :)
와일드 카드

3

그냥 완성도를 들어, 당신은 할 수 사용 :substitute당신이 일치하는 경우, - 귀하의 예제에서 (WORD이있는 줄 전체 삭제) - 전체 라인 단어를 포함을, 예를 들면 :

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

이것은 암시적인 "아무 것과도 일치하지 않음"을가집니다. 즉, 더 짧은 형식입니다.

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

결합 \zs, \ze, \(- \), 및 (그룹화) \=와 (교체 부분은) submatch(), :substitute매우 강력한 될 수 있습니다.


2

당신이 찾고있는 것 같습니다 :global.

:g/WORD/d_

밑줄은 무엇을합니까?
와일드 카드

이것은 작동하지만 내가 아는 명령은 작동하지 않습니다. "편집기 명령이 아님"이 계속 표시됩니다.
James

1
@Wildcard : 밑줄은 잘라 내고있는 것을 버립니다. 실행 된 명령은 실제로 :delete는 정상 모드 작동이 아닙니다 d.
Luc Hermitte

@DJMcMayhem : 다른 정상적인 작업을 위해서는 :normal. 그리고 특별한 키가 필요하다면 :exe->`exe "normal aFooFar \ <esc>"
Luc Hermitte
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.