VIM에서 커서 뒤 또는 주변의 단어 삭제


212

이제 VIMTextMate에서 전환 중 입니다. ^+WINSERT 모드에서 매우 유용하다는 것을 알았 습니다. 그러나 커서 앞의 단어뿐만 아니라 커서 뒤 또는 주위의 단어도 삭제하고 싶습니다.

인터넷 검색을했지만 ^+W커서를 찾기 전에 단어를 삭제하는 것이 유일한 방법이었습니다 .

답변:


78

당신이해야 할 일은 일련의 명령에 특정 키의 imap을 만드는 것입니다.이 경우 명령은 일반 모드로 떨어지고 현재 단어를 삭제 한 다음 다시 삽입합니다.

:imap <C-d> <C-[>diwi

29
유용한 shrtcts를위한 ": h diw"!
klokop

12
<Co> 사용을위한 보너스 보너스 포인트. Normal 모드에서 하나의 명령을 실행하고 Insert로 곧바로 건너 뛰기 때문에 비슷한 imap <C-d> <C-o>diw방식으로 작동합니다. 또한 <Esc>는 거의 항상 실행 취소 지점을 만들지 않습니다.
zelk

삽입 모드에서 <Co> : 내 하루를 만들었 음 :)
Lusk116

541

일반 모드 :

daw : delete the word under the cursor    
caw : delete the word under the cursor and put you in insert mode 

125
단어를 daw : 단어 삭제 및 caw : 단어 변경으로 생각하면 도움이됩니다.
welbornio

1
하나님은 내가 사용 da)하고 ci)있지만 이것을 생각하지 않았습니다!
Sky

1
골드 제리입니다! 금! .vimrc다음 nmap <Leader>d daw 과 같이 파일 에 해당 아기를 매핑했습니다 . nmap <Leader>c caw
racl101

1
아마도 이것이 aw객체 선택의 한 예 라고 언급 할 가치가 있습니다. 당신은 그들이 어떤 영향을보기 위해 시각적 모드에서 개체 선택을 시도 할 수 있습니다 : vimdoc.sourceforge.net/htmldoc/motion.html#object-select
crantok

103

난 그냥 생각 daw

daw - delete a word

1
나는 그것이 a명령 이라는 것을 알고 Append text after the cursor [count] times.있지만 어떻게 daw작동합니까?
syntagma

3
@REACHUS 초기 문자 d는 당신이 '삭제'할 것을 지시합니다. 'a'는 일종의 매개 변수로, 삭제시 구분자가 포함되도록 지정합니다. 마지막으로 'w' parameterword유닛을 삭제하도록 지정합니다 .
vlad-ardelean

2
차이 무엇 dwdaw?
AK_

5
@AK_ 늦은 응답이지만 단어 중간에 있으면 dw커서에서 단어 끝까지 daw삭제되고 공백과 함께 전체 단어가 삭제됩니다. diw주변의 공백을 건드리지 않고 전체 단어를 삭제합니다.
Dmiters 2016 년

67

아래는 일반 모드에서 작동합니다. Dan Olson의 대답에 동의합니다. 대부분의 삭제에서 아마도 일반 모드에 있어야합니다. 자세한 내용은 아래를 참조하십시오.

커서가 단어 안에있는 경우 : 단어
diw에서 삭제하려면 (공백 제외)
daw단어 주위를 삭제하려면 (다음 단어 앞에 공백 포함)

커서가 단어의 시작 부분에 있으면을 누릅니다 dw.

예를 들어 2w를 앞으로 이동하기 위해 2w와 같이 일반적인 이동 숫자를 추가하여 곱할 수 있으므로 d2w는 두 단어를 삭제합니다.

삽입 모드 ^ w
Vim에서 움직임에 hjkl을 사용하는 아이디어는 집에 손을 대는 것이 더 생산적이라는 것입니다. 단어의 끝에 ^ w는 단어를 빠르게 삭제하는 데 효과적입니다. 삽입 모드로 들어가면 텍스트를 입력하고 화살표 키를 사용하여 홈 행 철학에 어긋나는 단어 중간에 끝납니다.
당신은 일반 모드에있어 단어를 변경하려면 간단히 사용할 수 있습니다 c보다는 (변경)을 d원하는 경우 완전히 단어를 변경하고, 언론에하지 않고 모드를 삽입 다시 입력 (삭제) i다시 얻을 수 타이핑하기.


42

당신은 좋아합니까?

dw

10
파티에 늦었지만 현재 위치에서 단어의 끝까지 dw가 삭제됩니다. 처음부터 diw 또는 daw를 사용하여 전체 단어를 삭제하십시오
Dvid Silva

1
dw하이픈이나 다른 문장 부호를지나 치면 삭제되지 않습니다.
ccpizza

* 참고 : 버퍼 / 마지막 yank를 덮어 씁니다. 이것은 '삭제'뿐만 아니라 '잘라 내기'작업에 가깝습니다.
MD. Mohiuddin Ahmed

23

일반 모드에서 두 공백 사이의 모든 문자 를 삭제하려면

daW

한 단어 만 삭제하려면

daw 

20

삽입 모드에서 내장 방법을 사용 하는 것처럼 보이지는 않습니다 . 다른 답변 중 일부는 일반 모드에 적합하며 삽입 모드에서 기능을 추가하기 위해 사용자 지정 매핑을 만들 수 있다고 지적합니다.

