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

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

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는 구문 강조 표시에서 지원되지 않습니다.

관련 정보