Vim에서 매크로를 한 줄에 어떻게 적용합니까?


222

줄이 많은 파일이 있습니다. 한 줄에서 작업을 수행하는 매크로를 기록했습니다. 파일의 나머지 모든 줄에서 해당 매크로를 반복하고 싶습니다. 이 작업을 수행하는 빠른 방법이 있습니까?

Ctrl + Q를 시도하고 일련의 줄을 강조 표시하고 @@를 눌렀지만 트릭을 수행하지 않는 것 같습니다.


주 제외 질문 : VIM 매크로를 알지 못했습니다 (또는 알고 싶지 않았습니다.
OscarRyz

물론,이 : oreillynet.com/mac/blog/2006/07/...은 꽤 잘 총액 그것을.
Jordan Parmer

당신은 또한 확인할 수 있습니다 : 그는 vim 내부에서 복합 반복
Sam

답변:


354

Ex 모드에서 일반 명령을 사용하여 여러 줄 / 모든 줄에서 매크로를 실행하십시오.

라인 5에서 10까지 레지스터 a 에 저장된 매크로를 실행합니다 .

:5,10norm! @a

파일 끝을 통해 5 행의 레지스터 a 에 저장된 매크로를 실행 하십시오.

:5,$norm! @a

레지스터 a 에 저장된 매크로 를 모든 행 에서 실행하십시오 .

:%norm! @a

모든 라인 일치 패턴 에 대해 레지스터 a 에서 매크로 저장소를 실행하십시오 .

:g/pattern/norm! @a

시각적으로 선택된 라인에서 매크로를 실행하려면 원하는 영역이 선택 될 때까지 Vj 또는 k를 누릅니다 . 그런 :norm! @a다음 다음 입력 라인이 표시되고 관찰하십시오.

:'<,'>norm! @a

vim에서 : help normal 을 입력 하면 자세한 내용을 볼 수 있습니다.


1
예, : vim 또는 방금 추가 한 링크에서 정상적으로 도움이됩니다.
Maygarden 판사

1
동료가 아닌 다른 사용자를 도울 수있는 모든 것!
Maygarden 판사

48
좋은!! 초보자 팁 : V를 누른 다음 j / k를 사용하여 원하는 줄을 강조 표시 한 다음 입력하십시오.:norm! @a
Kevin Bourrillion

7
@KevinBourrillion의 유용한 팁을 추가하기 위해 :행을 강조 표시 한 후을 누르면 Ex 입력 행이 읽히고 :'<,'>Kevin이 제안한 나머지 부분을 추가합니다. 최종 명령은 다음과 같습니다 :'<,'>norm! @a..
Deiwin

3
@GabeMoothart !사용자가 키를 다시 매핑하지 않도록합니다. 필요하지는 않지만 모든 사람에게 적합한 답변이 필요합니다.
Maygarden 판사

60

global 을 사용 하여 'pattern'을 포함하는 모든 행에서 매크로 'a'를 실행하십시오.

:g/pattern/normal! @a

도움이 필요하면 다음을 확인하십시오 :help global..


4
미래의 사용자를 명확히하기 위해 : 이것은 전 세계 Ex 명령입니다.
atp

39

당신은 또한 이것을 할 수 있습니다 :

일반 모드에서 :

[number of times to apply the macro] @ [register]

예를 들면 다음과 같습니다.

1000@q

레지스터 q의 매크로를 다음 1000 행에 적용합니다.

업데이트 : 허용 된 답변 이 훨씬 낫습니다.

업데이트 : @ kevinliu가 지적했듯이 매크로를 끝내고 j다음 줄로 가길 원할 것 입니다.


4
이것은 마지막 줄에서 멈추고 마지막 줄에서 여러 번 실행되지 않습니다.
Hubro

@Hubro, 다른 사용자의 이러한 대답은 나를 위해 일한 : :%norm! @avGG :norm! @a
최대 Heiber을

2
어떤 이유로 든 이것은 훌륭하게 작동했으며 받아 들인 대답은 효과가 없었습니다. 내 매크로에는 새 줄 삽입, 작업 수행 및 다음 줄 이동이 포함되었습니다.
jasonszhao

@jasonszhao 네, 여기 동일합니다. 그러나 어쨌든 1000을 말하지 않고 모든 줄이 끝날 때까지 .. 그리고 여전히 새로운 줄을 돌보고, 일을하는 등.
ihightower

2
매크로가 j다음 줄로 내려가는 명령으로 끝나야한다고 지적해야합니다. 그렇지 않으면 동일한 줄에 적용하려고 시도합니다.
케빈 리우

2

RangeMacro라는 플러그인도 있으며 원하는 것을 정확하게 수행합니다! 이름으로 추측 할 수없는 모든 사람이하는 것 : 시각적 선택 또는 : 40,50 / : +10에 상관없이 주어진 범위의 각 줄에 대해 기록 된 매크로를 반복합니다.

참조 http://www.vim.org/scripts/script.php?script_id=3271를

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.