녹화 (예 : 녹화 된 매크로)를보고 편집하려면 어떻게해야합니까?


38

나는 (내 작업을 기록하는 복잡한 반복을 사용하고 qq기록에 일부 작업 , q정지) 내가 실수를했다.

실수를 다시 기록하지 않고 내가 기록한 내용을보고 수정하는 것이 가능합니까?

@q작품 별로 녹음 된 문자를 호출 하지만 맵핑 ( :map q- No mapping found) 에서 볼 수 없습니다 .

다음을 입력하면 도움이되는 정보가 많지 않습니다 : :help recording.

답변:


41

참고 : a이 답변 전체에 레지스터를 사용한다고 가정 하지만 모든 레지스터를 사용할 수 있습니다

주 2 : <1b>이다 Esc; 당신은 이것을 삽입 할 수 있습니다 Ctrl+vEsc. ^[( display설정 에 따라) 로 표시 될 수도 있습니다 .


매핑이 아닙니다. 그래서 이해하게 :map작동하지 않습니다. 레지스터에 기록되며 다른 레지스터처럼보고 편집 할 수 있습니다.

그 모든 q것입니다 않습니다는 "이 등록을 취소하고, 모든 키 입력을 추가" , 그리고 그 모든 @것입니다 않습니다는 "명령으로 레지스터를 평가" .

매크로에 대해 "다른"것은 없으며 모든 레지스터를 매크로로 호출 할 수 있습니다.


하려면 보기 만 사용 :

:echo @a

다른 레지스터처럼.

:registers모든 레지스터를 보는 데 사용할 수도 있습니다 .


편집 하려면 몇 가지 작업을 수행 할 수 있습니다.

에 할당하는 가장 간단한 방법은 다음 @a과 같습니다.

:let @a='iasd<1b>'

삽입 모드 ( i), 삽입 asd및 이스케이프가 일반 모드로 돌아갑니다.

광범위한 편집에는 그다지 유용하지 않습니다. 함수 (예 :)를 사용 substitute()하거나 무언가 ( :let @a=@a . 'more')를 추가 할 수 있지만 중간에서 무언가를 변경하는 것은 쉽지 않습니다.

나는 이것에 대한 가장 좋은 방법은, 함께 새로운 버퍼를 시작하는 것으로 나타났습니다 :split또는 :tabnew다시 복사 한 다음, 거기에 삽입하여 편집에 의해 편집 레지스터를.

"ap버퍼에 텍스트를 삽입하는 것을 사용할 수 있습니다 ( a레지스터는 어디에 있습니까 ).

iThis is A<1b>

이제 줄을 다음과 같이 바꿀 수 있습니다.

iThis is an edited macro<1b>

그런 다음 ^v$"ay이 줄을 a레지스터 에 붙입니다 (복사)합니다 .

  • ^ 줄의 시작을 위해
  • v 시각 모드
  • $ 줄의 끝을 위해
  • "ay 선택을 등록하여 등록 a

원하는 경우으로 시각 모드를 사용하지 않고이 작업을 수행 할 수 있습니다 ^"ay$.

이제 @a원래 녹음 한 것처럼을 사용할 수 있습니다 .

을 사용한 yy다음 조금만 사용할 수도 있습니다 @". 이것은 또한 후행 줄 바꿈을 복사하고 부작용을 일으킬 수 있습니다 ... 이것을 더 빨리 만드는 또 다른 방법은 매크로를 사용하는 것입니다 :-)


2
기록에 줄을 긋는 동작을 Enter기록하는 것은 마치 녹음의 끝을 눌렀을 때와 같이 줄 바꿈 문자를 포함시키는 부작용 이 있습니다. 대부분의 경우 이는 무의미하지만 녹음이 끝날 때 커서 위치를 신중하게 조작 한 시나리오에서는 반복성에 영향을 줄 수 있습니다.
tommcdo

@tommcdo 오른쪽; v줄 바꿈없이 전체 줄을 사용 하고 선택할 수 있습니다 .
Martin Tournoij

@Carpetsmoker " v^$"ay는이 줄을 a레지스터에 붙입니다 (복사) ." 안된다는 ^전과 와서 v, 그리고와는 $여전히 줄 바꿈을 복사하지 않습니다? 나는 그것이해야한다고 생각 : 0v$h"ay(예 고통스럽게 긴!)
joeytwiddle

2
@joeytwiddle 아니, $이동 행의 끝,하지만 줄 바꿈을 포함하지 않습니다. 이 사이의 차이점 0y$yy. 퍼팅 h애프터 것은 $당신이 마지막 문자를 그리워하는 것을 의미한다.
evilsoup

편집 : let @ a = type 명령을보다 쉽게 ​​편집 가능하게 만들 수있는 한 가지 방법은 <Ctrl-f>를 입력하고 관련 행 (편집 할 경우 기본 행인 마지막 행)을 선택하여 편집하는 것입니다. vim을 평소대로 사용하십시오. 행 실행을 마치면 return 키를 누르거나 <Ctrl-c> 키를 눌러 종료하십시오.

9

작업 할 무언가를 얻으려면 ...

qajjjq

a레지스터에 매크로 기록을 시작합니다 .

:reg명령을 사용하여 많은 현재 레지스터 (매크로, yanking, 삭제 등에 사용됨)를 보거나 이름을 제공하여 표시 할 레지스터를 지정할 수 있습니다. 예를 들어 register를 표시하려면 a다음을 수행하십시오.

:reg a

수확량

--- Registers ---
"a   jjj

해당 대문자를 사용하여 기존의 명명 된 레지스터에 추가 할 수 있습니다. 이것은 매크로 기록뿐만 아니라 yanking에도 효과적입니다. 예를 들면 다음과 같습니다.

qAkkkq
:reg a

수확량

--- Registers ---
"a   jjjkkk

let 구문을 사용하여 기존 매크로를 편집하려면 다음을 수행하십시오.

let @a='<C-r>a'

어느 것으로 확장

let @a='jjjkkk'

그런 다음 개별 키 입력을 변경할 수 있습니다.

당신이 사용할 수있는 참고 <C-r>명령 줄 모드로 모든 레지스터에서 (즉, 컨트롤 + R)을 붙여 넣기를 (또는 삽입 모드에서, 그 문제에 대한).

또한 명령 줄 모드에있을 때이 명령을 입력 <C-f>하면 명령 줄 창이 나타나서 명령이 실행 된 과거 명령을 보거나 편집 할 수 있으며 현재 명령을 호출하기 전에 편집 할 수 있습니다. 제출하려는 명령에서 Enter를 누르십시오.

이것의 장점은이 버퍼 내에서 일반적인 이동 / 대체 명령을 사용하여 매크로를 편집 할 수 있다는 것입니다. 예를 들면 다음과 같습니다.

let @a='<C-r>a'<C-f>

제기 할 것이다 :

:118 reg
:119 reg a
:120 let @a='jjjkkk'

명령 120을 사용하는 경우 다음을 수행 할 수 있습니다.

s/kkk/}
<return>
:reg a

수확량

--- Registers ---
"a   jjj}

물론 레지스터의 내용을 버퍼에 붙여 넣을 수 있습니다. 그러나 작업 버퍼를 오염시키지 않고 필요한 모든 것을 할 수 있습니다.

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