vim: 현재 블록의 단어를 대괄호로 일치시킵니다.

vim: 현재 블록의 단어를 대괄호로 일치시킵니다.

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는 구문 강조를 지원하지 않습니다.

관련 정보