Как передать визуальный диапазон функции без чисел или с помощью команды: в vim? - PullRequest
2 голосов
/ 29 мая 2020

Как передать визуальное выделение функции из сценария и НЕ командной строки / сопоставления. Мне было интересно, возможно ли что-то подобное? Или есть функция, которая получает диапазон?

Что я хочу:

:call LowerToUpper('<,'>)
:call LowerToUpper(GetVisualRange())

НЕ ЭТО

:call LowerToUpper(1,5)
command! -range Edit call LowerToUpper(<line1>,<line2>)
:'<,'>LowerToUpper

Вот пример функции:

function! LowerToUpper(first,last) abort
for lineno in range(a:first,a:last)
    let line = getline(lineno) 
    let newLine= substitute(line, '\v(\w)','\U\1','g')
    call setline(lineno,newLine)
endfor
endfunction

Решение может быть взломать, чтобы сделать функцию, возвращающую визуальное выделение GetVisualSelection ().

Ответы [ 2 ]

1 голос
/ 29 мая 2020

У вас может быть ваша функция с модификатором range.

function! LowerToUpper() abort range
    for lineno in range(a:firstline, a:lastline)
        let line = getline(lineno)
        let newLine = substitute(line, '\v(\w)','\U\1','g')
        call setline(lineno, newLine)
    endfor
endfunction

'<,'>call LowerToUpper()

Это в основном служит ярлыком для неявной передачи line("'<") и line("'>"). Имена аргументов a:firstline и a:lastline фиксированы.

1 голос
/ 29 мая 2020

: вызовите LowerToUpper ('<,'>)

Вы очень близко. Введите line(), чтобы получить строки знаков:

:call LowerToUpper(line("'<"), line("'>"))
...