我正在做一个映射到一个函数,该函数接受一个符号作为 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>
这似乎工作得很好,除了多次要求输入(似乎是针对选定的行数),我怎样才能只要求一次?
如果从
: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