중첩 매크로를 어떻게 기록 할 수 있습니까?


11

매크로 내에 매크로를 다음과 같이 기록하고 싶습니다.

qa
    [ first macro ... ]
    qb
        [ second macro ... ]
    q
    [ some more stuff, involving @b ... ]
q

그러나 두 번째 q는 첫 번째 매크로 중지 요청으로 해석되고 나머지는 명령으로 해석됩니다.

매크로 내에서 두 번째 매크로 기록을 시작할 수있는 방법이 있습니까?

그렇지 않은 경우 이미 매크로 내부에있는 동안 특정 키 스트로크 시퀀스를 반복하여 원하는 효과를 얻을 수있는 다른 방법이 있습니까?


1
먼저 매크로 b를 기록한 다음 매크로 a호출 을 기록 할 수 @b없습니까?
statox

@statox 문제는 b파괴적인 영향을 미치기 때문에 먼저 기록 할 수 없다는 것입니다 (기록하지 않으려면 u여러 번 누른 다음 기록 시작하십시오 a).
Doorknob

1
나는 그것이 최선의 해결책이라고 생각합니다. 매크로에 다른 내용을 파일에 기록한 다음을 사용하여 레지스터에 "레코딩" 하여 다른 버퍼 ( enew, 레코딩 bd)에 기록 하거나 b레지스터를 직접 편집 할 수도 있습니다 "by.
statox

답변:


10

AFAIK, qx...q한 번에 두 개의 매크로를 기록 할 수 없습니다 . 귀하의 요구를 들어, 매크로 만들 필요 b로를 qb....q다음 qa...@bq.

당신이 "레코드"를하지 않으려면 b당신이 할 수있는 let @b='whatever'다음 @b매크로를 재생합니다. 예를 들어 "레코딩"없이 현재 버퍼의 모든 내용을 제거 let @b='ggdG'하는 매크로 b를 정의 하십시오.

질문과 관련이없는 매크로 정의 트릭이 있습니다. 중첩 매크로가 아닌 재귀 매크로입니다. 즉, 당신은 할 수 있습니다 :

qa..whatever..@aq

매크로를 재귀 적으로 재생합니다 a. 매크로를 몇 번이나 재생할지 모를 때 유용합니다. 오류가 발생하면 매크로 재생이 자동으로 중지됩니다. 999@a예를 들어 저장 합니다.


1

매크로 @a에 키 입력을 기록하는 것은 키 입력에 해당하는 텍스트를 등록하여 a를 등록하는 것과 같습니다. 일단 레지스터에 무언가가 저장되면, 그것을 넣거나 매크로 / 키 스트로크로 재생할 수 있습니다. 따라서 @a를 통해 매크로 기록을 시작한 qa다음 매크로가 기록되는 동안 b를 등록 할 텍스트를 잡아 당겨서 아마도 같은 것을 사용합니다 "bye. 레지스터 b를 지정하지 않은 경우와 다른 레지스터로 텍스트를 가져옵니다. 레지스터 b에 일부 텍스트가 있으므로을 눌러 해당 텍스트를 키스 토크로 재생할 수 있습니다 @b. 매크로 @a가 여전히 기록되는 동안에도 그렇게 할 수 있습니다. 메타 매크로입니다!

이것의 주요 단점은 아마도 원하는 것을 수행하는 vimscript 함수를 작성하고 매크로 기록 중에 호출하는 것이 더 쉽다는 것입니다. 매크로의 장점은 기록하는 동안 기록중인 효과를 볼 수 있다는 것입니다. 그러나이 메타 매크로 기록 기술은이를 다소 제거합니다.

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