VIM中的文本替换命令

转载自:vim文本替换命令 – 折翼的飞鸟 – 博客园
http://www.cnblogs.com/wind-wang/p/5768000.html

在VIM中进行文本替换,目录如下:

 

1. 字符串替换

1.1 替换当前行中的内容::s/from/to/

s是switch的意思,即替换

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

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

1.2 替换某一行的内容: :33s/from/to/g

  • :.s/from/to/g:在当前行进行替换操作。
  • :33s/from/to/g:在第33行进行替换操作。
  • :$s/from/to/g:在最后一行进行替换操作。

1.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命令所做的标记。

1.4 替换所有行的内容: :%s/from/to/g

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

1.5 替换命令的完整形式: :[range]s/from/to/[flags]

1.5.1 s/from/to/

把from指定的字符串替换成to指定的字符串,from可以是正则表达式。

1.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的表示方法都可以通过 +、- 操作来设置相对偏移量。

1.5.3 [flags]

这里可用的flags有:

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

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

2. 统计字符串出现次数

多按几次ESC键,进入普通模式。输入:(英文半角的冒号)进入命令模式。假设要统计的字符为”test”,再输入%s/test/&/gn后回车。此时就能看到屏幕下方显示的数字。

发表评论

电子邮件地址不会被公开。 必填项已用*标注