vim: Match WORD in current block with balanced brackets

paste -d '\n' file1 file2 > file3

где файл1 и файл2 - это входные файлы, а файл3 будет созданным выходом.

1
05.11.2015, 10:42
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 не поддерживается подсветкой синтаксиса.

0
28.01.2020, 01:31

Теги

Похожие вопросы