如何在Vim中为可视化选中的多行区块首尾添加文本?已有单行方案求多行方法
解决Vim可视化多行批量添加首尾文本的问题
嘿,我明白你想要实现的效果——在Vim里可视化选中多行区块,给每行的选中部分批量加上前缀\[ 和后缀 \]。你的单行命令已经很棒了,只需要做一点调整就能支持多行场景,下面分两种常见情况给你方案:
情况1:选中多行的部分内容(非整行)
把你的原命令修改成这样:
autocmd BufEnter *.tex,*.html vmap bb :'<,'>s/\%V\(.\{-}\)\%V/\\[ \1 \\]/<CR>
关键修改点说明:
:'<,'>:这是Vim自动填充的可视化选中范围标记,确保替换操作作用在你选中的所有行上,而不是只处理当前行\%V\(.\{-}\)\%V:用非贪婪匹配.\{-}替代原来的\S.*\S,可以精准匹配选中区域内的所有内容(包括前后空格),同时\%V标记限定了替换只在可视化选中的范围内生效\1:引用捕获组里的选中内容,和原命令的\0效果类似,但用捕获组更清晰可控
情况2:选中多行的整行内容
如果你的需求是给整行批量加前缀后缀,这个场景可以用更简洁的命令:
autocmd BufEnter *.tex,*.html vmap bb :'<,'>s/^/\\[ /<CR>:'<,'>s/$/ \\]/<CR>
逻辑说明:
- 第一个替换
:s/^/\\[ /:给选中每行的开头添加\[ - 第二个替换
:s/$/ \\]/:给选中每行的结尾添加\] - 两条命令用
<CR>连接,执行时会连续完成两个操作,一步到位
测试小技巧
你可以随便打开一个.tex或.html文件,选中多行(部分内容或整行),按下bb就能看到效果啦。如果需要调整前缀后缀,直接修改命令里的\\[ 和 \\]部分就行,注意转义符\不要丢哦~
内容的提问来源于stack exchange,提问作者Aron Lee
相关产品推荐
相关产品推荐

