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          //转到前一个位置

 

posted @ 2014-08-20 16:55  mininice  阅读(566)  评论(0编辑  收藏  举报