當(dāng)前位置:首頁 > IT技術(shù) > 系統(tǒng)服務(wù) > 正文

oeasy教您玩轉(zhuǎn)vim - 53 - # 批量替換
2021-10-04 11:30:46


show: step
version: 1.0
enable_checker: true

查找細(xì)節(jié)

回憶上節(jié)課內(nèi)容??

  • 我們溫習(xí)了關(guān)于搜索的相關(guān)內(nèi)容
    • <kbd>/</kbd>正向,<kbd>?</kbd>反向
    • <kbd>n</kbd>保持方向,<kbd>N</kbd>改變方向
    • 可以設(shè)置
      • 是否忽略大寫小寫
      • 是否從頭開始查找
      • 是否高亮顯示
  • 還有一些正則表達(dá)式的使用方法
    • 行頭行尾 ^$
    • 詞頭詞尾 &lt;&gt;
    • 字符列表[a-z][A-Za-z_]
    • 包含回車one\_stwo
  • 數(shù)量
    • 數(shù)量*、?=
    • 具體數(shù)量 {1,3}
    • 非貪婪 {-}
  • 不以什么為開頭結(jié)尾
    • 不以什么為開頭 @&lt;!
    • 不以什么為結(jié)尾 @!
  • 查找出來怎么替換呢???

查找手冊(cè)??

  • :h :s

未標(biāo)題-3.png

  • :s命令 對(duì)應(yīng)的是 substitude替換
  • 我們先做個(gè)實(shí)驗(yàn)環(huán)境
  • :r !ls -lah

具體操作

圖片描述

  • 3G跳轉(zhuǎn)到第三行
  • :s/shiyanlou/oeasy
    • 把當(dāng)前行的shiyanlou換成oeasy
  • 我想在同一行里面再換下一個(gè)
    • 就可以<kbd>:</kbd><kbd>??</kbd>
    • 找到上一條命令
    • 然后再回車執(zhí)行
  • 我想把下一行的2個(gè)oeasy一把都換掉
  • 這就要加flag

添加flag

  • 哪個(gè)flag呢?
  • 我們可以在:h :s的時(shí)候,使用/flag
  • 也可以:h s_flags

圖片描述

  • 我們這次的flag是g
    • 換一行
    • :s/shiyanlou/oeasy/g
    • 可以把這一行所有的 shiyanlou 換成 oeasy
    • 我理解這個(gè)g指的是行內(nèi)所有的
    • 如果我想默認(rèn)g-flag就開著呢?

默認(rèn)g-flag

圖片描述

  • 如果 :se gdefault
    • 可以設(shè)置g為默認(rèn)
  • 但是這個(gè)只能替換一行
  • 我想在某些行的范圍內(nèi)替換怎么辦呢?
  • range

添加range

  • 精準(zhǔn)控制
    • :3,8s/shiyanlou/oeasy/g
    • 只替換3-8行的
    • 而且開了g flag
    • 3,8行
    • 每行的都全部替換
  • 全部替換

    • % 相當(dāng)于 1,$
    • :%s/shiyanlou/oeasy/g
    • :1,$s/shiyanlou/oeasy/g
    • 就會(huì)把所有的都替換了
  • 但是這個(gè)一把都替換了
  • 有的時(shí)候我還是想具體一個(gè)個(gè)確認(rèn)怎么辦?

圖片描述

逐個(gè)確認(rèn)

圖片描述

  • :h s_flags找到一個(gè)c
    • c的意思是confirm確認(rèn)
  • :%s/shiyanlou/oeasy/gc
    • 行里的都替換
    • 每一個(gè)都需要確認(rèn)
  • 每個(gè)逐個(gè)確認(rèn)
    • <kbd>y</kbd>替換當(dāng)前匹配
    • <kbd>l</kbd>替換當(dāng)前匹配,并退出
    • <kbd>n</kbd>跳過當(dāng)前匹配
    • <kbd>esc</kbd>直接退出
    • <kbd>q</kbd>直接退出
    • <kbd>a</kbd>全部替換
  • 體會(huì)一下 a 的快樂??

小技巧

圖片描述

  • /let
    • 搜索let
  • cwconst<kbd>esc</kbd>
    • 把當(dāng)前單詞變成const
    • <kbd>n</kbd>跳過當(dāng)前匹配
    • <kbd>n</kbd>再跳過當(dāng)前匹配
    • <kbd>n</kbd>還跳過當(dāng)前匹配
    • <kbd>N</kbd>往回跳
  • 重做
    • <kbd>.</kbd>
      • 需要替換的就替換
    • <kbd>n</kbd>
      • 需要跳過的就跳過
    • <kbd>N</kbd>
      • 跳錯(cuò)了就跳回來

總結(jié)

  • 我們學(xué)習(xí)了
    • 替換 substitude
  • 替換單行
    • :s/shiyanlou/oeasy
  • 加上range
    • :3,5s/shiyanlou/oeasy
    • :%s/shiyanlou/oeasy
  • 加上flag
    • :3,5s/shiyanlou/oeasy/g 多個(gè)替換
    • :3,5s/shiyanlou/oeasy/gc 多個(gè)替換且逐個(gè)確認(rèn)
  • 替換還是很方便的
  • 但是我想替換中使用正則表達(dá)式
  • 可以么???
  • 下次再說 ??

[Github地址] (https://github.com/overmind1980/oeasyvim)
[Gitee地址] (https://gitee.com/overmind1980/oeasyvim)
[藍(lán)橋?qū)嶒?yàn)樓 邀請(qǐng)碼FJWYIMGB] (https://www.lanqiao.cn/courses/2840)

本文摘自 :https://blog.51cto.com/u

開通會(huì)員,享受整站包年服務(wù)立即開通 >