나는 (내 작업을 기록하는 복잡한 반복을 사용하고 qq기록에 일부 작업 , q정지) 내가 실수를했다.
실수를 다시 기록하지 않고 내가 기록한 내용을보고 수정하는 것이 가능합니까?
@q작품 별로 녹음 된 문자를 호출 하지만 맵핑 ( :map q- No mapping found
) 에서 볼 수 없습니다 .
다음을 입력하면 도움이되는 정보가 많지 않습니다 : :help recording
.
나는 (내 작업을 기록하는 복잡한 반복을 사용하고 qq기록에 일부 작업 , q정지) 내가 실수를했다.
실수를 다시 기록하지 않고 내가 기록한 내용을보고 수정하는 것이 가능합니까?
@q작품 별로 녹음 된 문자를 호출 하지만 맵핑 ( :map q- No mapping found
) 에서 볼 수 없습니다 .
다음을 입력하면 도움이되는 정보가 많지 않습니다 : :help recording
.
답변:
참고 : a
이 답변 전체에 레지스터를 사용한다고 가정 하지만 모든 레지스터를 사용할 수 있습니다
주 2 : <1b>
이다 Esc; 당신은 이것을 삽입 할 수 있습니다 Ctrl+v후 Esc. ^[
( 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
레지스터 에 붙입니다 (복사)합니다 .
a
원하는 경우으로 시각 모드를 사용하지 않고이 작업을 수행 할 수 있습니다 ^"ay$.
이제 @a원래 녹음 한 것처럼을 사용할 수 있습니다 .
을 사용한 yy다음 조금만 사용할 수도 있습니다 @". 이것은 또한 후행 줄 바꿈을 복사하고 부작용을 일으킬 수 있습니다 ... 이것을 더 빨리 만드는 또 다른 방법은 매크로를 사용하는 것입니다 :-)
v
줄 바꿈없이 전체 줄을 사용 하고 선택할 수 있습니다 .
v^$"ay
는이 줄을 a
레지스터에 붙입니다 (복사) ." 안된다는 ^
전과 와서 v
, 그리고와는 $
여전히 줄 바꿈을 복사하지 않습니다? 나는 그것이해야한다고 생각 : 0v$h"ay
(예 고통스럽게 긴!)
$
이동 에 행의 끝,하지만 줄 바꿈을 포함하지 않습니다. 이 사이의 차이점 0y$
과 yy
. 퍼팅 h
애프터 것은 $
당신이 마지막 문자를 그리워하는 것을 의미한다.
작업 할 무언가를 얻으려면 ...
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}
물론 레지스터의 내용을 버퍼에 붙여 넣을 수 있습니다. 그러나 작업 버퍼를 오염시키지 않고 필요한 모든 것을 할 수 있습니다.
Enter
기록하는 것은 마치 녹음의 끝을 눌렀을 때와 같이 줄 바꿈 문자를 포함시키는 부작용 이 있습니다. 대부분의 경우 이는 무의미하지만 녹음이 끝날 때 커서 위치를 신중하게 조작 한 시나리오에서는 반복성에 영향을 줄 수 있습니다.