Vim에서 삭제 (잘라 내지 않는) 방법?


145

기본 버퍼에 넣지 않고 줄을 어떻게 삭제합니까?

예:

line that will be copied.

line that I want to be substitued with the previous one.

내가하려는 일 :

yy
dd
p

그러나 Vim은 최근에 복사 한 문자열을 삭제 된 (잘라낸) 문자열로 바꿉니다. 나는, 같은 내가 버퍼를 사용할 수 있다는 것을 알고 "1yy, dd다음 "1p,하지만 난 항상 버퍼에 복사 된 문자열을 넣어하는 것을 잊지 후 내가 먼저 (복사됩니다 선) 내 내용을 붙여 넣은 다음 내가 원하는 것을 (라인을 원하는 삭제해야 이전 항목으로 대체하십시오.)

Vi (m)에서 텍스트를 복사하지 않고 어떻게 실제로 삭제할 수 있습니까?

또 다른 관련 질문은 삽입 모드에서 단어를 전달하여 어떻게 삭제할 수 있습니까? Ctrl+ 와 비슷한 것을 원합니다 w.


답변:


130

"블랙홀 레지스터"를 사용 "_하여 실제로 무언가를 삭제하십시오 "_d. 붙여 넣기를 위해 붙여 넣을 수 있도록
사용하십시오 "_dP.

두 번째 질문에는을 사용할 수 있습니다 <C-o>dw. 삽입 모드 <C-o>를 벗어나지 않고 일반 명령을 실행하는 데 사용 됩니다.

물론 타이핑을 저장하기 위해 고유 한 매핑을 설정할 수 있습니다. 나는 이것을 가지고있다 :

nnoremap <leader>d "_d
xnoremap <leader>d "_d
xnoremap <leader>p "_dP

thx, 당신은 내 두 가지 질문에 대답합니다. 그러나 나는 이러한 noremap 명령이 어떻게 도움이되는지 이해하지 못했습니다. 컷 기능을 잃어 버렸습니까?
MaikoID

3
아니요, d여전히 "잘라 내기"및 p"붙여 넣기"를하는 동안 <leader>d실제 <leader>p텍스트 를 삭제 하고 선택한 텍스트를 버리고 기본 레지스터의 내용을 붙여 넣습니다. <leader>p명명 된 레지스터를 사용하지 않고도 동일한 텍스트를 여러 번 붙여 넣을 수 있습니다.
romainl

119

블랙홀 레지스터는 "_ 트릭을 할 것입니다,하지만 더 나은 솔루션이있다 :

p명령 을 사용하여 줄을 다시 입력하면에 의해 덮어 쓴 (휘발성) 기본 레지스터 의 내용을 붙여 넣습니다 . 그러나 여전히 (휘발성이 아닌) yank 레지스터 에서 붙여 넣을 수 있으며 delete 명령으로 덮어 쓰지 않습니다 .""dd "0dd

따라서 다음은 예제에 따라 사용하려는 명령입니다.

yy
dd
"0p

1
대단합니다, 이것이 정답입니다. 붙여 넣기를 원할 때마다 레지스터를 지정할 때마다 레지스터를 계속 지정하는 것보다 붙여 넣기를 할 때마다 수동으로 레지스터를 지정하는 것이 훨씬 쉽습니다.
JShorthouse 2014

44

그것이 vim에 대해 싫어하는 것 중 하나입니다 .... dd.vimrc의 블랙홀 레지스터에 매핑 을 끝내고 그 이후의 삶은 좋았습니다.

nnoremap d "_d
vnoremap d "_d

6
그럼 어떻게 잘라 요?
VitalyB

11
v/V와 함께 x잘라집니다. 또한 모든 OS에서 절단 x도 일관됩니다 Ctrl + x.
WesternGun

22

다음과 같은 매핑이 생성됩니다.

  • d => "삭제"
  • 리더 d => "잘라 내기"
nnoremap x "_x
nnoremap d "_d
nnoremap D "_D
vnoremap d "_d

nnoremap <leader>d ""d
nnoremap <leader>D ""D
vnoremap <leader>d ""d

또한 "leader"키를 쉼표로 설정하는 것이 좋습니다. 예 :

let mapleader = ","
let g:mapleader = ","

이 2 개의 스 니펫은 ", d"를 새로운 컷 명령으로 만듭니다.

이러한 매핑을 공유 시스템 클립 보드 구성과 함께 사용하려면 https://github.com/pazams/d-is-for-delete 에서 자세한 내용을 참조하십시오.


kprobst의 답변을 사용 yydd하고 있었지만 줄을 자르려면 손가락에 약간 지속 할 수없는 것을 사용해야했습니다 ;-).
Tahir Hassan

1
이 후 인텔리지 아이디어가 너무 이상하게 행동합니다. dd는 아무것도하지 않습니다. , d는 아무 것도하지 않습니다
s1n7ax

나는 해결책을 많이 좋아한다. 나에게 효과적이지 않은 한 가지는-로 줄을 자르는 것입니다 ,dd. nnoremap <leader>dd ""dd그것을 추가 한 후에 작동하기 시작했다
Alexey

8

"_d사물이 눌린 텍스트를 덮어 쓰지 못하게 하는 데 사용할 수 있습니다 . 당신은 당신이 원하는 레지스터에 얽힘 또는 삭제 된 텍스트를 저장할 수 있으며 ", _당신이 상관없는 물건을 보내는 '블랙홀'레지스터입니다.

자세한 내용을 입력 :help "_하거나:help deleting


-1
yy
Vx
p

비주얼 모드에서는 x선택을 삭제하므로 전체 라인을 삭제하려면 먼저를 눌러 V비주얼 모드에서 라인을 선택한 다음를 눌러 x선택을 삭제하십시오.


3
이렇게하면 삭제 된 줄이 클립 보드에 복사되는데 이는 OP가 피하고자하는 것입니다.
aVeryStableGenius

감사! 어떻게 든 이것은 Emacs의 Evil 플러그인에서 완벽하게 작동합니다
Pedro Penna
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.