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

发布于 2022-09-05 04:07:49 字数 1253 浏览 35 评论 0

已经有下面的文档

    
    <a id="" href=""></a>
    <a id="" href=""></a>
    <a id="" href=""></a>

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

    home
    help
    variables
    
 

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

    <a id="" href="">home</a>
    <a id="" href="">help</a>
    <a id="" href="">variables</a>  
    
    如果vim不行,用awk可以吗?     

这个答复不行,

先输入

home
help
variables

然后使用 s 命令
输入 :%s/^/<a id="" href="">/g 回车
再输入 :%s#$#</a>#g 回车

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

  
    <a id="" href="">home</a>
    <a id="" href="">help</a>
    <a id="" href="">variables</a>  
    
    形成下面的
    
    <a id="home" href="">home</a>
    <a id="help" href="">help</a>
    <a id="variables" href="">variables</a>  
    
    你又如何办?
    
    再走远一点
    <a id="home" href="home.html">home</a>
    <a id="help" href="help.html">help</a>
    <a id="variables" href="variables.html">variables</a>  
    
    你如何快速搞定??
    

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(8

好多鱼好多余 2022-09-12 04:07:49

光标移到左上home前

<C-v>jj$x<ESC>

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

p
贱贱哒 2022-09-12 04:07:49

先输入

home
help
variables

然后使用 s 命令
输入 :%s/^/<a id="" href="">/g 回车
再输入 :%s#$#</a>#g 回车

静若繁花 2022-09-12 04:07:49

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

如何视而不见 2022-09-12 04:07:49

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

兮颜 2022-09-12 04:07:49

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

gif

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

操作顺序:

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

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

  3. $ 把光标移至 "home" 结尾,按 p 粘贴

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

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

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

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

独孤求败 2022-09-12 04:07:49

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

#! /bin/bash
i=1
rm sd.f
cat sd.in | while read LINE
do
   echo "${i}s/>/>${LINE}/" >>sd.f
   #echo "${i}s/id=\"/id=\"${LINE}/" >>sd.f     #第二次处理
   #echo "${i}s/ref=\"/ref=\"${LINE}.html/" >>sd.f     #第三次处理
   ((i++))
done
#cat sd.f
sed -f sd.f test.txt

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

沉睡月亮 2022-09-12 04:07:49
# 光标定位到第一行 a 标签
qa # 开始录制宏
<n>jyw # 复制要插入的文本
<n>kf>p # 回到对应到 a 标签,找到对应到位置,粘贴
j0 # 光标下移一行
q # 结束录制
2@a # 重播宏

# 上面的 <n> 是个数字,取决于你第一行 a 标签与第一行待插入文本之间的行数
木格 2022-09-12 04:07:49

awk比vi更适合处理这种问题:

$ cat a
<a id="" href=""></a>
<a id="" href=""></a>
<a id="" href=""></a>

$ cat b
home
help
variables

$ awk -F'[<>]' '{getline s<"b";sub(/></,">"s"<")}1' a
<a id="" href="">home</a>
<a id="" href="">help</a>
<a id="" href="">variables</a>

再走远一点:

$ awk -F'[<>]' -vq='"' '{getline s<"b";sub(/></,">"s"<");sub(/""/,q s q);sub(/""/,q s".html" q)}1' a
<a id="home" href="home.html">home</a>
<a id="help" href="help.html">help</a>
<a id="variables" href="variables.html">variables</a>
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文