Vim自定义Quoter映射函数多次弹出输入框,如何实现仅询问一次?
解决Vim映射多次弹出输入请求的问题
修改后的完整代码
" Quoter/Wrapper - 用指定符号包裹选中行的所有单词 function! Quoter(symbol) range execute a:firstline . ',' . a:lastline . 's/\S\+/' . a:symbol . '&' . a:symbol . '/g' endfunction xnoremap <Leader>QQ :let s:symbol = input('Symbol(Quoter)') <bar> call Quoter(s:symbol)<CR>
关键修改点说明
- 调整函数定义:给
Quoter函数添加range关键字,让Vim自动将选中范围的起始行(a:firstline)和结束行(a:lastline)传入函数,无需手动在映射中拆分范围。 - 重构映射逻辑:先通过
input()一次性获取包裹符号,再调用Quoter处理整个选中范围。原写法<line1>,<line2>call会让Vim对每一行单独执行函数,导致多次弹出输入框;新写法保证输入仅触发一次。 - 使用安全映射:用
xnoremap替代map,确保映射仅在可视模式生效,同时避免递归调用风险。
内容的提问来源于stack exchange,提问作者Z1g0t0
相关产品推荐
相关产品推荐