솔직히 대부분의 삭제 작업은 보통 모드에서 수행해야합니다. ^ W는 알 필요가 없지만 정상 모드로 들어가서 더 강력한 삭제 명령을 내릴 수있는 esc보다 상황을 생각할 수 있는지 확실하지 않습니다.

Vim은 이런 식으로 다른 많은 편집기 (TextMate 포함)와 매우 다릅니다. 생산적으로 사용하는 경우 인서트 모드에서 많은 시간을 소비하지 않을 것입니다.


1
나는 주로 단어를 잘못 입력했을 때 ^ wa lot을 사용합니다. 되돌아 가서 누락 된 문자 등을 추가하는 대신 모든 것을 삭제하고 다시 시작합니다. 한 단어를 삭제하기 위해 일반 모드로 이동하면 낭비처럼 보입니다. 예를 들어, "example wrd [^ w] word"는 "example wrd [^ c] [dw] [i] word"보다 키 입력이 적습니다
dbr

1
dbr : 그는 vim이 지원하는 기본적인 ^ W 동작을 요구하지 않았습니다. 그는 삽입 모드에있는 동안 중간에있는 동안 모든 단어를 삭제하도록 요청했습니다. 이는 vim에게는 이상한 상황이므로 그렇게 할 명령이 없습니다. 기능을 실제로 거부하면 ^ Q를 <Esc> ciw에 바인딩 할 수 있습니다. 아, 또한 [I]에서 [^ C] [DW] [i]를 중복 사용할 수있다 [^ C] [CIW]
bfabry

4
"방법이있는 것 같지 않습니다 ..."-수많은 방법이 있습니다- 내장 된 방법 은 없습니다 . 삽입 모드와 일반 모드에 대한 Dan의 진술에 전적으로 동의하지만, 단순히 삽입 모드 매핑을 정의 할 수 있습니다. 삽입 모드에서 기능이 실제로 필요한 경우 달성하고자하는 모든 것을 수행하는 ": help imap"을 참조하십시오.
user55400 2016 년

13

커서가 사용 diw
중인 전체 단어를 삭제하려면 커서가 있는 전체 단어를 삭제하고 삽입 모드로 전환하려면 ciw
전체 단어를 삭제하지 않고 현재 위치에서 삭제하려면dw/cw


8

단어를 삭제하는 방법에는 여러 가지가 있으므로이를 설명하겠습니다.

편집한다고 가정 :

foo-bar quux

커서가 'bar'의 'a'에있는 동안 명령을 호출하십시오.

foo-bquux  # dw:  letters then spaces right of cursor
foo-quux   # daw: letters on both sides of cursor then spaces on the right 
foo- quux  # diw: letters on both sides of cursor
foo-bquux  # dW:  non-whitespace then spaces right of cursor
quux       # daW: non-whitespace on both sides of cursor then spaces on the right
 quux      # diW: non-whitespace on both sides of cursor

5

불행히도 삽입 모드에는 그러한 명령이 없습니다. VIM에서 커서 아래의 전체 단어를 삭제하려면 viwdNORMAL 모드에서 입력 하십시오. 어떤 수단 " V isual 블록 I nner W ORD D elete". W구두점을 포함 하려면 대문자를 사용하십시오 .


3

단어 삭제를 반복하려고 할 때 허용되는 대답이 실패합니다. 대신이 솔루션을 시도하십시오.

" delete current word, insert and normal modes
inoremap <C-BS> <C-O>b<C-O>dw
noremap <C-BS> bdw

CTRL-BackSpace를 맵핑하고 정상 모드에서도 작동합니다.


이 모드는 일반 모드에서도 작동하기 때문에이 답변이 더 좋습니다.
sivabudh

2

커서 앞의 특정 문자 수를 삭제하려면 X를 사용할 수 있습니다. 커서 다음에 특정 수의 단어 를 삭제 하려면 dw를 사용할 수 있습니다 (예 : 3 개 단어에 대해 3dw를 사용하여 여러 단어를 삭제할 수 있음). 일반적으로 커서 주위를 삭제하려면 daw를 사용할 수 있습니다.


2

이전 vi에서는 b커서를 커서 이전 단어의 시작 부분으로 w이동하고 커서를 커서 다음 단어의 시작 부분으로 이동하고 커서 다음 단어 e의 끝 부분에서 커서를 이동하고 커서에서 단어 끝으로 dw삭제합니다.

을 입력 wbdw하면 커서가 단어의 시작 또는 끝에 있더라도 커서 주위의 단어를 삭제합니다. 단어 다음의 공백은 삭제 될 단어의 일부로 간주됩니다.


2

"이전"과 "이후"의 사용법에 대해 정확히 모르지만 시도해 보셨습니까?

dw

?

편집 : 삽입 모드에서 사용할 것을 찾고 있다고 생각합니다. 이상하게도 문서에는 아무것도 없습니다 .ctrl-w가있는 것 같습니다.


2

삽입과 삽입 모드에서 일관성을 얻을 수 있도록 두 가지 매핑을 만들었습니다.

:map <'Key of your choice'> caw

:imap <'Key of your choice'> <'Esc'> caw


0

커서 앞의 단어뿐만 아니라 커서 뒤 또는 주위의 단어도 삭제하고 싶습니다.

이 경우 OP에서 제안한 솔루션 (예 :)을 <c-w>수락 된 답변과 결합하여 다음을 제공 할 수 있습니다.

inoremap <c-d> <c-o>daw<c-w>

대안 적으로 (더 짧은 해결책) :

inoremap <c-d> <c-o>vawobd

샘플 입력 :

word1 word2 word3 word4
               ^------------- Cursor location

산출:

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