VIM 文件搜索与替换
文件内搜索与替换
:[range]s/pattern/string/[c,e,g,i] 例如: :%s/oldword/newword/cg //对文本中全部匹配进行替换 :m,ns/oldword/newword/cg //对文件中部分行匹配进行替换 :s#str1/#st/cg //可以使用自定义的符号作为分隔符, 如#、;等,则中间出现的 / 不会作为分隔符 :%s/\s\+$//cg //删除行尾多余空格 :%s/^ \+//gc //删除行首所有空格 //range 指的是範圍,m,n 指從第m行至第n行,1,$ 指從第一行至最後一行,也可以 % 代表。 //pattern 就是要被替換掉的字串,可以用 regexp 來表示。 //string 將 pattern 由 string 所取代。 //c confirm,每次替換前會詢問。 //e 不顯示 error。 //g globe,不詢問,整行替換。 //i ignore 不分大小寫。 // 也可以用命令 :set ic 和 :set noic 来分别设置查找时不区分和区分大小写 // :set hls 和 :set nohlsearch 来设置是否高亮查询结果
多文件搜索与替换 —— args
如果你想将当前目录下所有类型的文件中的 oldword 替换为 newword,那么只需要打开当前目录下的某个文件,输入如下两条命令并回车:
:args *.* or */* :argdo %s/oldword/newword/egc | update
如果你想将某个目录下的某些文件中的 oldword 替换为 newword, 那么只需要将args命令修改为:
:args static/core/*.js :argdo %s/oldword/newword/egc | update
多文件搜索与替换方法——使用sed
sed -i
'/s/oldword/newword/g'
*.php
// -i 修改文件
// 注意需要在所修改的目录下执行
// 可以指定文件扩展名
sed -i "s/xxx/yyy/g" `git grep -l "xxx" api/template/` sed -i "s/xxx/yyy/g" `git grep -l "xx" api/template/`
多文件搜索——使用vimgrep
该命令是vim自带的查找命令,相较于grep来说,执行效率较低,但不受系统的限制(Windows的vim中也能用),用法与vim的文件内搜索/...类似
vimgrep可简写为vim
:vimgrep /{pattern}/[g][j] {file} ... //可选标志位:g 把每一行的多个匹配结果都加入,j 搜索完后定位到第一个匹配位置 //以下是可能常用到的方法: :vimgrep /word/ *.php //在当前目录下查找所有php文件 :vimgrep /word/ **/*.* //循环遍历查找所有子目录的所有文件 :vimgrep /word1.\+/word2/ {file} //在多个文件中查找同一行内包含word1和word2两个匹配的文件//此处用到了vim的正则匹配,\+限定为重复至少一次到无数次 :vimgrep /word1\_.\+/word2/ {file} //在多个文件中查找包含word1和word2两个匹配的文件(可以不同行),\_.表示包括换行符在内的所有字符 //搜索到的文件列表会加入到quickfix中去,执行: :copen //打开quickfix,显示搜索到的文件列表 :cclose //关闭quickfix :cn //转到下一个位置 :cp //转到前一个位置