Vim 中进行文本替换

格式

  • 用法

    :[range]s/from/to/[flags]

    tips: [] 表示该内容可选

  • 参数

    • from 需要替换的字符串(可以是正则表达式)

    • to 替换后的字符串

    • range 作用范围

      空          :  默认为光标所在的行
      . : 光标所在的行
      n : 第 n 行(1表示第 1行,10表示第 10行),可使用:set nu 显示vim行号
      $ : 最后一行
      n,m : n~m 行(22,33表示 22~33行)
      % : 所有行(与 1,$ 等价)

      tips: 上面的所有 range 都可以组合起来使用;表示方法都可以通过 +、- 操作来设置相对偏移量;且都可以套入 n,m 格式来设置范围,如:

      • .+1 : 当前光标所在行的下面一行;
      • $-1 : 倒数第二行;
      • 1,. : 第1行 到 当前行;
      • .,$ : 当前行 到 最后一行;
      • 1,$ : 第1行 到 最后一行(或者用符号 % 表示);
      • .+1,$-1 : 光标行下一行 到 倒数二行;
    • flags 替换标记

      空          :  替换第一个匹配项
      c : confirm,每次替换前都会询问
      e : 不显示error
      g : globe,不询问,整个替换
      i : ignore,即不区分大小写(默认为大小写敏感即I)
      & : 重复使用最后的参数(效果和 g 类似)
      n : 不会替代任何东西(提示执行该操作所影响的行数)

      tips: 上面的所有 flags 都可以组合起来使用,如:

      • gc 表示匹配范围内全部替换,并且每次替换前都会询问
      • gi 表示匹配范围内全部替换,并且不区分大小写;
      • gin 表示不替换,并且提示匹配范围中不区分大小写所影响的行数;

实例

图例

  1. :s/javascript/python/g

    • 在当前行,用python替换javascript
    • g 标志表示全局
  2. :%s/css/sass/g

    • 替换全局内容
  3. :5,12s/dev/pro/g

    • 替换 第5 至 12行 的内容
  4. :.,+2s/bug/feature/g

    • 当前行(.)下两行(+2)分别进行修改
  5. :g/^review/s/needs/donw/g

    • 将每行开始为'review'的'needs'改为'donw'
    • :g/review/s/needs/donw/g
    • 将存在'review'的每行'needs'改为'donw'
  6. :%s/charome/firefox/gc

    • 全局替换,每次替换前询问
  7. :%s/text/Editor/gi

    • 全局替换,并且忽略关键字大小写
  8. :%s/\<static\>/dynamic/g

    • 只改变完全匹配的整个单词
  9. :%s/remember/me/&

    • 重复使用最后的参数(效果和 g 类似)
  10. :%s/remember/me/n

    • 这个命令并不替代任何东西。它告诉我们,如果我们运行这个命令,会有多少个出现的词受到影响

进阶

  1. 分隔符转换(几乎所有符号都可)

    • 将网址中的/替换成 \(\需要转义)

      • :%s-/-\\-g
      • :%s#/#\\#g
  2. 特殊符号转义

    • 将所有的.替换成0

      • :%s/\./0/g
  3. 替换正则选中内容

    • 日期替换(将所有日期替换为2022-4-1)

      • :%s/[0-9]\{4\}-[0-9]\{2\}-[0-9]\{2\}/2022-4-1/g
  4. 变量暂存并使用

    • 将所有 hello world 加上 {}

      • :%s/\(hello world\)/{\1}/g
    • 将所有日期加上''

      • :%s/[0-9]\{4\}-[0-9]\{2\}-[0-9]\{2\}/'\1'/g

      tips:

      • [0-9] 表示 0 到 9 之间的任一个数字,这是正则中表示数字集合的标准写法。
      • {n} 表示将此符号前面的元素重复 n 遍,所以 [0-9]{4} 就表示一个四位数的数字。
      • 如果在匹配方案中用到了(),则表示要暂存括号中所匹配到的内容,而 \1 表示替换为暂存的内容(如果存在多个括号组,则后面要通过编号来依次对应,如 \1、\2、\3 等)

