vim - 如何将可视范围传递给没有数字或在 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)','\U\1','g')
call setline(lineno,newLine)
endfor
endfunction
解决方案可能是创建一个返回视觉选择 GetVisualSelection() 的函数。
解决方案
您可以使用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
是固定的。
推荐阅读
- ios - Xcode 11.6 命令 PhaseScriptExecution 失败,退出代码为非零
- python - Pandas Plot 浮动条形图
- netbeans - 尝试卸载 NetBeans 12.0 时出现 NullPointerException
- c# - 使用 MySqlDataReader C#
- android - 在 ListView 中使用时出现 FadeInImage 错误
- arrays - 如果在 Reactjs 中没有选中任何复选框,则保持按钮禁用
- reactjs - 在 React 中相对于容器的变化缩放文本
- javascript - 添加图像取决于ajax响应
- reactjs - React js 和 node js 应用程序的 Azure 托管
- video-streaming - COTURN 使用过多的 CPU !这是正常的吗?