You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 20:29:56