Vim 中进行文本替换的更多相关文章

  1. vim中替换命令

    在VIM中进行文本替换:       1.  替换当前行中的内容:    :s/from/to/    (s即substitude)         :s/from/to/     :  将当前行中的 ...

  2. Linux环境下shell和vim中乱码原因及消除办法

    shell和vim中乱码原因及消除办法 作者:Jack47 在Linux下开发,经常遇到乱码问题:shell或者vim中显示不了中文,或者能够显示,但不能输入中文.每次都是上网去搜,或者同事告诉我一些 ...

  3. 再谈vim中多窗口的编辑

    参考:http://blog.csdn.net/shuangde800/article/details/11430659 很好 鼠标在各个窗口间循环移动: ctrl+w+(小写的 hjkl), &qu ...

  4. 在VIM中进行快速的查找和替换

    VIM是被誉为非常高效的文本编辑软件.但是掌握并高效的使用是件有难度的事情.在VIM中进行快速的查找和替换是提高VIM使用效率的重要方法.下面是我在阅读VIM用户手册时整理的一些资料: 行内搜索. f ...

  5. vim中 set 用法设置

    vi set用法from google search一.常用收集如下:(vi set)set autoindent     在插入模式下,对每行按与上行同样的标准进行缩进,与shiftwidth选项结 ...

  6. vim中输入tab符

    今天在写Makefile时各种出错.后来发现是all:的下一行,make前面必须是tab符,不能是空格. 但是vim中只要按tab就会自动转换成4个空格.平时编程需要,也不便把这个设置取消. 查了下, ...

  7. vim 中 也可以 直接安装 emmet 直接使用zen coding 生成 l指定个数的 lorem ipsum文字.

    超链接的写法: 当作为链接的文字, 比较长时, 整个作为链接 就显得不是 很适合. 可以取其中的某一个单词 作为 超链接的 关键字:如: click here to continue emmet中如何 ...

  8. vim中添加molokai.vim 配色安装

    无意中发现知乎中讨论的话题: 你认为最好看的 Vim 配色方案(color scheme)是哪款? 网友回答 排在第一位的是:molokai 啊,最经典的配色 既然molokai这么经典,当然要用了. ...

  9. 解决vi/vim中粘贴会在行首多很多缩进和空格的问题

    解决vi/vim中粘贴会在行首多很多缩进和空格的问题 secureCRT会将你原来的文本原封不动的按照字符串的样式发送给服务器.所以当你的服务器上的vim设置为autoindent的话,在i模式下,那 ...

随机推荐

  1. maven国内镜像配置

    Maven是当前流行的项目管理工具,但官方的库在国外经常连不上,连上也下载速度很慢.国内oschina的maven服务器很早之前就关了.今天发现阿里云的一个中央仓库,亲测可用. 1 <mirro ...

  2. 知识点简单总结——Lyndon分解

    知识点简单总结--Lyndon分解 Lyndon串 定义:一个字符串的最小后缀就是整个串本身. 等效理解:这个串为其所有循环表示中最小的. Lyndon分解 定义:将字符串分割为 $ s_{1} s_ ...

  3. 麒麟系统开发笔记(二):国产麒麟系统搭建Qt开发环境安装Qt5.12

    前言   开发国产应用,使用到银河麒麟V4,V10,本篇以V10记录,参照上一篇可安装V4.V7.V10三个版本,麒麟V4系自带了Qt,麒麟V10没有自带Qt,需要自己编译搭建环境.   银河麒麟V1 ...

  4. Linux上如何设置nginx开机启动

    连接上linux后输入以下命令--vim /etc/init.d/nginx 然后在这个空文件写入下面内容: 保存好后,修改下该文件权限--chmod 777 /etc/init.d/nginx 然后 ...

  5. jQuery--选择器案例实战

    1.案例需求 jquery最基础的选择器部分已经基本结束,来一个简单案例总结回顾下学的东西. 案例需求: 用一个按钮控制元素的显示与隐藏,页面如下,从第五个开始,不要最后一个,控制他们的显示和隐藏. ...

  6. 分布式存储---FastDFS+GlusterFS

    一. 存储概念 1.块存储的多种实现: 块存储: 就好比硬盘一样, 直接挂在到主机,一般用于主机的直接存储空间和数据库应用的存储 1.磁盘+LVS: 单机硬盘纯存储 2.DAS(DELL MD系列): ...

  7. 学习Keepalived(三)

    1.1Keepalived高可用软件 Keepalived起初是专为LVS设计的,专门用来监控LVS集群系统中各个服务节点的状态,后来又加入了VRRP的功能,因此除了配合LVS服务外,也可以作为其他服 ...

  8. 学习 Haproxy (三)

    HAProxy安装 # wget http://www.haproxy.org/download/1.4/src/haproxy-1.4.24.tar.gz # tar xf haproxy-1.4. ...

  9. .map() vs .forEach() vs for() 如何选择?

    访问原文地址 .map() vs .forEach() vs for() 笔者说,自己基本没怎么用过for()来遍历,主要是用.forEach(). 但是总是会被很多朋友说,这些人认为for()的速度 ...

  10. 体温登记app开发流程

    关于体温app,比较难的是获取定位信息,剩下的就是增删改查. 设计思路:首先布局一个添加页面,给每个元件添加id,之后在获取地点的EditText获取位置信息,在添加两个布局文件,体现在一个页面里用来 ...