vim에서 일치시킬 때 무엇보다도 단어, 단어 및 블록이 있습니다. 이제 코드를 편집할 때 블록이 유용하고 단어가 어느 정도 유용하지만 WORD는 대개 여는 또는 닫는 괄호(또는 )를 포함하기 때문에 대부분 쓸모 ()
가 {}
없습니다 []
.
그래서 나는 WORD가 일치하고 싶습니다.
- 현재 블록 내부의 문자만 해당되지만 그 외에는
- 완전한 단어(필요한 경우 여러 개) 및
- 완전한 블록(불균형 브래킷이 없음).
예를 들어 다음 코드 줄을 고려해보세요.
if (array42[idx + offset] == value) {
에 커서를 두고 4
. 그러면 일치해야 합니다 array42[idx + offset]
. WORD는 물론 와 일치하므로 (array42[idx
유용하지 않습니다.
답변1
viW
일반 모드에서 키 조합을 통해 시각적으로 일치하는 항목을 선택하는 기능을 만들었습니다 .
제가 놓친 사례를 자유롭게 지적해주세요. 또한 vimscript에 대해 잘 모르기 때문에 개선의 여지가 있을 수도 있습니다.
"visually select current programming WORD
function! SelectSensibleWORD()
"go to beginning of block
normal! ?^\|[[:space:]({[]
let l:char = matchstr(getline('.'), '\%' . col('.') . 'c.')
if -1 != match(l:char, '[[:space:]({\[]')
normal! l
endif
"enter visual mode
normal! v
"find brackets or end of the WORD
normal! /$\|[[:space:]({[\]})]
while 1
let l:char = matchstr(getline('.'), '\%' . col('.') . 'c.')
if -1 != match(l:char, '[({[]')
"keep brackets balanced
normal! %
else
"don't select more than necessary
normal! h
return
endif
normal! n
endwhile
endfunction
nnoremap viW :call SelectSensibleWORD()<CR>
그런 다음 이를 기반으로 다른 명령을 작성할 수 있습니다.
nmap ciW viWc
nmap diW viWd
nmap yiW mwviWy`w
Pitty, vimscript는 구문 강조 표시에서 지원되지 않습니다.