마지막 생크를 덮어 쓰지 않고 vim에서 삭제하는 방법은 무엇입니까? [복제]
이 질문에는 이미 답변이 있습니다.
나는 vim을 좋아하지만 한 가지 일반적인 문제는 다음과 같습니다.
- 줄을 k 다
- 붙여넣고 싶은 곳으로 이동
- 거기에있는 것을 삭제
- 방금 삭제 한 것을 붙여 넣기 만하면됩니다.
분명히 워크 플로가 먼저 삭제됩니다. 내가하지 않은 경우 그러나 그것은 reeeeeaaaaaalllly 좋은 것 가지고 에. 누구든지 이것에 대한 트릭이 있습니까? vim에 잘 작동하는 붙여 넣기 버퍼가 있습니까, 아니면 변경할 수있는 .vimrc 설정이 있습니까?
받는 패스 _
레지스터, 블랙홀.
레지스터에 붙지 않고 줄을 삭제하려면 :
"_dd
도 참조하십시오 :help registers
.
무언가를 반복해서 붙여 넣기를 원한다면 "이름이 지정된"레지스터에 넣는 것이 가장 안전 할 것입니다.
"aY
a
레지스터 로 줄을 ks니다 . 로 붙여 넣기 "ap
.
줄 바꿈 된 줄은 여전히 레지스터 0에 있어야합니다.
"0p
선을 붙여 넣고 언제든지 삭제할 수 있습니다.
모든 yank 및 delete 작업은 기본적으로 명명되지 않은 레지스터에 씁니다. 그러나 가장 최근의 yank 및 가장 최근의 삭제는 항상 번호가 매겨진 레지스터에 (별도로) 저장됩니다. 레지스터 0
는 가장 최근의 yank를 보유합니다 . 레지스터 1-9
는 9 개의 가장 최근 삭제를 보유합니다 ( 1
가장 최근 임).
다시 말해, 삭제는 명명되지 않은 레지스터에서 가장 최근의 yank를 덮어 쓰지만 여전히 0
레지스터에 있습니다. "_dd
다른 답변에서 언급 된 블랙홀 레지스터 트릭 ( )은 명명되지 않은 레지스터를 덮어 쓰지 못하기 때문에 작동하지만 필요하지는 않습니다.
큰 따옴표를 사용하여 레지스터를 참조하므로 가장 최근에 작성된 텍스트를 붙여 넣는 방법은 다음과 같습니다.
"0p
이것은 훌륭한 참고 자료입니다.
또 다른 가능성은 다음과 같습니다.
평소처럼 줄을 k 다
붙여 넣으려는 곳으로 이동하여 가시선 모드 ( V
)로 들어갑니다.
바꿀 줄을 선택하십시오
p
당신의 라인을 붙여 넣 습니다 .
이것은 또한 버퍼가 교체 된 내용으로 "스왑"된다는 추가 이점이 있습니다.
다음 매핑을 사용하여 블랙홀 레지스터를 약간 더 쉽게 삭제할 수 있습니다.
nnoremap R "_d
이 방법은 dd
될 Rd
및 d$
됩니다 R$
. 참고 R
일반적으로 대체 모드 입력 수밖에하지만, 그것은 "정말 제거"기능에 대한 키를 기억하기 easisest했다, 그래서 나는, 나는 그것을 사용하지 않는다는 것을 알 수있다.
" map paste, yank and delete to named register so the content
" will not be overwritten
nnoremap d "xd
vnoremap d "xd
nnoremap y "xy
vnoremap y "xy
nnoremap p "xp
vnoremap p "xp
이 문제를 해결하기 위해이 플러그인 (yankstack.vim) 을 작성 했습니다 . 그것은 당신 에게 vim을위한 Emacs의 kill ring 과 같은 것을 제공합니다 . 여러 가지를 잡아 당기거나 삭제하고, 붙여 넣기를 한 다음, 잡아 당기거나 죽인 텍스트 기록을 앞뒤로 순환 할 수 있습니다. 내가 등록한 것을 등록한 것을 기억해야하는 것보다 쉽다는 것을 알게되었습니다.
내 .vimrc에는 다음과 같은 매핑이 있습니다.
nmap <M-p> <Plug>yankstack_substitute_older_paste
nmap <M-P> <Plug>yankstack_substitute_newer_paste
ALT-p 또는 ALT-SHIFT-p를 눌러 붙여 넣기 기록을 앞뒤로 순환 할 수 있습니다.
특정 질문에 대해 물었다으로 , 당신은 단지 마지막 2 단계의 순서를 바꿀 수 없었다?
- 생크 라인 ( 동일 )
- 새 위치로 이동 ( 같은 )
- 붙임 선 붙여 넣기 ( 단계 4 )
- 원하지 않는 줄 삭제 ( 3 단계 )
물론, 나는 보통 이런 종류의 일에 대해 명명 된 레지스터를 사용하지만 때로는 해결책이 처음에 떠오르는 것보다 더 간단합니다.
vim.org/scripts/에서 ReplaceWithRegister 스크립트를 사용해 볼 수도 있습니다.
이 모든 키 콤보가 번거 롭습니다. 대신, 삭제 작업에서 버퍼를 덮어 쓰는 vim의 "부작용"동작을 설정 및 해제하는 기능을 작성했습니다. 이렇게하면 해제하고 자유롭게 삭제 한 다음 완료되면 다시 켤 수 있습니다.
내 답변을 여기에서보십시오 : https : //.com/a/12649560/778118
그것을 사용하려면 그냥 .vimrc에 넣으십시오.
레지스터를 사용할 수 있습니다. "<register><command>
예 :
이렇게하면 행이 register로 들어가 a
다른 행을 삭제 한 다음 레지스터를 붙여 넣습니다.a
"ayy` (move) `dd"aP
악의적 인 사용자라면 "_d와 같은 기능을 수행하기 위해 X를 다시 매핑하는 것을 고려할 수 있습니다. 그러나 구현을 완성하는 것은 약간 까다로운 작업이었습니다.
(define-key evil-normal-state-map "X" 'evil-destroy)
(define-key evil-visual-state-map "X" 'evil-destroy)
(evil-define-operator evil-destroy (beg end type register yank-handler)
"delete without yanking text"
(evil-delete beg end type 95 yank-handler)
)
아주 잘 통합됩니다. 예를 들어 XX를 입력하면 X $에서 d $, X0에서 d0 등과 같이 dd와 유사하게 작동합니다.
작동 방식에 대해 궁금한 경우 "95"는 "_ 레지스터를 나타내므로"_가 레지스터를 눌렀 던 것처럼 삭제하기 위해 호출을 다시 라우팅하기 만하면됩니다.
요령은 당신이 무언가를 잡고 움직이기를 원한다는 것을 알고 있으며 '게으른'첫 번째 레지스터 (방금 삭제 한 것으로 대체 됨)를 사용하고 있다는 것입니다.
vim에서 "잘라 내기"를 배워야합니다.
삭제하기 전에 다른 레지스터를 지정하십시오 "
. 팁 : 등록을 확인하십시오:reg
이제 "
명령 전에 를 눌러 새 레지스터를 선택하십시오 (명령 모드에서 분명히).
- "잘라 내고 싶은"선택 (2 단계에서 범위 지정)
- 변경 아무것도 (에 등록
1
여기) 및 삭제 :"1d
하거나"1x
또는"1c
- 새로운 장소로 이동하여 더 삭제
- 지금 당신은 당신이 잘라 레지스터 1에 저장 것을 붙여 넣을 준비 :
"1p
또는"1P
끝난. 이것은 또한 유스 케이스를 해결하는 이점이 있습니다. 한 곳에서 5 가지 항목을 삭제하고 각 조각은 다른 대상으로 이동합니다 ... 하나만 "1
다른 곳에 삽입하십시오 "2
... 각 대상으로 이동하여 붙여 넣습니다.
'Programing' 카테고리의 다른 글
Groovy 문자열을 int로 (0) | 2020.03.31 |
---|---|
Linux에서 절대 경로로 파일 목록을 생성하려면 어떻게해야합니까? (0) | 2020.03.31 |
컬렉션에있는 모든 객체의 속성에 대해 .Max ()를 수행하고 최대 값으로 객체를 반환하는 방법 (0) | 2020.03.31 |
왜 텍스트 영역에 신비한 공백이 가득합니까? (0) | 2020.03.31 |
문자열 배열이 아닌 객체 배열의 Python string.join (list) (0) | 2020.03.30 |