awk - 如何用vim进行多行编辑,同时在同一纵向位置插入文本?

浏览:38日期:2023-08-14

问题描述

已经有下面的文档

<a id='' href='https://www.6hehe.com/wenda/18092.html'></a> <a id='' href='https://www.6hehe.com/wenda/18092.html'></a> <a id='' href='https://www.6hehe.com/wenda/18092.html'></a>

系统剪贴板里面有如下内容:

home help variables

需要在每行的第15个位置处插入,形成下面的格式

<a id='' href='https://www.6hehe.com/wenda/18092.html'>home</a> <a id='' href='https://www.6hehe.com/wenda/18092.html'>help</a> <a id='' href='https://www.6hehe.com/wenda/18092.html'>variables</a> 如果vim不行,用awk可以吗?

这个答复不行,

先输入

homehelpvariables

然后使用 s 命令输入 :%s/^/<a id='' href='https://www.6hehe.com/wenda/18092.html'>/g 回车 再输入 :%s#$#</a>#g 回车

如果我进一步,需要从这个基础上

<a id='' href='https://www.6hehe.com/wenda/18092.html'>home</a> <a id='' href='https://www.6hehe.com/wenda/18092.html'>help</a> <a id='' href='https://www.6hehe.com/wenda/18092.html'>variables</a> 形成下面的<a href='https://www.6hehe.com/wenda/18092.html'>home</a> <a href='https://www.6hehe.com/wenda/18092.html'>help</a> <a href='https://www.6hehe.com/wenda/18092.html'>variables</a> 你又如何办?再走远一点 <a href='https://www.6hehe.com/wenda/home.html'>home</a> <a href='https://www.6hehe.com/wenda/help.html'>help</a> <a href='https://www.6hehe.com/wenda/variables.html'>variables</a> 你如何快速搞定??

问题解答

回答1:

光标移到左上home前

<C-v>jj$x<ESC>

光标移到第一个</a>之前

p回答2:

先输入

homehelpvariables

然后使用 s 命令输入 :%s/^/<a id='' href='https://www.6hehe.com/wenda/18092.html'>/g 回车 再输入 :%s#$#</a>#g 回车

回答3:

看了一下你的需求, 觉得你可能需要的是 vim-snippets 插件

回答4:

光标移到第一个</a>之前:<c-v>jjjp

回答5:

对于第一个需求,不需要替换,可以这样实现:

awk - 如何用vim进行多行编辑,同时在同一纵向位置插入文本?

图片比较大,如果加载不出来,这里是原地址

操作顺序:

光标移到第一行的 '' 的 '<' 位置,Ctrl+v 进入列选择模式,jj$ 选中所有的 </a>,然后 d

光标移至 'home' 那一行,Shift + v 进入行选择模式,jj 选中三行,然后 :right,回车

$ 把光标移至 'home' 结尾,按 p 粘贴

gv 选中所有,然后 :left,回车

光标在第一行 'home' 的 'h' 上,Ctrl + v 进入列选择模式,jj$y 复制三行

gg$ 光标移至第一行末尾,然后 p

第二个需求同理,剪切一下 id='' 第二个引号以及后面内容就行了。第三个需求,暂时想不出更好的方法

回答6:

可以用 Bash+Sed可以处理,不过这样处理就像是用程序语言处理一样

#! /bin/bashi=1rm sd.fcat sd.in | while read LINEdo echo '${i}s/>/>${LINE}/' >>sd.f #echo '${i}s/id='/ >>sd.f #第二次处理 #echo '${i}s/ref='/ref='${LINE}.html/' >>sd.f #第三次处理 ((i++))done#cat sd.fsed -f sd.f test.txt

备注:test.txt是要处理的源文件,sd.f是用程序生成的存放sed处理命令的文件。sd.in是存放的变量值,即home,help……三个值

回答7:

# 光标定位到第一行 a 标签qa # 开始录制宏<n>jyw # 复制要插入的文本<n>kf>p # 回到对应到 a 标签,找到对应到位置,粘贴j0 # 光标下移一行q # 结束录制2@a # 重播宏# 上面的 <n> 是个数字,取决于你第一行 a 标签与第一行待插入文本之间的行数

相关文章: