• vim的全局替换


    来自 

    本文是在学习《使用vi编辑器, Lamb & Robbins编著》时在所记的笔记。

    本文内容:

    基本全局替换

    确认替换

    上下文相关替换

    本文约定:

    $ + 命令 表示在普通的bash的命令行下

    :  + 命令 表示在vim的ex(命令)模式, 按"Ctrl" + ":" 进入

    ------------------------------------------------------------------------------------------------


    替换命令的基本语法

    在全局替换中,ex编辑器使用指定的字符模式对文件中的每行进行检查。在所有行中发现模式的位置,ex使用新字符串来替换模式。

    全局替换真正使用的是两个ex命令是 :g(global全局)和:s(switch替换)。

    替换命令的语法如下:

    :s / old / new / 

    这将把当前中模式old的第一次出现修改为new。  /(斜杆)是命令不同部分之间的分隔符(当斜杆为该行的最后一个字符时,可不写)

    下面这种形式的替换命令:

    :s / old / new / g

    把当前行old的每次出现改为new,而不只是该行的第一个old。:s命令允许替换串后面带有选项,上面语法中的g代表全局(g选项影响一行中的每个模式,不要把它与影响文件中所有行的:g命令混淆)

    通过在:s命令前加上地址前缀,可以把它的范围扩展到多行。例如下面命令把50行到100行的old的每次出现都改为new:

    :50, 100 s / old / new / g

    下面的命令把整个文件中的old的每次出现都改为new:

    :1, $s / old / new / g

    我们知道%等价于1,$,所以上行命令也可以这样写:

    :% s / old / new / g


    确认替换

    使用搜索替换命令有时候会出错,而得到不想要的结果。所以小心并确认文件中需要修改的内容是一个明智的做法

    在替换命令尾部加上c (confirm用于确认),在替换每个old前都会提示并确认:

    :1, 30 s /old/new/ gc

    将会出现提示replace with hehe (y/n/a/q/l/^E/^Y)?

    y替换,n不替换,a替换所有,q放弃,l替换第一个并进入插入模式,^E和^Y是提示你用Ctrl+e或Ctrl+y来滚动屏幕的。


    上下文相关替换

    除了直接使用一个单词(或短语)替换另一个,还有稍微复杂的全局替换语法。这些语法可以对一个模式进行搜索,一旦找到含有模式的行,就可以使用不同与模式的串进行替换,我们把这种替换叫做上下文相关替换。

    语法格式如下:

    :g /pattern/s/old/new/g  将会把包含pattern的行中,把所有old替换为new

    第一个g表示是在文件的所有行上执行的命令,模式pattern识别要发生替换的行。在那些包含模式pattern的行上,ex将把old替换(s)为new。最后的g表示在该行上进行全部替换。

    如果用来进行搜索的模式与想要修改的模式相同,那么就不必重复它:

    :g/string/s//new/g 等价于  :g/string/s/string/new/g

    还要注意:

    :g/string/s//new/g 也等价于 :% s/string/new/g

    可以用第二种方式少输一些字符

    ---------------------------

    other:

     1 syntax enable
     2 set tabstop=4
     3 set shiftwidth=4
     4 set nu
     5 set hlsearch
     6 set incsearch
     7 set ruler
     8 set softtabstop=4
     9 set autochdir
    10 set autoread
    11 set autoindent
    12 set smartindent
    13
    14 set showcmd
    15 nmap <F2> <C-T>
    16 nmap <F3> /<cr>
    17 nmap <F4> <C-]>
    18 nmap <F5> :w<cr>:!ctags -R .<cr><cr>:e<cr>
    19 nmap <F6> :e ./

    这是我的vimrc,因为设置了hlsearch,所以搜索一些内容的时候就会在全局高亮搜索的内容,但是不进行下一次搜索这次搜的词就一直亮着,关闭了再开也是。怎么能让看完搜索结果就把刚才的高亮取消?
    已解决
    输入:nohl

  • 相关阅读:
    oracle游标
    PLSQL
    git移除target目录下已经提交的内容案例
    git全局配置
    [github]Windows系统下将本地仓库的项目上传到远程仓库(含仅单独上传更新文件情况)
    小试Python交互模式(Python Shell)与读文件操作报错(OSError)的解决办法
    C盘内存“侵略者”——Unity开发环境中GI Cache默认目录的修改
    Hibernate学习——Hibernate Tools for Eclipse Plugins的下载与安装
    博客开篇——应用Markdown编辑器呈现样式和内容
    pt-table-checksum使用dsn方式连接检测从库
  • 原文地址:https://www.cnblogs.com/chjbbs/p/5703795.html
Copyright © 2020-2023  润新知