如何将可视范围传递给没有数字或在 vim 中使用 :command 的函数?



如何将视觉选择从脚本而不是命令行/映射传递给函数。我想知道这样的事情是否可能?或者如果有一个函数可以得到一个范围?

我想要什么:

: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)','U1','g')
call setline(lineno,newLine)
endfor
endfunction

解决方案可能是创建一个返回视觉选择GetVisualSelection((的函数。

:call LowerToUpper('<,'>(

你们非常非常接近。使用line()获取标记行:

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

您可以使用range修饰符来获取函数。

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

这主要用作隐式传递line("'<")line("'>")的快捷方式。参数名称a:firstlinea:lastline是固定的。

最新更新