通过输入范围自定义函数

问题描述 投票:0回答:1

我正在做一个映射到一个函数,该函数接受一个符号作为 input() 并将用这样的符号“包装”所选行的所有单词:

"Quoter/Wrapper
function Quoter(symbol) 
    exe a:firstline . ',' . a:lastline . 's/\S\+/' . a:symbol . '&' . a:symbol . '/g'
endfunction

map <Leader>QQ :call <line1>,<line2>Quoter(input('Symbol(Quoter)'))<CR>

这似乎工作得很好,除了多次要求输入(似乎是针对选定的行数),我怎样才能只要求一次?

vim
1个回答
0
投票

如果从

:help :function
向下滚动一点,您最终会看到
:help :func-range
,这解释了函数如何处理范围。转述…

  • 如果没有

    range
    参数,则为给定范围内的每一行调用该函数:

    function! Foo()
        echo a:firstline .. ':' .. a:lastline
    endfunction
    :4,8call Foo()
    4:8
    4:8
    4:8
    4:8
    4:8
    
  • 使用

    range
    ,该函数会被调用仅一次,并且预计会处理范围本身:

    function! Foo() range
        echo a:firstline .. ':' .. a:lastline
    endfunction
    :4,8call Foo()
    4:8
    
© www.soinside.com 2019 - 2024. All rights reserved.