vim에서 일치시키면 단어, 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
불행히도 vimscript는 구문 강조를 지원하지 않습니다.