文章目录
  1. 1. 单词替换
  2. 2. 正则表达式:将 Last, First 改成 First, Last, 如何做呢?
    1. 2.1. from部分
    2. 2.2. to部分
  3. 3. 常用替换技巧
    1. 3.1. 删除多余的空格
    2. 3.2. 使用宏在多个文件中替换
    3. 3.3. 单词统计
    4. 3.4. 删除Windows文本文件中的 “^M” 标记

VIM是在Linux下使用最广泛的的文本编辑器,尤其是文本查找和替换命令,结合了正则表达式,非常强大。

本文列举了我经常使用的一些替换方法,仅供参考。

单词替换

%s/four/4/g
↑         ↑
|         +-- 替换行中所有的匹配项目
在所有行中执行替换

替换结果:

four --> 4
thirtyfour --> thirty4
  • \< 指定匹配单词的开始
  • > 指定匹配单词的结尾

    :%s/\<four\>/4/gc    //只替换 four
                    ↑
                    在每次替换前提示确认
    

正则表达式:将 Last, First 改成 First, Last, 如何做呢?

  • 原文: Doe, John Smith Peter
  • 改成: John Doe Peter Smith

替换命令

%s/\([^,]*\),\(.*\)/\2 \1/

对命令的解释:

%s from/to   //正斜杠区分 from 和 to 部分

from部分

`\([^,]*\),\(.*\)`

具体解释:

  • \( \) : 匹配”Last”部分
  • [^,] : 匹配除了逗号(,)之外的任何东西
  • * : 任意多次
  • , : 匹配逗号(,)
  • \( \) : 匹配”First”部分
  • . : 匹配任意字符
  • , : 任意多次

to部分

\2 \1   

其中,“\2”与“\1”称为反向引用,反向引用就是指前面from部分中 \(\) 之间的部分。

具体解释:

  • \2 : 指代第二对 \(\) 之间的部分,也就是 First部分
  • \1 : 指代第一对 \(\) 之间的部分,也就是 Last部分

在替换时,最多可以使用9个反向引用。\0 表示整个匹配的部分。

常用替换技巧

删除多余的空格

%s/\s\+$//

其中 \s\+$ 表示匹配 行末($ 前面的 一个或者多个(\+ 空格(\s

使用宏在多个文件中替换

例如,有一个包含C++代码的文件夹,所有文件都以 “*.cpp” 结尾,有一个名为 “GetResp” 的函数,现在要把它的名字改为 “GetAnswer”。

具体步骤如下:

vim *.cpp

vim启动后会待在第一个文件上,此时执行下面的命令:

qq

意思是用q作为寄存器启动一次记录,也可以使用qa~qz。
接着执行下面的命令:

:%s/\<GetResp\>/GetAnswer/g

意思是在第一个文件中替换并执行,接着执行下面的命令:

:wnext

意思是保存文件,并转到下一个文件。接着执行下面的命令:

q

意思是终止记录,然后执行下面的命令:

@q

意思是回放寄存器q中的操作过程,这回执行又一次的替换和 :wnext命令,这时可以看看录制的宏有没有出问题。

没有问题的话,接着执行下面的命令:

999@q

意思是对于剩下的文件执行寄存器q中录制的命令,执行999遍(999好像 @q 的最大值)。

此时会有一个问题,任何错误都会终止回放过程,如果有一个文件不包含 “GetResp”,VIM会报错,而且整个替换过程也会终止。为了避免此问题,改用下面的替换命令重新录制一下宏:

:%s/\<GetResp\>/GetAnswer/ge

其中,e 是标记通知,表示命令找不到的话,不算是错误。

单词统计

统计整个文件的单词可以使用下面的命令:

gCtrl + g

统计选项部分的单词,可以进入可视模式,选中区域,然后执行 gCtrl+g

删除Windows文本文件中的 “^M” 标记

使用下面的命令即可:

:%s/\r//g

或者

:%s/[Ctrl+v][Enter]//g

上面的 [Ctrl+v][Enter] 意思是 使用组合键 Ctrl+v之后,按下回车。

(END)

文章目录
  1. 1. 单词替换
  2. 2. 正则表达式:将 Last, First 改成 First, Last, 如何做呢?
    1. 2.1. from部分
    2. 2.2. to部分
  3. 3. 常用替换技巧
    1. 3.1. 删除多余的空格
    2. 3.2. 使用宏在多个文件中替换
    3. 3.3. 单词统计
    4. 3.4. 删除Windows文本文件中的 “^M” 标记