vim
cw
(단어 변경)과 (단어 제거)를 사용할 dw
때 공백이 다르게 처리되는 것 같습니다 .
예를 들어 아래 샘플 텍스트에서 커서를 문자 위에 놓고 a
를 입력하면 dw
나머지 단어가 삭제됩니다.그리고그 뒤에 공간을 두는 반면, 내가 cw
사용 하면아니요공백을 제거하고 예상대로 삽입 모드로 전환합니다.
예:
example text
w
이 동작은 동사의 (제거) 또는 (변경)에 관계없이 (단어) 동작이 동일하다고 생각했기 때문에 혼란 스럽습니다 .d
c
답변1
그게 그렇고, 그게 기록이다. 만약 네가 cw
그런 것처럼 행동 하고 싶다면 dw
언제나 이렇게 말할 수 있어
:map cw dwi
:map cW dWi
:help cw
자세히보다. 또한 살펴 w
보십시오 :help cpoptions
.
도움말 섹션에서 cw
:
특별한 경우: "cw" 및 "cW"는 커서가 단어 안에 있을 때 단어 뒤의 공백을 포함하지 않고 단어 끝으로만 변경됩니다. 이는 Vim이 "cw"를 변경 단어로 해석하고 해당 단어에 다음 공백이 포함되어 있지 않기 때문입니다.
"cw"에서 단어 뒤에 공백을 포함하려면 다음 매핑을 사용하세요.
:map cw dwi
또는 "caw"를 사용하십시오("aw" 참조).
답변2
부분적인 감사이 답변, 저는 운영자 일시 중단 매핑을 사용하여 이러한 불일치를 해결하는 방법을 찾았습니다.카운트를 유지하다. 이와 같은 명령은 명시적인 매핑 없이 c3w
예상대로 실행됩니다 cw
. 연산자 일시 중지 매핑에 대한 추가 설명은 연결된 답변에 있지만 기본적으로 & 작업에 연결되며 / 앞에 오는 경우에만 취소 및 실행 됩니다 . 나는 문서에서 제안한 것보다 결과가 더 직관적이라고 생각합니다 .c2w
c3w
w
W
c
c
d[count]wi
d[count]Wi
map
onoremap <expr> w <SID>ExpectedChangeWord('w', v:operator, v:count)
onoremap <expr> W <SID>ExpectedChangeWord('W', v:operator, v:count)
function! s:ExpectedChangeWord(w, op, c)
return a:op != 'c' ? a:w : "\<Esc>d" .. (a:c > 1 ? a:c : '') .. a:w .. 'i'
endfunction
내가 알아차린 한 가지는 작은따옴표(링크된 답변에서와 같이)를 사용하면 이전 버전의 Vim에서는 부분적으로 작동했지만 최신 버전에서는 전혀 작동하지 않았다는 것입니다. 예상되는 "\<Esc>"
형식을 사용하면 feedkeys()
문제가 해결되었습니다.