在之前发布过的一篇文章——《Nova 带你快速入门 Vim》 中,我们介绍了一些 Vim 的简单入门教程,在评论区的反馈中,有些读者希望可以加入一些更加进阶的 Vim 教程,那么本文就是啦~

在有了一些 Vim 基础之后,下面我给大家介绍一些更加硬核的技巧。鉴于你已经完成了 Vim 的入门,接下来的内容不会很难,如果希望对于 Vim 以及它的编辑方式有一个更加深入的认识,你还需要学习一些相关知识,比如:

  • Bash 的一些基本指令
  • Regular Expression(正则表达式)

对于 Vim 的学习,有一本书在网上被很多人推荐——Practical Vim(中文名:《Vim 实用教程》):

不过个人感觉这本书并不适合所有人,这里建议有兴趣的同学,可以先看看电子版中感兴趣的章节,对自己有所帮助的话,再考虑购买纸质版本。

我们从一个简单的需求开始,文本中有很多单词,或者变量,我们需要把它们全部给替换了(例如把:"foo" 替换成 "bar"),那么我们该如何操作呢?很简单,背板就好啦:

:s/foo/bar/g

注意,上面我们提到的是将一个文件中所有的单词给替换了,但是有的时候我们并不希望全部替换,那又该如何操作呢?

:s/foo/bar/c

这样就会在每次替换前给予一个确认的机会。

不过,如果你可以确定需要替换的是哪些行的话,还可以这样子玩:

:3,10s/foo/bar/

这样就会把第 3 到 10 行(包括端点)之间的所有 foo 替换为 bar。

Bash + Vim

我们来看看对于 Bash 有一些基础的话,在 Vim 上有什么操作的空间,假设我们在编辑一个文件,突然意识到我们需要创建一个新的文件,此时如果有 Tmux 的话,可以考虑直接开一个新的 Session 来创建文件,不过我们为什么不尝试一个更加简单的方式呢?即直接在 Vim 中执行 Bash 指令,下面是实现方法:

:!<此处是指令>

那么对于上面的需求,我们只需要切换到命令模式之后:

:!touch something.py

就好啦,是不是很容易记住?

此外,这个命令还有一些相关的指令,例如直接执行上一次的指令:

:!!

执行完成后自动回到 Vim 环境:

:silent !{cmd}

Regular Expression + Vim

正则表达式比较复杂,但是如果可以灵活运用的话,对于 Vim 的使用会更上一个档次,我们先来考虑一个实际的需求,给一个字符串两边包裹上引号,在一些比较好的编辑器中我们只需要鼠标选定这个字符串然后按一下引号就可以了,那么在 Vim 中我们该如何操作呢?

此时我们可以考虑在 .vimrc 中添加如下:

function! s:surround()let word = expand("<cword>")let wrap= input("wrap with: ")let command = "s/".word."/".wrap.word.wrap."/"execute command
endfunction
nmap cx :call <SID>surround()<CR>

并且在命令模式下在需要的单词上 cx 即可,虽然看上去有些麻烦,但是属于一次投资,终生使用的快捷方式。

用正则表达式还可以完成许多常见的操作,例如:

  • 删除行尾空格::%s/s+$//g
  • 删除沒有內容的空行:%s/^$// 或者 g/^$/d
  • 删除包含有空格组成的空行:%s/^s*$// 或者 g/^s*$/d
  • 除以空格或TAB开头到结尾的空行:%s/^[ |t]*$// 或者 g/^[ |t]*$/d

等,如果通篇的正则看上去令你非常头疼的话,建议先收藏本文,然后尝试快速入门一波正则表达式,再回来看看本文中讲述的一些 Vim 特有的“骚操作”吧~

本文作者:Nova

声明:本文归 “力扣” 版权所有,如需转载请联系。

文中部分图片来源于网络,为非商业用途使用,如有侵权联系删除。

