VIM文本替换命令

在VIM中进行文本替换:

      1.   替换当前行中的内容:      :s/from/to/      (s即substitude)
            :s/from/to/       :   将当前行中的第一个from,替换成to。如果当前行含有多个
                                          from,则只会替换其中的第一个。
            :s/from/to/g      :   将当前行中的所有from都替换成to。
            :s/from/to/gc    :   将当前行中的所有from都替换成to,但是每一次替换之前都
                                          会询问请求用户确认此操作。

            注意:这里的from和to都可以是任何字符串,其中from还可以是正则表达式。

      2.   替换某一行的内容:         :33s/from/to/g
            :.s/from/to/g    :   在当前行进行替换操作。
            :33s/from/to/g   :   在第33行进行替换操作。
            :$s/from/to/g    :   在最后一行进行替换操作。

      3.   替换某些行的内容:         :10,20s/from/to/g
            :10,20s/from/to/g    :   对第10行到第20行的内容进行替换。
            :1,$s/from/to/g       :   对第一行到最后一行的内容进行替换(即全部文本)。
            :1,.s/from/to/g       :   对第一行到当前行的内容进行替换。
            :.,$s/from/to/g       :   对当前行到最后一行的内容进行替换。
            :'a,'bs/from/to/g    :   对标记a和b之间的行(含a和b所在的行)进行替换。
                                                其中a和b是之前用m命令所做的标记。

      4.   替换所有行的内容:         :%s/from/to/g
            :%s/from/to/g    :   对所有行的内容进行替换。

      5.   替换命令的完整形式:      :[range]s/from/to/[flags]
            5.1 s/from/to/
                  把from指定的字符串替换成to指定的字符串,from可以是正则表达式。
            5.2 [range]
                  有以下一些表示方法:
                  不写range    :   默认为光标所在的行。
                  .                :   光标所在的行。
                  1                :   第一行。
                  $                :   最后一行。
                  33               :   第33行。
                  'a               :   标记a所在的行(之前要使用ma做过标记)。
                  .+1             :   当前光标所在行的下面一行。
                  $-1             :   倒数第二行。(这里说明我们可以对某一行加减某个数值来
                                          取得相对的行)。
                  22,33          :   第22~33行。
                  1,$             :   第1行 到 最后一行。
                  1,.             :   第1行 到 当前行。
                  .,$             :   当前行 到 最后一行。
                  'a,'b          :   标记a所在的行 到 标记b所在的行。

                  %                :   所有行(与 1,$ 等价)。

                  ?chapter?    :   从当前位置向上搜索,找到的第一个chapter所在的行。(
                                          其中chapter可以是任何字符串或者正则表达式。
                  /chapter/    :   从当前位置向下搜索,找到的第一个chapter所在的行。(
                                          其中chapter可以是任何字符串或者正则表达式。

                  注意,上面的所有用于range的表示方法都可以通过 +、- 操作来设置相对偏
                  移量。

            5.3 [flags]
                  这里可用的flags有:

                  无         :   只对指定范围内的第一个匹配项进行替换。
                  g          :   对指定范围内的所有匹配项进行替换。
                  c          :   在替换前请求用户确认。
                  e          :   忽略执行过程中的错误。

                  注意:上面的所有flags都可以组合起来使用,比如 gc 表示对指定范围内的
                  所有匹配项进行替换,并且在每一次替换之前都会请用户确认。


注:如果在替换、查找时有特殊字符,如 ^、$、*、/ 和 .,需要在前面加 \ 来转义。

Vim 是一款强大的文本编辑器,它支持多种高级功能,包括模式输入、宏录制、脚本编写等。在 Vim 中,进行全局替换是一项常见的任务,尤其是当你需要在整个文件或者多个文件中快速修改某些字符串时。 ### 全局替换命令通配符 在 Vim 中进行全局替换的一个关键命令是 `:%s/old/new/g` 。这个命令的基本组成部分及其含义如下: - `%`: 表示从当前文件的所有行开始操作。 - `s`: 是“substitute”的缩写,表示替换。 - `/old/`: 这里是你要寻找的旧字符串(即 "old")。 - `/new/`: 这是替换后的字符串(即 "new")。 - `g`: 这个字母代表“global”,意味着替换操作将应用到整行,并不只是匹配到的第一个位置。 #### 示例说明 假设你在 Vim 编辑器打开一个名为 `example.txt` 的文件,你想把所有的 `hello` 替换成 `hi`。那么,你可以按照下面的步骤操作: 1. 打开文件并切换到命令模式(使用 `Esc` 键退出插入模式)。 2. 输入命令 `:%s/hello/hi/g` 并按 Enter 键执行。 此时,Vim 将会搜索整个文档,并将所有出现的 `hello` 字符串替换为 `hi`。如果需要对特定范围内的行进行全局替换,可以指定行数,例如 `5,100s/old/new/g` 可以替换第5行到第100行之间的 `old` 为 `new`。 ### 相关问题: 1. **如何区分局部替换与全局替换的区别?** 当只使用 `s` 或者 `S` 而不添加 `g` 标志时,Vim 将仅替换光标所在行的第一个匹配项。而添加 `g` 则表示全局替换。 2. **能否使用正则表达式进行更复杂的替换?** 是的,可以使用正则表达式作为第一个参数来增加复杂度。例如,`:%s/\bword\b/replacement/g` 可以替换单词边界处的 'word' 为 'replacement'。 3. **如何撤销最近的一次全局替换?** 使用 `u` 命令可以撤销最后一次操作,包括但不限于全局替换。如果误操作,可以及时恢复之前的状态。 通过了解以上信息,你可以在 Vim 中更高效地处理文本编辑任务,特别是在需要大量修改文本的情况下。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值