为啥要用vim?
在服务器上,总有编辑文件内容的需求。此时,vi/vim就能派上大用场。
延伸1
至于一些大佬们将vim打造成个人IDE,优劣见仁见智。我的意见是不建议,让工具回归工具(比如汇编可以写网站,但显然使用高级语言会开发更快)。当然有兴趣、有时间搞的,不在讨论之列。
延伸2
Visual Studio Code 也有远程编辑的场景,但是它和掌握vim并不冲突。然而,并不是所有环境都有Visual Studio Code,但Linux上默认会安装vi/vim。从学习性价比上讲,建议优先学习vim。
vim的优点很明显:轻量级、可定制性高、强大的文本处理能力。
vim就没有缺点吗?当然有的!它的学习曲线有点陡峭。然而,别因此产生畏难情绪,只是「有点」陡峭而已!总体来说,学会vim性价比极高!
学习小贴士
vim也有大巧不工的学习方式,比如参考文末列出的vim学习资源:https://github.com/wsdjeg/Learn-Vim_zh_cn 。
开始使用vim
Vim之所以能得到广大厂商与用户的认可,原因在于Vim编辑器中设置了3种模式—命令模式、末行模式和编辑模式,每种模式分别又支持多种不同的命令快捷键,这大大提高了工作效率,而且用户在习惯之后也会觉得相当顺手。要想高效地操作文本,就必须先搞清这3种模式的操作区别以及模式之间的切换方法(见下图)。
三种模式
- 命令模式:控制光标移动,可对文本进行复制、粘贴、删除和查找等工作。
- 输入模式:正常的文本录入。
- 末行模式:保存或退出文档,以及设置编辑环境。
命令模式
在每次运行Vim编辑器时,默认进入命令模式,此时需要先切换到输入模式后再进行文档编写工作。而每次在编写完文档后需要先返回命令模式,然后再进入末行模式,执行文档的保存或退出操作。在Vim中,无法直接从输入模式切换到末行模式。
命令模式中最常用的一些命令
Vim编辑器中内置的命令有成百上千种用法,为了能够帮助读者更快地掌握Vim编辑器,下表总结了在命令模式中最常用的一些命令。
命令 | 作用 |
---|---|
dd | 删除(剪切)光标所在整行 |
5dd | 删除(剪切)从光标处开始的5行 |
yy | 复制光标所在整行 |
5yy | 复制从光标处开始的5行 |
n | 显示搜索命令定位到的下一个字符串 |
N | 显示搜索命令定位到的上一个字符串 |
u | 撤销上一步的操作 |
p | 将之前删除(dd)或复制(yy)过的数据粘贴到光标后面 |
末行模式
末行模式主要用于保存或退出文件,以及设置Vim编辑器的工作环境,还可以让用户执行外部的Linux命令或跳转到所编写文档的特定行数。要想切换到末行模式,在命令模式中输入一个冒号就可以了。
末行模式中最常用的一些命令
命令 | 作用 |
---|---|
:w | 保存 |
:q | 退出 |
:q! | 强制退出(放弃对文档的修改内容) |
:wq! | 强制保存退出 |
:set nu | 显示行号 |
:set nonu | 不显示行号 |
:命令 | 执行该命令 |
:整数 | 跳转到该行 |
😒/one/two | 将当前光标所在行的第一个one替换成two |
😒/one/two/g | 将当前光标所在行的所有one替换成two |
:%s/one/two/g | 将全文中的所有one替换成two |
?字符串 | 在文本中从下至上搜索该字符串 |
/字符串 | 在文本中从上至下搜索该字符串 |
快捷键助力提升效率
作为一款生产力工具,怎么才能提高使用效率呢?
答案是:掌握并熟练使用快捷键!
一些不容忽视的vim小技巧
撤销与恢复
- u :撤销刚才做的动作。
- ctrl+r :恢复刚才撤销的动作。
列式编辑
小贴士
notepad++ 或 IDEA 中使用 Alt 可以进行列式编辑,vim 也可以有一样的效果。
参考上图中的 可视模式。
v
进入可视模式,可以进行多行选择。V
进入可视行模式,选择整行。
快速跳转
参考上图中的 移动。
自动补全
Ctrl+n
和 Ctrl+p
在插入模式下自动补全。
设置和配置
:set number
显示行号。:set nowrap
禁用自动换行。
全局命令
:g/pattern/p
打印所有匹配模式的行。:v/pattern/d
删除所有不匹配模式的行。
插入模式下的命令
Ctrl+o
执行普通模式命令。Ctrl+h
删除前一个字符。Ctrl+w
删除前一个单词。
代码折叠
za
折叠/展开代码块。zM
最大化当前窗口的代码折叠。zR
还原所有代码折叠。
窗口分割
:split
或:sp
水平分割窗口。:vsplit
或:vs
垂直分割窗口。Ctrl+w
+ 方向键在窗口间切换。
命令行模式快速更改单词
- ciw:change in the word,可以快速更改当前的单词,表现是直接删除了,并且插入了一个 I 的光标。
- diw:delete in the word。
推荐的vim学习资源
- 聪明地学习 Vim: https://github.com/wsdjeg/Learn-Vim_zh_cn
另一种视角看编辑文件
vim始终还是需要交互式操作的。有没有既能编辑文本内容,还不需要交互式操作的?
当然有的,那就是下节要讲的grep/sed/awk三剑客。