vim 批量替换字符串_Vim 有什么奇技淫巧?相关推荐

  1. vim 批量替换字符串_vim批量替换,效率就是高。附常用批量替换命令

    语法为 :[addr]s/源字符串/目的字符串/[option] 全局替换命令为: :%s/源字符串/目的字符串/g [addr] 表示检索范围,省略时表示当前行. "1,20" ...

  2. 简单介绍Idea使用正则表达式批量替换字符串的方法

    这篇文章给大家介绍了Idea使用正则表达式批量替换字符串的方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧 由于一开始的粗放扩张,公司项目代码里,遗留有很多 ...

  3. 服务器上批量替换html内的字符,如何批量替换字符串中的某个特定字符?

    如何批量替换字符串中的某个特定字符? 发布时间:2020-05-26 05:06:20 来源:51CTO 阅读:569 作者:小陈子057 前两天领导突然给了我一个excel文件(该文件的编码只是简单 ...

  4. 批量替换字符串,将其中的数字递增(两种方法)和circlr.js插件的使用

    使用circlr.js插件实现3D效果的时候,不想在JS中写追加,直接写html又太麻烦(使用的是HBuilder X),所以找到了两种批量替换字符串,将其中的数字递增的方法. 想要实现的效果: 1. ...

  5. vim的替换字符串的命令

    vim的替换字符串 2017年04月11日 15:00:26 zhuhuihua__ 阅读数:114 原文地址:http://www.cnblogs.com/ltang/articles/203429 ...

  6. shell :linux sed 批量替换字符串

    linux sed 批量替换字符串 一月 21, 2014 ( No Comments ) Linux下批量替换多个文件中的字符串的简单方法.用sed命令可以批量替换多个文件中的字符串. 命令如下: ...

  7. vim查找/替换字符串

    1.:s 命令来替换字符串. :s/vivian/sky/ 替换当前行第一个 vivian 为 sky :s/vivian/sky/g 替换当前行所有 vivian 为 sky :n,$s/vivia ...

  8. java 批量替换字符串_# Java 一步一步实现高逼格的字符串替换工具(二)

    Java 一步一步实现高逼格的字符串替换工具(二) 上一篇实现了一个用于字符串替换的方法,主要是利用 正则 + jdk的字符串替换,本篇则会再之前的基础上走一个扩展 1. 之前的方法存在的问题 先把上 ...

  9. linux sed替换大小写,linux sed 批量替换字符串

    一月 21, 2014 ( NO COMMENTS ) Linux下批量替换多个文件中的字符串的简单方法.用sed命令可以批量替换多个文件中的字符串. 命令如下: sed -i "s/原字符 ...

最新文章

  1. C语言的sizeof和strlen
  2. 电脑磁盘空间不足怎么办_IT干货 丨 电脑C盘存储空间不足怎么办?
  3. ubuntu常见错误--could not get lock /var/lib/dpkg/lock -open
  4. 【响应式编程的思维艺术】 (1)Rxjs专题学习计划
  5. 【java】java wait 原理 synchronized ReentrantLock 唤醒顺序
  6. 2.VMware View 4.6安装与部署-域环境
  7. TCP 和 UDP 区别
  8. 天池大数据竞赛项目代码_竞赛以使用开放内容,开放数据或开放源代码开始新项目
  9. html5字体的格式转换,font字体
  10. excel poi 实现图片导出
  11. redis源码阅读—hyperloglog(基数统计)
  12. 机房环动监控系统作用
  13. vue 高德地图标记_vue-element-admin 引入高德地图并做海量点标记
  14. git 生成ssh 密钥
  15. c#: 线程状态和管理之线程的休眠、挂起和中断
  16. 用Python + Wxpy 为女友搭建简单微信机器人
  17. Nacos单机环境安装
  18. 对比 iOS 14.5 最强更新功能,Android 系统做得怎么样?
  19. Tomcat 8080|8009|8005 端口作用
  20. Python 量化投资实战教程(6) — 交易平均收益率

热门文章

  1. CoreException: Could not get the value for parameter compilerId for plugin execution default-compile
  2. linux系统中agent服务器,Zabbix添加对Linux服务器的监控(Zabbix-Agent)
  3. linux安装界面意思,为linux安装图形化界面
  4. mro列表_MRO模块操作指导书
  5. 本地提交到yarn_Flink on Yarn三部曲之三:提交Flink任务
  6. java冒泡法排序实例_Java冒泡法排序实例
  7. linux中的变量前加__user,linux中的环境变量,别名,变量传递和函数块
  8. Linux系统下快速配置HugePages的完整步骤
  9. ajax jsp jquery,ajax +jquery 基本
  10. 部署 Job (第二部分)