zoukankan      html  css  js  c++  java
  • 【vim】搜索与替换

    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 替换 换行符

    场景:

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

    想到替换命令:

    :%s/ /; /g

    结果总是出错。

    后来找到解决方案:

    :%s/ /; /g

    有人总结的结论:

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

    意思是:

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

    字符串替换时,” ” 是换行,’ ” 是空字符(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,然后替换为空就可以了。

  • 相关阅读:
    Maven配置--《maven实战》读书笔记
    设置定时任务
    C#中的==
    C# lock的应用
    JDK和JRE
    末尾不以.OK文件结尾的正则表达式匹配
    ftp访问空目录的返回
    正则表达式的结尾匹配
    匿名对象和匿名类
    匿名内部类的调用
  • 原文地址:https://www.cnblogs.com/zzqcn/p/4687577.html
Copyright © 2011-2022 走看看