답변:
Vim의 레지스터를 사용하면 저장된 텍스트에 대해 동작이나 명령을 실행할 수 있습니다. 레지스터에 액세스하려면 "a
명령 앞에 입력하십시오 . 여기서 a
레지스터 이름입니다. 현재 줄을 register에 복사하려면 k
다음을 입력하십시오.
"kyy
또는 대문자를 사용하여 레지스터에 추가 할 수 있습니다
"Kyy
그런 다음 문서를 이동하여 다음을 사용하여 다른 곳에 붙여 넣을 수 있습니다.
"kp
Linux의 시스템 클립 보드에서 붙여 넣기
"+p
Windows의 시스템 클립 보드 또는 Linux의 "mouse highlight"클립 보드에서 붙여 넣기
"*p
현재 정의 된 모든 레지스터 유형에 액세스하려면
:reg
"+
시스템 클립 보드를 참조하는 특수 레지스터이다.
"*
; 따라서 파일 끝까지 복사 명령이됩니다 "*yG
.
*
에서 "마우스 하이라이트"클립 보드이며 +
Ctrl-XCV 클립 보드입니다.
+
있습니까 ( 자본이 없기 때문에 )?
0
레지스터를 발견했을 때 나는 기뻤습니다 . 특정 레지스터에 텍스트를 할당하지 않고 텍스트를 잡아 당기면 0
기본 "
레지스터 에 저장 될뿐만 아니라 레지스터에 할당됩니다 . 0
및 "
레지스터 의 차이점은 0
양각 텍스트로만 채워지는 반면 기본 레지스터는 d
/ D
/ x
/ X
/ c
/ C
/ s
/ S
명령을 사용하여 삭제 된 텍스트로 채워집니다 .
텍스트를 복사하고 삭제하고 복사 한 텍스트로 바꾸려는 경우에 유용합니다. 다음 단계는 예를 보여줍니다.
y[motion]
-이 텍스트는 저장 "
되고 0
등록됩니다d[motion]
-이 텍스트는 "
레지스터에 저장됩니다"0p
"
다음 명령에 레지스터를 사용하는 명령은 어디에 있습니까 ?
마지막 단계에서을 사용하여 기본 레지스터에서 붙여 넣으 p
려면 방금 삭제 한 텍스트 (아마 의도하지 않은 텍스트)가 사용됩니다.
참고 p
또는 P
기본 레지스터에서 붙여 넣습니다. 이에 상응하는 Longhand는 ""p
(또는 ""P
)이고 "0
마지막 yank를 "1
보유하고, 마지막 삭제 또는 변경을 보유합니다.
자세한 내용은을 참조하십시오 :help registers
.
p
또는 P
기본 레지스터에서 붙여 넣기 long과 동등한 값은 ""p
(또는 ""P
)입니다.
"
다음 명령에 레지스터를 사용하는 명령입니다. 그래서 ""p
사용하는 것입니다 "
붙여 넣기 명령에 대한 등록을하고 "0p
사용하는 것 0
레지스터.
0p
현재 행의 첫 문자로 이동하여 기본 레지스터 ( "
) 의 내용에서 붙여 넣기를 의미합니다 . "p
레지스터를 사용할 명령을 지정해야하므로 불완전한 명령이 p
됩니다.
레지스터에서 가장 좋아하는 부분 중 하나는 매크로로 사용하는 것입니다!
탭으로 구분 된 값 파일을 다음과 같이 처리한다고 가정 해 봅시다.
ID Df %Dev Lambda
1 0 0.000000 0.313682
2 1 0.023113 0.304332
3 1 0.044869 0.295261
4 1 0.065347 0.286460
5 1 0.084623 0.277922
6 1 0.102767 0.269638
7 1 0.119845 0.261601
이제 % Dev 필드 끝에 백분율 기호를 추가해야한다고 결정합니다 (두 번째 줄부터 시작). m
다음과 같이 (임의로 선택한) 레지스터 에 간단한 매크로를 만듭니다 .
누릅니다 : qm
: m
등록에서 매크로 기록을 시작합니다 .
EE
: 3 번째 열의 끝으로 이동하십시오.
a
:이 열의 끝에 추가 할 삽입 모드.
%
: 추가 할 퍼센트 부호를 입력하십시오.
<ESC>
: 명령 모드로 돌아갑니다.
j0
: 다음 줄의 시작으로 이동하십시오.
q
: 매크로 기록 중지
이제 @m
현재 줄에서이 매크로를 실행하도록 입력 하면됩니다. 한층 더 @@
반복 해 입력 할 수도 있습니다 100@m
! 인생은 꽤 좋아 보인다.
이 시점에서 " 하지만 대기자는 등록자와 어떤 관계가 있습니까?"
훌륭한 지적입니다. m
를 입력 하여 레지스터 내용에 무엇이 있는지 조사해 봅시다 "mp
. 그런 다음 다음을 얻습니다.
EEa%<ESC>j0
처음에는 실수로 메모장에서 이진 파일을 연 것처럼 보이지만 두 번째로 보면 매크로의 정확한 문자 시퀀스입니다!
당신은 호기심 많은 사람이므로, 흥미로운 것을하고이 텍스트 줄을 편집 !
하여 지루한 것 대신 삽입하십시오 %
.
EEa!<ESC>j0
그런 다음 n
을 입력하여 이것을 레지스터에 넣습니다 B"nyE
. 그런 다음 킥을 위해 ...를 n
사용하여 데이터 라인 에서 매크로를 실행하십시오 @n
.
세상에, A 추가 !
기본적으로 매크로를 실행하는 것은 해당 매크로의 레지스터에서 정확한 키 시퀀스를 누르는 것과 같습니다. 그것이 멋진 등록 트릭이 아니라면 모자를 먹을 것입니다.
+
대신 사용할 수 있습니다 j0
.
다른 유용한 레지스터 :
"*
또는 "+
-시스템 클립 보드의 내용
"/
-마지막 검색 명령
":
-마지막 명령.
vim 매크로를 사용하면 매크로를 기록 할 때 사용되는 키 입력 목록 일 뿐이므로 편집 할 수 있습니다. 따라서 "ap
매크로 a 를 작성 하는 데 사용하는 매크로를 텍스트 파일 에 쓰고 편집 한 다음로 레지스터에로드 할 수 있습니다 "ay$
. 유용한 매크로를 저장하는 좋은 방법입니다.
vim --version
- -clipboard
필요하지 않다는 +clipboard
것을 의미합니다.
"*
그리고 "+
심지어 쿨러는 : "+
마지막으로 복사 한 텍스트 붙여 넣습니다 ctrl+c
(복사 버퍼), 또는 무엇을 적 바로 가기 사용 (또는 right-click>copy
). "*
마우스로 강조 표시된 마지막 텍스트를 붙여 넣습니다 (선택 버퍼). 따라서로 무언가를 복사 ctrl+c
한 다음 마우스로 무언가를 강조 표시 할 경우 붙여 넣을 것을 선택할 수 있습니다. 이 두 레지스터가 동의어 인 Windows에서는 작동하지 않습니다.
"*
하고 "+
년! 나는 gvim만이 시스템 클립 보드에 접근 할 수 있다고 생각했지만 분명히 일반 vim도 그렇게한다!
-xterm_clipboard
에 vim --version
. 설치할 간단한 패키지가 있습니까? (데비안 / apt-get). 감사.
블랙홀 레지스터 _
는 IS /dev/null
레지스터.
기본 레지스터를 업데이트하지 않고 단일 문자를 삭제할 수 있도록 vimrc에서 사용합니다.
noremap x "_x
기본 레지스터를 업데이트하지 않고 시각적 모드로 붙여 넣습니다.
vnoremap p "_dP
x
문자를 바꾸는 데 덜 편리합니다.
x
매핑을 사용하면 더 이상 xp
"명령"을 수행 하여 다음 문자로 전류를 전환 할 수 없습니다 . 오타 수정에 매우 유용합니다. 또한 Xp
이전 문자로 전류를 전환 해야 합니다.
ex-mode 명령에 레지스터 내용을 붙여 넣으려면를 누르십시오 <C-r><registerletter>
.
왜 이것을 사용 하시겠습니까? 검색을하고 긴 문자열을 바꾸고 싶었으므로 시각적 모드에서 선택하고 검색 / 바꾸기 표현식을 입력하기 시작했으며 :%s/[PASTE YANKED PHRASE]//g
하루를 보냈습니다.
ex 모드에서 한 단어 만 붙여 넣으려면 ex 모드로 들어가기 전에 커서가 커서에 있는지 확인한 다음 <C-r><C-w>
ex 모드에서 단어를 붙여 넣으십시오.
:
커맨드 라인에 텍스트를 붙여 넣는 것이 오늘 내가 배운 가장 좋은 것
/[write out your regex]<cr>
나서 바꾸는 것을 좋아 s/<C-R>//replacement/
합니다. 이렇게하면 교체를 실행하기 전에 정규식에 대한 실시간 피드백을 활용할 수 있습니다.
비밀 전문가 레지스터는 표현식 = 레지스터라고 생각합니다. 광고 소재 매핑에 사용할 수 있습니다.
:inoremap \d The current date <c-r>=system("date")<cr>
위와 같이 시스템과 함께 사용하거나 맞춤형 VimL 기능 등으로부터 응답을 얻을 수 있습니다.
또는 그냥 임시 같은 것들
<c-r>=35+7<cr>
vim의 도움말 페이지에서 :
CTRL-R {0-9a-z"%#:-=.} *c_CTRL-R* *c_<C-R>*
Insert the contents of a numbered or named register. Between
typing CTRL-R and the second character '"' will be displayed
<...snip...>
Special registers:
'"' the unnamed register, containing the text of
the last delete or yank
'%' the current file name
'#' the alternate file name
'*' the clipboard contents (X11: primary selection)
'+' the clipboard contents
'/' the last search pattern
':' the last command-line
'-' the last small (less than a line) delete
'.' the last inserted text
*c_CTRL-R_=*
'=' the expression register: you are prompted to
enter an expression (see |expression|)
(doesn't work at the expression prompt; some
things such as changing the buffer or current
window are not allowed to avoid side effects)
When the result is a |List| the items are used
as lines. They can have line breaks inside
too.
When the result is a Float it's automatically
converted to a String.
See |registers| about registers. {not in Vi}
<...snip...>
nmap <F2> @q
사용합니다 . 그러면 F2의 매크로를 재생하기 위해 저장하기 때문에 방금 히트했습니다 qq
. 빠른 매크로 저장 및 재생.
혼동의 큰 원인은 기본 레지스터 "
입니다. 작동 방식을 아는 것이 중요합니다. 대부분의 경우 기본 레지스터를 사용하지 않는 것이 훨씬 좋습니다. Vim 문서의 설명 :
Vim fills this register with text deleted with the "d", "c", "s", "x" commands
or copied with the yank "y" command, regardless of whether or not a specific
register was used (e.g. "xdd). This is like the unnamed register is pointing
to the last used register.
따라서 기본 레지스터는 실제로 마지막으로 사용 된 레지스터에 대한 포인터입니다. 삭제하거나 무언가를 잡아 당기면이 레지스터는 다른 레지스터를 가리 킵니다. 레지스터를 확인하여 테스트 할 수 있습니다. 기본 레지스터와 정확히 동일한 또 다른 레지스터가 있습니다. yank 레지스터 ( "0
), 첫 번째 삭제 레지스터 ( "1
), 작은 삭제 레지스터 ( "-
) 또는 삭제 또는 yank에 사용 된 기타 레지스터.
유일한 예외는 블랙홀 레지스터입니다. Vim doc는 말합니다 :
An exception is the '_' register: "_dd does not store the deleted text in any
register.
: 일반적으로 당신은 훨씬 더 떨어져 직접 사용하여 있습니다 "0
, "-
그리고 "1-"9
기본 레지스터 또는 명명 된 레지스터.
내 친구 브라이언은 이것에 대한 포괄적 인 기사를 썼습니다. 주제를 사용하는 방법에 대한 훌륭한 소개라고 생각합니다. https://www.brianstorti.com/vim-registers/