vim에서 CTRL-A 또는 CTRL-X를 사용하여 레지스터를 사용하는 방법


1

등록 번호가 있다고 가정하십시오. r.

이 값을 어떻게 사용합니까? CTRL 에이 CTRL 엑스

다음은 명확하게 설명하는 예제입니다.

이 텍스트 파일이 있다고 가정합니다.

10
13
15

나는 그 숫자를 등록에있는 값으로 늘리고 싶다. r 얻기 위해 (5 포함되어있는 경우)

15
18
20

내가 왜 묻는거야? 내가 사용하기를 원하기 때문에 CTRL 에이 매크로로 적용해야하지만 적용해야하는 시간 CTRL 에이 "실행 시간"에서만 알 수 있습니다.

좀 더 일반적인 방법으로 레지스터에 여러 번 명령을 저장할 수 있습니까?

이 질문과 대답은 모두 흥미롭지 만 내 질문에는 대답하지 않습니다.
https://stackoverflow.com/questions/1497958/how-to-use-vim-registers
https://stackoverflow.com/questions/2405952/vim-register-use-in-ex-mode

답변:


4

다음과 같은 매핑을 만들 수 있습니다.

noremap <Leader><C-A> :<C-U>execute 'normal!' str2nr(getreg('r')) . '<C-A>'<CR>

지도 \ 컨트롤 -A ( <Leader> 기본값은 \ , 보아라. :help leader ) 평소와 달리 컨트롤 -A 에서 지정된 횟수 r 레지스터. 이 옵션을 사용하여 기본값을 다시 바인딩 할 수도 있습니다. 컨트롤 -A (떠나지 마라. <Leader> ),하지만 나중에 매핑을 잊어 버리면 나중에 혼동을 일으킬 수있는 것처럼 보입니다.

r 등록 내용 5, 그것은 다음과 같이 작동합니다 (이중 따옴표 표기법으로 전환하면 표현할 수 없으므로 컨트롤 -A 작은 따옴표로 묶인 문자열 리터럴에서) :

그만큼 getreg()str2nr() 함수가 평가되고이 Ex 명령이 발생합니다.

:execute 'normal!' 5 . "\<C-A>"

다른 Ex 명령이 결과 :

:normal! "5\<C-A>"

그러면 정상 모드 명령이 실행됩니다.

5 컨트롤 -A

평소보다 전에 접두사 수를 사용합니다. 컨트롤 -A (매핑되지 않음. ! ...에서 :normal! ).

이 버전은 항상 r 레지스터; 접두사가 붙은 카운트를 명시 적으로 무시합니다 (평소와 달리 컨트롤 -A ). 대체 구현이 가능합니다 (예 : 접두사가있는 숫자가 r 등록)하지만 조금 더 복잡 할 것입니다.


매핑을 사용하는 대신 매크로에 직접 명령을 넣을 수도 있습니다.

qq ... : 'normal!'을 실행하십시오. str2nr (getreg ( 'r')). ' 컨트롤 -A ' 반환 ...

실제 입력해야합니다. 컨트롤 -A 반환 대신에 <> 이는 Vim이 자동으로 번역을 수행하는 매핑의 일부가 아니기 때문에 가능합니다. 또한, 컨트롤 - U 초기 값 앞에 가능한 접두사 수를 방지하기 위해 존재 했으므로 삭제되었습니다. : (매크로 내용 자체에서이를 방지 할 수 있습니다).


당신의 대답은 수천 표를 얻는다는 것을 알고 있습니다.
Luc M
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.