Skip to content

为啥要用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

本节内容来自 刘遄 | 《Linux就该这么学》第4章 Vim编辑器与Shell命令脚本]

Vim之所以能得到广大厂商与用户的认可,原因在于Vim编辑器中设置了3种模式—命令模式、末行模式和编辑模式,每种模式分别又支持多种不同的命令快捷键,这大大提高了工作效率,而且用户在习惯之后也会觉得相当顺手。要想高效地操作文本,就必须先搞清这3种模式的操作区别以及模式之间的切换方法(见下图)。

三种模式

  • 命令模式:控制光标移动,可对文本进行复制、粘贴、删除和查找等工作。
  • 输入模式:正常的文本录入。
  • 末行模式:保存或退出文档,以及设置编辑环境。

Vim编辑器模式的切换方法

命令模式

在每次运行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快速上手

一些不容忽视的vim小技巧

撤销与恢复

  • u :撤销刚才做的动作。
  • ctrl+r :恢复刚才撤销的动作。

列式编辑

小贴士

notepad++ 或 IDEA 中使用 Alt 可以进行列式编辑,vim 也可以有一样的效果。

参考上图中的 可视模式

  • v进入可视模式,可以进行多行选择。
  • V进入可视行模式,选择整行。

快速跳转

参考上图中的 移动。

自动补全

Ctrl+nCtrl+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始终还是需要交互式操作的。有没有既能编辑文本内容,还不需要交互式操作的?

当然有的,那就是下节要讲的grep/sed/awk三剑客。

基于 知识共享 CC BY-NC-SA 许可发布