欢迎光临散文网 会员登陆 & 注册

oeasy教您玩转vim - 67 - # 批量替换

2021-11-22 09:10 作者:oeasy  | 我要投稿

批量替换

回忆上次

  • 我们可以用vimdiff快速的比较文件

  • 这很实用!!!

  • 实用的一些跳转方式

  • 遍历所有的修改change

    • ]c 下一条修改

    • [c 上一条修改

  • 遍历所有的函数method

    • ]m 下一条修改

    • [m 上一条修改

  • 面对不同点

    • 把当前的改成对比的 - do - diff obtain

    • 把对比的改成当前的 - dp - diff put

  • 关于多窗口

  • 还有什么好玩的吗?🤔

回忆同时打开2个文件执行windo

  • vi -o o1 o2

  • :windo normal Ioeasy

    • windo 所有窗口都执行

    • normal 进入普通模式

    • Ioeasy 插入oeasy

  • :windo normal o

    • windo 所有窗口都执行

    • normal 进入普通模式

    • o 换行

  • :windo normal "%p

    • windo 所有窗口都执行

    • normal 进入普通模式

    • "%p 粘贴各自文件名

批量替换

  • :windo %s/oeasy/o2z/g

    • windo 所有window窗口都进行

    • %s/oeasy/o2z/goeasy 替换为 o2z

    • 然后可以:wqall 全部保存

批量细节

  • 可以设置range,这个指的是window编号

    • :1,3windo normal Ioeasy

  • 可以执行批处理序列,用|隔开各个命令

    • :windo %s/oeasy/o2z/g| %s/o2z/o3z/g

    • 这样就可以执行两条替换命令了

    • :windo set nolist nofoldcolumn | colorscheme blue  

bufdo

  • 除了windo

  • 我们还可以对每一个buffer执行命令

    • :bufdo %s/oeasy/o2z/g| %s/o2z/o3z/g

    • 可以设置 autowrite 自动保存

    • 也可以设置 hidden 支持未修改buffer隐藏

    • 还可以 :bufdo %s/oeasy/o2z/g| %s/o2z/o3z/g|update 自动更新

  • :ls:buffers 查看当前的buffers列表

  • :bd1:bd o2z.txt 可删除buffers

  • e .可打开新的buffer缓冲

  • 可以用:b1选择缓存

argdo

  • 我们还有一种批量执行命令的方式

  • :argdo %s/oeasy/o2z/g| %s/o2z/o3z/g

  • 打开.c文件,设置文件格式并更新

    • :args *.c

    • :argdo set ff=unix | update

  • 打开.c.h文件,批量替换并更新

    • :args *.[ch]    

    • :argdo %s/\<my_foo\>/My_Foo/ge | update    

  • 可以用:args查看相应的参数列表

  • 可以用:argd删除参数

  • 可以用:arga添加参数

把网页文件批量替换md文件

  • vi **/*.html

    • 把2级目录下所有html用vim打开

  • :args

    • 观察所有参数

  • :argdo %s/<img src=\"\(.\{-}\)\" title=\"\(.\{-}\)\" \/>/[!\2]\1 | update

    • 替换img标签

  • :argdo %s/<a href=\"\(.\{-\})\">\(.\{-\}\)<\/a>/[\2]\1/g | update

    • 替换a标签

  • :%s/<h1>\(.*\)</h1>/- \1/gc

    • 替换h1标签

  • :%s/<h2>\(.*\)</h2>/        - \1/g

    • 替换h2标签

之前 - zs

  • 要求

    • oeasy.org 替换为 oeasy.io

    • 但是 vim.org 不替换

  • /oeasy\zs.org

    • 查找前面有oeasy.org

  • :%s/oeasy\zs.org/.io/g

    • 前面是 oeasy .org 换成 .io

  • :%s/\<o.*\zs.org/.io/g

    • o 为单词开头的 .org 都替换

多文件替换

  • :argdo %s/\<o.*\zs.org/.io/g | update

    • 对所有的arguments参数

    • 执行全文批量替换

    • 并且更新

  • /^\s*\zsif

    • 开头只有空格和tab的if

  • /\(.\{-}\zsFab\)\{3}

    • 第三个 Fab

之后 - ze

  • end\ze\(if\|for\)

    • endifendfor 中的 end

综合应用

  • \<o.*\ze\.o.g

    • o 开头的

    • 后面跟 o 什么 g

  • :bufdo %s/\<o.*\ze\.o.g/ooo/g

    • 把以 o 开头的、后面跟 o 什么 g 的单词都换成 ooo

    • 对于所有的 buffers

    • 全文替换

总结

  • 这次有三种批量替换,分别是

    • :windo

    • :bufdo

    • :argdo

    • 执行的{cmd}可以用按顺序增加

  • 分别对应的

    • windows

    • buffers

    • arguments

  • 各有各自的列表、切换、删除增加的方式

  • 以什么开始、结束的模式

    • zs

    • ze

  • 关于 window 窗口容器

    • 我们切得越细

    • 可用的范围越小

    • 总共 80*24 的屏幕资源很快就用完了

  • 我又想多线程访问

  • 又想有足够的屏幕来编辑

  • 那怎么办呢?🤔

  • 除了window之外还有容器吗?🤔

  • 下次再说 *

[Github地址] (https://github.com/overmind1980/oeasyvim)
[Gitee地址] (https://gitee.com/overmind1980/oeasyvim)
[蓝桥实验楼 邀请码FJWYIMGB] (https://www.lanqiao.cn/courses/2840)


oeasy教您玩转vim - 67 - # 批量替换的评论 (共 条)

分享到微博请遵守国家法律