![9729fd8313a9a03723550e1bca8775ca.png](https://i-blog.csdnimg.cn/blog_migrate/2a8f7b09d0ea47a86fc1d7016646089a.png)
在之前发布过的一篇文章——《Nova 带你快速入门 Vim》 中,我们介绍了一些 Vim 的简单入门教程,在评论区的反馈中,有些读者希望可以加入一些更加进阶的 Vim 教程,那么本文就是啦~
在有了一些 Vim 基础之后,下面我给大家介绍一些更加硬核的技巧。鉴于你已经完成了 Vim 的入门,接下来的内容不会很难,如果希望对于 Vim 以及它的编辑方式有一个更加深入的认识,你还需要学习一些相关知识,比如:
- Bash 的一些基本指令
- Regular Expression(正则表达式)
对于 Vim 的学习,有一本书在网上被很多人推荐——Practical Vim(中文名:《Vim 实用教程》):
![92110ff45e373869e3566b6e21a673a7.png](https://i-blog.csdnimg.cn/blog_migrate/8ca5374a7aea9443bbdc80668e055965.jpeg)
不过个人感觉这本书并不适合所有人,这里建议有兴趣的同学,可以先看看电子版中感兴趣的章节,对自己有所帮助的话,再考虑购买纸质版本。
我们从一个简单的需求开始,文本中有很多单词,或者变量,我们需要把它们全部给替换了(例如把:"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
声明:本文归 “力扣” 版权所有,如需转载请联系。
文中部分图片来源于网络,为非商业用途使用,如有侵权联系删除。