vim 레지스터는 어떻게 사용합니까?




vim register (13)

난 단지 하나의 인스턴스를 사용하여 레지스터를 사용하여 Ctrl 키를 * 함으로써 나는 클립 보드에서 텍스트를 붙여 넣습니다.

레지스터의 다른 용도는 무엇입니까? 어떻게 사용합니까?

VI 레지스터에 대해 알고있는 모든 것 (vi 7.2에 집중) - 우리와 공유하십시오.


Vim에있는 레지스터는 그 안에 저장된 텍스트에 대해 액션이나 명령을 실행할 수있게합니다. 레지스터에 액세스하려면 명령 앞에 a를 입력합니다. 여기서 a 는 레지스터의 이름이고, 현재 줄을 레지스터 k 에 복사하려면 다음을 입력합니다.

"케이

또는 대문자를 사용하여 레지스터에 추가 할 수 있습니다.

"키예프

그런 다음 문서를 이동하여 다음 위치에서 다른 곳에 붙여 넣을 수 있습니다.

"kp

Linux의 시스템 클립 보드에서 붙여 넣기

"+ p

Windows의 시스템 클립 보드 (또는 Linux의 "마우스 강조 표시"클립 보드)에서 붙여 넣으려면

"*피

현재 정의 된 모든 레지스터 유형에 액세스하려면

: reg


큰 혼란의 원천은 기본 레지스터입니다. " 그것이 작동하는 방식을 아는 것이 중요합니다. 기본 레지스터가 대부분 피할 수 있다면 훨씬 더 좋습니다 .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 ), 작은 삭제 레지스터 ( "- ) 또는 삭제 또는 제거에 사용 된 다른 레지스터는 항상 기본 레지스터와 완전히 다른 레지스터가 항상 있습니다 .

유일한 예외는 블랙홀 레지스터입니다. 빔 의사는 말한다 :

An exception is the '_' register: "_dd does not store the deleted text in any
register.

일반적으로 "0 "-"1-"9 기본 레지스터 또는 명명 된 레지스터를 직접 사용하면 훨씬 편리합니다.


마우스를 사용하지 않고도 vim 창에서 텍스트를 grep하기 위해 기본 레지스터를 사용합니다.

  1. 텍스트를 모욕하다
  2. :!grep "<CTRL-R>0"<CR>

한 가지 간과 된 기록은 '.' 마지막으로 삽입 된 텍스트를 포함하는 도트 레지스터. 예 : ct] (변경까지). 그런 다음 다른 위치에 삽입해야하지만 점 반복 방식을 사용할 수 없다는 것을 알게됩니다.

 :reg .
 :%s/fred/<C-R>./

  • q5는 레지스터 5로 편집합니다 (다음 q는 레코딩을 중지합니다)
  • : reg 모든 레지스터와 그 안에있는 모든 내용을 보여줍니다.
  • @ 5 레지스터 5 매크로 실행 (기록 된 편집)


멋진 트릭은 "1p 를 사용하여 마지막 삭제 / 변경 사항을 붙여 넣은 다음 ( . 을 사용하여 후속 삭제를 반복적으로 붙여 넣습니다. "1p... 기본적으로 "1p"2p"3p"4p 와 같습니다. "1p"2p"3p"4p .

이것을 사용하면 몇 줄의 역순으로 정렬 할 수 있습니다 : dddddddddd"1p....


블랙 홀 레지스터 _레지스터/dev/null 입니다.

내 vimrc에서 기본 레지스터를 업데이트하지 않고 단일 문자를 삭제할 수 있도록 사용합니다.

noremap x "_x

기본 레지스터를 업데이트하지 않고 비주얼 모드로 붙여 넣기 :

vnoremap p "_dP

ex-mode 명령으로 레지스터 내용을 붙여 넣으려면 <Cr><registerletter> 누릅니다.

왜 이걸 쓸거야? 나는 길고 오래가는 문자열을 검색하고 바꾸기를 원했기 때문에 비주얼 모드로 선택했다 :%s/[PASTE YANKED PHRASE]//g 그리고 검색을 바꾸고 검색을 시작했다.

한 단어를 ex 모드로 붙여 넣기를 원한다면 ex 모드로 들어가기 전에 커서가 그 단어 위에 있는지 확인한 다음 ex 모드에서 <Cr><Cw> 를 눌러 단어를 붙여 넣으십시오.


@ 에 명령에 레지스터를 사용하십시오 . 예 :

echo @a
echo @0
echo @+

명령에서 설정 :

let @a = 'abc'

이제 "apabc 를 붙여 넣습니다.


나는 비밀 전문가가 표현 = 표현이라고 생각한다. 그것은 창조적 인 매핑을 위해 사용될 수 있습니다.

: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...>

내가 0 레지스터를 발견했을 때 나는 기뻤다. 텍스트를 특정 레지스터에 할당하지 않고 텍스트를 뽑으면 0 레지스터에 할당되고 기본 " 레지스터에 저장됩니다 0" 레지스터의 차이는 0 은 홱 잡아 당겨 진 텍스트로만 채워지는 것입니다 반면에 기본 레지스터는 d / D / x / X / c / C / s / S 명령을 사용하여 삭제 된 텍스트로 채워집니다.

나는 어떤 텍스트를 복사하고 무언가를 삭제하고 복사 한 텍스트로 바꾸고 싶을 때 유용하다. 다음 단계에서는 예제를 보여줍니다.

  • y[motion] 으로 복사 할 텍스트를 Yank합니다 -이 텍스트는 " and 0 registers " 저장됩니다
  • d[motion] 으로 대체 할 텍스트를 삭제하십시오 -이 텍스트는 " 레지스터에 저장됩니다
  • yanked 텍스트를 "0p 붙여 넣습니다.

여기서 " 는 다음 명령에 대해 레지스터를 사용하는 명령입니다.

마지막 단계에서 기본 레지스터 ( p 로 붙이기)에서 붙여 넣기한다면 방금 삭제 한 텍스트를 사용하게됩니다 (의도 한 것과 다를 수 있음).

p 또는 P 는 기본 레지스터에서 붙여 넣습니다. 그 길이는 ""p (또는 ""P )이고 "0 은 마지막 홱 잡아 "1 은 마지막 삭제 또는 변경을 유지합니다.

자세한 정보는 :help registers 참조하십시오.





vi