乐趣区

关于vim:oeasy教您玩转vim-67-批量替换

批量替换

回顾上次

  • 咱们能够用 vimdiff 疾速的比拟文件
  • 这很实用!!!
  • 实用的一些跳转形式
  • 遍历所有的批改 change

    • ]c 下一条批改
    • 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/overmind19…)
[Gitee 地址] (https://gitee.com/overmind198…)
[蓝桥实验楼 邀请码 FJWYIMGB] (https://www.lanqiao.cn/course…)

退出移动版