버퍼 끝까지 vim 매크로 재생


85

내가 방금 레지스터 " x"에 기록한 매크로 를 내 커서에서 버퍼의 끝까지, vim에서 열린 버퍼의 모든 단일 행 에서 실행하고 싶습니다 . 어떻게하나요?

매크로를 n 번 재생할 수 있다는 것을 알고 있습니다.

15@x

... 또는 @마지막 줄에 도달 할 때까지 계속 누르고 있지만 몇 번의 키 입력 만 누르면 끝납니다.

미리 감사드립니다.


15 윈도우 GVIM에서 작동하지 않는 X @
Mingjiang시

답변:


101

개인적으로 나는 할 것이다

VG:normal @x

편집 : 레지스터를 지정한 것으로 변경했습니다.


멋지네요. 이 솔루션은 선택한 영역에서만 작동하는 것이 좋습니다.
Kevin

나는 이것을 nnoremap <C-@> VG : norm @ q <CR>에 매핑했습니다
PAS

매크로 "1z =] s"로 시도했지만 각 줄의 첫 단어 만 철자 수정하고 나머지는 건너 뜁니다.
elig

@elig 모든 줄에서 누락 된 단어를 찾을 수있는 재귀 매크로를 만들고 싶을 것입니다.
raman

67

할 수 있습니다 (명령 모드에서)

:%normal @x

나는이 솔루션을 좋아하지만 버퍼의 모든 줄에서 매크로를 실행하고 OP는 커서에서 끝까지 만 요청했습니다.
Porunga

24

재귀 매크로 만들기 :

qa@aq

전의:

qa0gUwj@aq

단일 @a를 사용하여 현재 줄에서 파일 끝까지 첫 단어를 UPCASE합니다. 그러나 "레지스터가 비어 있는지 확인하십시오.

let @a=""

3
우수한. 이 접근 방식은 %:normal매크로 내의 모든 선 이동을 존중 하므로 접근 방식 보다 더 유용 하므로 선이 형태가 동일하지 않은 경우 유용합니다. 매크로 'a'를 만들어 동작을 정의한 다음 매크로 'b'가 재귀 비트 (예 : qb @ a @ bq)를 수행하도록하는 것이 더 쉽습니다.
폴 Ruane

3
매크로에 검색이 포함 된 경우에는이 방법을 사용하지 마십시오. ctrl-c그런 일이 발생하면 중지하십시오!
Iain Ballard 2014

3
@IainBallard, :set nowrapscan파일 끝에 도달하면 실패하고 중지합니다.
ericbn

1
레지스터 a를 지우 qaq려면 매크로 전에 수행 하십시오 qaqqa0gUwj@aq.. 또한 @q끝에 를 넣는 것을 잊은 경우 언제든지 qA레지스터 추가를 시작한 다음 @q. 쉽기 때문에 (재귀 매크로의 경우 특히) 일반적 qqqqqgUiwj@qq으로 두 개의 매크로 대신 수행하기 때문에 어떤 이유로 든 reg q에 기록 합니다. 처음 세 q초는 reg q를 지우고 두 번째 두 q초는 녹음을 시작합니다. 참조 vim.wikia.com/wiki/Record_a_recursive_macro
dylnmc

나는 맑은 생각 a간단하게 입력 할 수 있습니다 레지스터 일qaq
피터 Perháč

11

999999@x, 매우 큰 버퍼가없는 경우 ...


6
%:normal @x아니면 1,$:normal @x?
Nathan Fellman

3
이것은 확실히 더 우아한 해결책입니다-나는 99999@x당신이
Peter

2
9999999 @ x는 정확히 999999 줄이 없으면 마지막 줄에서 여러 번 실행하지 않습니까?
David Oneill

2
방금 시도했습니다. 세션을 중단합니다. 아마도 라인의 끝에서 멈추지 않고 백만 번 계속 실행할 것입니다.
CDR '

1
적어도 어떤 경우에는 예상대로 작동하지 않습니다. find next / find prev 가있는 매크로를 고려하십시오 . 따라서 매크로 반복이 파일 끝에 도달하면 처음부터 계속됩니다. 주제에 대한 vim 문서 . 검색 줄 바꿈을 방지하려면 : set nowrapscan 을 사용할 수 있습니다 . 이것은 제가 생각해 낼 수있는 예이지만 더 이상 존재하지 않는다는 의미는 아닙니다. : % normal @x 는 위의 답변에서 @ryan_s가 제안한대로 이동하는 방법입니다.
Sergey Markelov 2013 년

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