1. 搜索

命令 功能 备注
* 向下搜索光标所在处的词 n下一个,N上一个
# 向上搜索光标所在处的词 同上
[+<Ctrl>+i 跳转到光标所在处的变量的声明 使用tag
[+<Ctrl>+d 跳转到光标所在处的宏的定义 使用tag
ycm定位命令 跳转到光标所在处的变量的声明或定义

YouCompleteMe插件的功能,可以使用以下3个命令,
不过一般是用快捷键:

:YcmCompleter GoToDeclaration
:YcmCompleter GoToDefinition
:YcmCompleter GoToDefinitionElseDeclaration

/<pattern> 向下搜索模式<pattern> <pattern>不仅是简单的字符串,还可以是复杂的正则表达式
?<pattern> 向上搜索模式<pattern> 同上
/\c<pattern>
?\c<pattern>
不区分大小写地搜索<pattern> 小写字母c
/\C<pattern>
/\C<pattern>
区分大小写地的搜索<pattern> 大写字母C
:set ic
:set ignorecase
设定为不区分大小写的搜索模式  
:set noic
:set noignorecase
设定为区分大小写的搜索模式 默认为区分大小写
: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,然后替换为空就可以了。

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

  1. VIM 文件搜索与替换

    文件内搜索与替换 :[range]s/pattern/string/[c,e,g,i] 例如: :%s/oldword/newword/cg //对文本中全部匹配进行替换 :m,ns/oldword/ ...

  2. Vim进阶技术:搜索和替换

    行内搜索 行内搜索,也就是在当前行内进行搜索和移动,通常都与编辑命令一起使用. fx -- 移动到下一个字符x的位置,光标停留在x字符上面 tx -- 移动到下一个字符x的位置,光标停留在x前一个字符 ...

  3. [Vim] 搜索模式(正则表达式)

    本文介绍如何使用Vim的搜索模式. 搜索单词 Vim中使用 \< 和 \> 分别表示单词的开头和结尾,例如查找单词 i 而不是字母 i ,在正常模式下,按下 / 启动搜索模式,输入 \&l ...

  4. Vim查找与替换命令大全,功能完爆IDE!

    Vi/Vim 可以说是文本编辑中的一代传奇人物,直至现在,它仍然在高级程序员的武器库中占有一席之地.每个 Linux 发行版默认都包含Vim ,而且即使你不是 Linux 系统用户,你也可以安装 Vi ...

  5. 【转载】vim 中如何替换选中行或指定几行内的文本

    https://segmentfault.com/q/1010000002552573/a-1020000002552589 :'<,'>s/替换项/替换为/g 以下命令将文中所有的字符串 ...

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

    /********************************************************************** * Vim正则表达式匹配替换字符串 * 说明: * 用V ...

  7. vim搜索设置高亮

    vim搜索设置高亮 linux vim打开文档搜索字符串时,设置被搜索到字符串高亮显示. 有两种方法: 1.暂时设置:vim打开文档-->命令行形式输入set hlsearch. 缺点:关闭文档 ...

  8. vi的搜索和替换

    搜索中进行替换 /which #搜索which cwthat #替换成that n #重复搜索 . #重复替换 一种类型的替换命令 g/pattern/s/old/new/g 第一个 g 表示是有选择 ...

  9. vim g s 替换区别

    vim g s 替换区别     PS:一篇好文收藏备用,今天用它解决了一个大问题. 发信人: vale (浅谷), 信区: VIM标  题: global命令详解 发信站: 水木社区 (Fri Ju ...

  10. vim 搜索 向前,向后

    vim 搜索可以是 / 或者 ?,前者是往下找,后者是往前找. 用 n 查找下一个的时候,就和这两个指令指定的方向相同.如果你想改变方向的话,比如想往下找,那么 / 完了直接回车就行了.表示再次使用上 ...

随机推荐

  1. Redis 位操作

    [Redis 位操作] 1.GETBIT key offset 对 key 所储存的字符串值,获取指定偏移量上的位(bit). 当 offset 比字符串值的长度大,或者 key 不存在时,返回 0  ...

  2. sqlserver job 执行时间

    select instance_id,jh.run_date,jh.job_id,jh.step_name, case jh.run_status then 'failed' then 'Succee ...

  3. 九项重要的职业规划提示(转自W3School )

    1. 学习的步伐不停止 古人说,活到老,学到老.终身学习应该是您的座右铭. 世界在不断变化,每个人都在寻找各自的事业途径. 您只有保证了足够的技能储备,才能确保能够得到一份足够满意的工作. 为了保证您 ...

  4. Kafka学习整理五(Consumer配置)

    Property Default Description group.id   用来唯一标识consumer进程所在组的字符串,如果设置同样的group id,表示这些processes都是属于同一个 ...

  5. sql拼接字符串

    update boc_loan_apply set birthday=concat(birthday,'-01');

  6. 使用寄存器点亮LED等

    最基本的输入功能是检测外部输入电平,如把 GPIO引脚连接到按键,通过电平高低区分按键是否被按下. 基本结构分析 2. P-MOS管和 N-MOS管 main.c中的main函数

  7. sqlserver怎么将excel表的数据导入到数据库中

    在数据库初始阶段,我们有些数据在EXCEL中做好之后,需要将EXCEL对应列名(导入后对应数据库表的字段名),对应sheet(改名为导入数据库之后的表名)导入指定数据库, 相当于导入一张表的整个数据. ...

  8. MySql MyBatis 自动生成主键返回null

    <insert id="insert" parameterType="cn.zno.smse.pojo.UserScan" useGeneratedKey ...

  9. Summary #ToBeContinue......

    一.请回望暑假时的第一次作业,你对于软件工程课程的想象1)对比开篇博客你对课程目标和期待,“希望通过实践锻炼,增强计算机专业的能力和就业竞争力”,对比目前的所学所练所得,在哪些方面达到了你的期待和目标 ...

  10. [转]分布式中使用Redis实现Session共享(二)

    本文转自:http://www.cnblogs.com/yanweidie/p/4678095.html 上一篇介绍了一些redis的安装及使用步骤,本篇开始将介绍redis的实际应用场景,先从最常见 ...