IT story

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

hot-time 2020. 5. 10. 10:25
반응형

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


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

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


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

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

일반 모드 :

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

난 그냥 생각 daw

daw - delete a word

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

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

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

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

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


당신은 좋아합니까?

dw

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

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

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


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

daW

한 단어 만 삭제하려면

daw 

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


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


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

편집한다고 가정 :

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

For deleting a certain amount of characters before the cursor, you can use X. For deleting a certain number of words after the cursor, you can use dw (multiple words can be deleted using 3dw for 3 words for example). For deleting around the cursor in general, you can use daw.


In old vi, b moves the cursor to the beginning of the word before cursor, w moves the cursor to the beginning of the word after cursor, e moves cursor at the end of the word after cursor and dw deletes from the cursor to the end of the word.

If you type wbdw, you delete the word around cursor, even if the cursor is at the beginning or at the end of the word. Note that whitespaces after a word are considerer to be part of the word to be deleted.


Not exactly sure about your usage of "before" and "after", but have you tried

dw

?

Edit: I guess you are looking for something to use in insert mode. Strangely enough, there is nothing to be found in the docs, ctrl-w seems to be all there is.


The accepted answer fails when trying to repeat deleting words, try this solution instead:

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

It maps CTRL-BackSpace, also working in normal mode.


I made two mappings so I could get consistency in insert and out of insert mode.

:map <'Key of your choice'> caw

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


I'd like to delete not only the word before cursor, but the word after or around cursor as well.

In that case the solution proposed by OP (i.e. using <c-w>) can be combined with the accepted answer to give:

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

alternatively (shorter solution):

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

Sample input:

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

Output:

word1 word4

참고URL : https://stackoverflow.com/questions/833838/delete-word-after-or-around-cursor-in-vim

반응형