【vim】搜索与替换

1. 搜索

命令 功能 备注
* 向下搜索光标所在处的词 n下一个,N上一个
# 向上搜索光标所在处的词 同上
[+<Ctrl>+i 跳转到光标所在处的变量的声明 使用tag
[+<Ctrl>+d 跳转到光标所在处的宏的定义 使用tag
ycm定位命令 跳转到光标所在处的变量的声明或定义
YouCompleteMe插件的功能,可以使用以下3个命令,
不过一般是用快捷键:

:YcmCompleter GoToDeclaration
:YcmCompleter GoToDefinition
:YcmCompleter GoToDefinitionElseDeclaration

/<pattern> 向下搜索模式<pattern> <pattern>不仅是简单的字符串,还可以是复杂的正则表达式
?<pattern> 向上搜索模式<pattern> 同上
:vimgrep <pattern> <files> 在文件中搜索模式<pattern>
比如在当前目录所有.cpp文件中搜索abc:
:vimgrep abc *.cpp
如果想搜索子目录,是这样
:vimgrep abc **/*.cpp

出来的结果在quickfix窗口,用命令:cw呼出

2. 替换

命令 功能 备注
<scope>s/<pattern>/<str>[/<option>] 把scope指定的范围内匹配pattern的所有字符串
替换为str,option为可选参数

带option时,前面要加/
举例
:%s/abc/xyz/gc
将当前文件中所有abc替换为xyz,并在替换前进行确认

选项g:替换每一行所有abc,如果不加只替换第一个
选项c:替换前询问用户进行确认,用户可以选择y确认,
n否认并跳到下一个匹配,q停止,a不要再询问了全部yes

:args <files>
:argdo <scope>s/<pattern>/<str>[/<option>]
在文件<files>中把scope指定的范围内匹配pattern
的所有字符串替换为str,option为可选参数

各参数说明同上。举例
:args *.txt *.cpp
:argdo %s/hate/love/gc | update
将当前目录下所有txt和cpp文件中的hate替换为love,
每次替换前确认;update命令会在文件有改变时进行
保存。

注意:文件中替换操作不可恢复,请仔细操作,做好备份

vim很多操作都带范围参数,替换命令也不例外。上述命令中的%代表范围为所有行,另外还有m, n意思是从第m行到第n行。

3. 小技巧

3.1 将正文中的一段文本复制到命令行

先复制,到命令行后,<Ctrl>+r+" ("是<Shift>+’按出来的).

另外,再提醒一下:
<Ctrl>+p是自动输入上一次命令,<Ctrl>+n是自动输入下一次命令,
<Ctrl>+b是跳到命令行首,<Ctrl>+e是跳到命令行尾

3.2 替换 \n 换行符

场景:

用 VIM 编辑文本文件,想在每一行的换行之前,添加一个字符,比如 “;”。

想到替换命令:

:%s/\n/;\n/g

结果总是出错。

后来找到解决方案:

:%s/\n/;\r/g

有人总结的结论:

When searching: \n is newline, \r is CR (carriage return = Ctrl-M = ^M)
When replacing: \r is newline, \n is a null byte (0×00).

意思是:

字符串查找时,”\n” 是换行,”\r” 是回车,也就是经常会看到的 ^M(备注-1)。

字符串替换时,”\r” 是换行,’\n” 是空字符(0×00)。

更多细节可以参考 http://vim.wikia.com/wiki/Search_and_replace

3.3 清除所有 ^M

一些在windows上编辑的文件拷贝到linux上时行尾可能会出现^M,有时希望替换掉,命令如下
:%s/<Ctrl>+v <Ctrl>+m//g

就是 Control 键+V,然后再 Control 键 + M,就变成了 ^M,然后替换为空就可以了。

时间: 2024-10-28 21:49:38

【vim】搜索与替换的相关文章

webstorm正则搜索与替换

div{ clear: both; } --> webstorm正则搜索与替换 序号  功能 代码 1 所有p标签及内部内容 <p>[\s\S]*?</p> 2 匹配body内容  <body[\s\S]*?</body>       默认配置-Eclipse的常用快捷键对照表 查找/代替 Webstorm快捷键 Eclipse快捷键 说明 ctrl+shift+N ctrl+shift+R 通过文件名快速查找工程内的文件(必记) ctrl+shift+al

sublime搜索和替换-单文件搜索

Searching To open the search panel for the active file, press Ctrl + F. Someoptions and actions available through this panel can be controlled from thekeyboard: Toggle Regular Expressions Alt + R Toggle Case Sensitivity Alt + C Toggle Exact Match Alt

sublime搜索和替换--多文件搜索替换

Search and Replace - Multiple Files Searching To open the search panel for files, press Ctrl + Shift + F. You can use thekeyboard to control some search panel options and search actions: Toggle Regular Expressions Alt + R Toggle Case Sensitivity Alt

emacs搜索和替换

搜索/替换(Seach/Replace) C-s 向后搜索 C-r 向前搜索 C-g 回到搜索开始前的位置(如果你仍然在搜索模式中) M-% 询问并替换(query replace) Space或y 替换当前匹配 Del或n 不要替换当前匹配 . 仅仅替换当前匹配并退出(替换) , 替换并暂停(按Space或y继续) ! 替换以下所有匹配 ^ 回到上一个匹配位置 RETURN或q 退出替换 使用正则表达式(Regular expression)搜索/替换 可在正则表达式中使用的符号: ^ 行首

vi的搜索和替换

搜索中进行替换 /which #搜索which cwthat #替换成that n #重复搜索 . #重复替换 一种类型的替换命令 g/pattern/s/old/new/g 第一个 g 表示是有选择的操作, pattern 指定选择行的模式, s 表示替换操作, old 是要替换的内容, new 是新内容, g 表示全局替换下面是一些例子: #给第一到十行加上括弧 :1,10/.*/(&)/ 其中的 & 代表的是搜索模式 ~ 代表上一次替换命令中制定的替换文本 \u 改成大写 \l 改成

vim功能之替换和查找

vim有着强大的替换和查找功能,若能进行熟练的运用,可以让工作效率得到一个很大程度的提高. 替换 语法:[addr]s/源字符串/目的字符串/[option] [addr]表示检索范围,如: "1,n":表示从第1行到n行"%":表示整个文件,同"1,$"".,$":表示从当前行到文件尾 [addr]省略时表示当前行 s:表示替换操作,其为substitute的缩写 [option] : 表示操作类型,如: g:globe,表

Vim正则表达式匹配替换字符串

/********************************************************************** * Vim正则表达式匹配替换字符串 * 说明: * 用Vim用了几年了,平时也就替换字符串比较多,很少用正则表达式替换, * 今天在修改HTML文档的时候,不想一个一个去替换. * * 2018-6-1 深圳 宝安西乡 曾剑锋 ****************************************************************

字符串忽略大小写的搜索和替换

需求:字符串忽略大小写搜索和替换 解决: 使用re.IGNORECASE import re text = 'UPPER PYTHON, lower python, Mixed Python' f = re.findall("python", text, flags=re.IGNORECASE) print(f) s, n = re.subn("python","snake",text, flags=re.IGNORECASE) print(s)

43 正则中用sub和subn函数搜索与替换 使用split函数分隔字符串 练习题

第10课 正则中用sub和subn函数搜索与替换 # 使用sub和subn函数搜索和替换 ''' sub(正则表达式,要替换的字符串,母字符串) ''' import re result = re.sub('Bill','Mike', 'Bill is my son.') print(result) # Mike is my son. 把Bill 替换成 Mike result = re.subn('Bill', 'Mike', 'Bill is my son, I like Bill') pr