레지스터를 지우지 않고 특정 작업 수행


30

종종 구성 파일에서 행 블록을 복사하여 붙여 넣은 다음 해당 블록을 약간 변경하고 싶습니다. 붙여 x넣은 후에 제거하려는 문자를 삭제 한 다음 계속해서 다음 블록을 붙여 넣습니다. 를 제외하고 x내가 다시 라인의 블록을 다시 복사 할 수 있도록두고는 클립 보드에 문자를 삭제.

삽입 모드로 들어 가지 않고 이것을 수행하는 방법이 있습니까?


답변:


35

옵션은 다음과 같습니다.

  1. 블랙홀 레지스터를 사용하십시오 _. 예를 들어 줄을 삭제하려면을 입력 "_dd합니다. 클립 보드에 영향을주지 않고 삭제합니다.
  2. 원래 yank의 레지스터 이름을 명시 적으로 지정하십시오. 예를 들어, 이름이 지정된 레지스터에 줄을 잡아 당기려면 "ayy다음을 입력 하고 붙여 넣습니다."ap
  3. 대신 yank 레지스터를 사용하여 원래 yank를 검색하십시오. 붙여 넣기 유형으로 갈 때 필요에 따라 잡아 당겨 삭제 한 다음 삭제할 수 있습니다."0p
  4. vim-easyclip 과 같은 플러그인을 사용 하여 삭제 연산자와 구별되는 잘라 내기 연산자를 제공하십시오 (전체 공개 : 작성)

:help registers처음 3에 대한 자세한 내용을 보려면 실행하십시오.


4
그럼 x내가 사용 "_x할까요?
durron597

1
맞습니다.
Steve Vermeulen

2
@ durron597로 한 번에 한 문자 를 삭제하는 경우 다음 닫는 괄호까지 삭제하여 다음 두 공백으로 구분 된 토큰을 삭제하는 x것과 같은 모션 삭제를 배우는 것이 좋습니다 . 그런 다음 브레이스 영역 내부 와 같은 작업을 수행 할 수 있습니다 . 일반 모드에서 이는 " 이 브레이스 영역 내부의 모든 것을 블랙홀삭제합니다 "dt)d2W"_di{
OregonTrail

nnoremap x "_x~/.vimrc설명에 추가되었습니다 (설명 : stackoverflow.com/questions/54255/… ).
빅토리아 스튜어트

11

x클립 보드에 물건을 넣지 않고 레지스터에 넣습니다 . 어떤 레지스터에 넣을지를 알려주지 않으면 명명되지 않은 레지스터에 넣습니다. 물론 이전 내용을 덮어 씁니다. 대신, 어떤 레지스터를 사용 " REGISTER x해야하는지 알려주십시오. 여기서 REGISTER는 단일 문자입니다. 그런 다음 동일한 인용 부호 레지스터 접두사를 사용 p하여 해당 레지스터에서 붙여 넣습니다. (참고 : 소문자는 내용을 대체하고 대문자는 추가합니다).

또한 두 개의 특수 레지스터 "0와가 "1있습니다. "0는 가장 최근에 눌린 y텍스트 ( )이며 다른 명령 (예 :)으로 일부 텍스트를 삭제하더라도 그대로 유지됩니다 x. "1텍스트가 작지 않은 한 (한 줄) 가장 최근에 삭제 된 텍스트입니다. 작은 삭제 된 텍스트가에 들어갑니다 "-.

마지막으로 Steve Vermeulen이 지적한 것처럼 vim은 블랙홀 레지스터를 지정하여 삭제 된 텍스트를 저장하지 않도록 지시 할 수 있습니다 "_.

관련 도움말 명령은 :help registers입니다.


3

:let명령을 사용하면 명명 된 레지스터를 재정의 할 수 있습니다. vim의 명령 행에서 Control+를 1 R 번 두 번 누르면 레지스터 이름이 레지스터 내용을 명령에 붙여 넣습니다. 그런 다음 붙여 넣은 내용을 수정하고 수정 사항과 함께 레지스터를 저장할 수 있습니다.

예:

  • 일반 모드에서 "Foo Bar"라는 텍스트가 포함 된 줄에서 입력 "fyy하면 전체 줄 ( yy)이 f레지스터 ( "f)에 들어갑니다.
  • :let @f=', 및 Control+ r, Control+를 r다시 입력 한 다음 f"Foo Bar"에 붙여 넣기가 표시되므로 :let @f='Foo Bar커서가 맨 끝에있는 명령 행이 표시 됩니다.
  • 이제 화살표와 Delete 키를 사용하여 방금 붙여 넣은 내용을 편집 할 수 있습니다 (예 :) :let @f='foo bar baz.
  • 인용 :을 끝내고 :let @f='foo bar baz'를 누르십시오 Enter.

이제 f레지스터 의 내용을 "foo bar baz"로 재정의했습니다 .

:help let자세한 내용 은 매크로에도 적용됩니다 .


1 Control +를 r사용하면 문자를 입력하는 것처럼 이미 삽입 모드에있을 때 레지스터를 삽입 할 수 있습니다. 이 시퀀스를 사용하여 두 번하는 것은 "텍스트가없는 입력 한 경우로, 문자 그대로 삽입됩니다. 레지스터는 같은 문자가 포함이 다르기 때문에 중요하다 <BS>." — insert.txt vimdoc,:help i_CTRL-R_CTRL-R


0

"_@derobert가 언급 한 블랙홀 레지스터와 관련하여 http://vimcasts.org/episodes/meet-the-yank-register/ 에서 유용한 스크린 캐스트를 찾을 수 있습니다.

Vim은 표준 용어 인 잘라 내기, 복사 및 붙여 넣기 대신 delete, yank 및 put이라는 용어를 사용합니다. 같은 문자로 시작하여 붙여 넣기를 쉽게 교환 할 수 있습니다. yank라는 단어에 익숙해지면 복사와 동의어가됩니다. 그러나 Vim은 '삭제'라는 단어를 사용하는 데 문제가 있습니다. 그러나 Vim의 삭제 작업은 텍스트를 레지스터에 복사 한 다음 문서에서 제거합니다. 즉, Vim의 삭제 작업은 컷처럼 동작합니다.


2
이것은 질문에 대한 답변을 제공하지 않습니다. 작성자의 의견을 비판하거나 설명을 요청하려면 게시물 아래에 댓글을 남겨주세요. 언제든지 자신의 게시물 에 댓글 수 있으며 평판 이 충분 하면 게시물댓글 수 있습니다 .
jamessan

원래 게시물에 댓글을 달려고했지만 할 수 없었습니다. 내가 가진 유일한 대안은 내가 @jamessan을 선택한 것입니다
Marlon León

0

플러그인 ReplaceWithRegister

http://www.vim.org/scripts/script.php?script_id=2703 (2009-2014)

매핑을 제안합니다 gr.

  1. 양키
  2. 바꿀 텍스트를 시각적으로 선택하고를 누릅니다. gr
  3. 교체하려는 다음 블록으로 이동

또는 gr<text object>시각적으로 선택하지 않고 사용하십시오 . 점 반복은 repeat.vimTim Pope 및 visualrepeat.vimIngo Karkat 의 플러그인 이 설치 될 때 지원됩니다 .

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