Linux 之旅 7:vim 程序编辑器
Linux上最常用的文本编辑器是vim
,但老实说也很难学,光一个编辑器使用指南就可以写一篇文章,在现在这个软件越来越易用的年代也算是另类了。
尤其是我们还有很多替代方式,比如nano
,或者干脆使用图形化的编辑器,比如VSCode的Linux版本,甚至还可以用Windows上的IDE远程连接后进行编辑(以前工作的时候我就是用Zend远程连接修改和debug测试机上的程序的),这都很方便,而且还是你熟悉的工具。
但是vim
依然有其存在的价值,比如说因为是命令行程序,可以在各种ssh
连接工具上直接调用,而且不依赖于XWindow
桌面,像一些出于安全或者性能方面考虑而不安装XWindow
的Linux主机,除了用IDE远程连接外就只能使用nano
或者vim
这样的工具了。
而vim
的功能显然要远远超过nano
。
下面介绍vim
的使用方式。
vi
与vim
vim
是在vi
的基础上开发的,比vi
更强大,可以看作是vi
的增强版,具体来说,主要是增加了编程相关的支持,对于不同的程序语言提供相应的语义颜色显式的支持,这点对开发者非常重要,对于运维来说,同样支持shell脚本的颜色显式。
[icexmoon@xyz ~]$ whereis vi vim
vi: /usr/bin/vi /usr/share/man/man1/vi.1.gz /usr/share/man/man1p/vi.1p.gz
vim: /usr/bin/vim /usr/share/vim /usr/share/man/man1/vim.1.gz
[icexmoon@xyz ~]$ alias vi
alias vi='vim'
虽然CentOS7上同时安装了vi
和vim
,但是可以看到存在一个命令别名vi
,实质上是调用vim
,也就是说默认情况下在bash中执行vi
都是使用的vim
,如果要调用真正的vi
,需要这样:
[icexmoon@xyz tmp]$ \vi test.py
[icexmoon@xyz tmp]$ /bin/vi test.py
使用vi
打开一个测试用的python
代码,效果是这样的:
使用vim
打开,效果这样:
区别还是很明显的。
为什么要学习vim
除了上边说明的vim
存在的意义以外,vim
还是很多shell程序调用的默认编辑器,也就是说如果某些应用执行的时候需要编辑一个文本文件,就会直接调用vim
来打开该文件,然后让用户编辑,这种情况下你就必须会用vim
了,也无法用其它方式去替代。
vi
的使用
这里先介绍vi
的用法,最后再介绍vim
增强的功能,因为它们都是一脉相承,除了增强的功能以外用法都是一样的。
vi
最难令初学者理解的地方在于,作为一个文本编辑器,居然还分为三种工作模式,而且一开始打开后并非处于文本编辑模式,你不能随意移动光标编辑文本,这就很让人费解了,我第一次打开的时候完全是莫名其妙。
具体来说是分为以下三种模式:
-
指令模式(command mode):
指令模式也是一开始进入程序后的默认模式,在这个模式下可以直接使用各种快捷键对文本进行直接修改,也可以输入一些特殊字符进入命令模式。
-
输入模式(insert mode):
在指令模式下输入特殊字符(比如
i
),后可以进入输入模式,或者叫做编辑模式。在这个模式下我们可以像使用普通的文本编辑器那样移动光标,进行删除,或者输入文字。按
ESC
可以退出到指令模式。 -
命令行模式(command-line mode):
在指令模式下输入
/
、?
或:
可以进入命令行模式,前两个符号用于检索,最后一个用于输入命令。在命令行下可以输入字符串进行检索,或者是使用各种命令实现各种功能,比如修改
vi
的相关设置,或者对修改内容进行写入,亦或者退出应用。按
ESC
可以返回到指令模式。
三种模式的转换可以用下图表示:
(图片来自鸟哥的私房菜)
简易执行范例
打开文件
使用vi filename
可以打开一个文件,如果文件不存在,会新建,比如:
可以看到,左下角是文件名,以及[New File]
,表示这是一个新文件。
这是一个已经存在的文件,可以看到左下角的信息,表示文件是test.py
,只有1行数据,包含23个字符。
进入输入模式
在指令模式下按下i
就可以进入输入模式:
此时左下角会出现为INSERT
字样,并且可以在该模式下移动光标并输入字符。
返回指令模式
这个简单,在输入模式下按ESC
即可返回指令模式。
进入命令行模式
输入:
即可进入命令行模式:
此时光标会出现在左下方的:
字符之后,然后你就可以在这里输入相关命令并且按下Enter
执行,这里我们输入wq
以保存修改并退出。
使用cat
查看修改结果:
[icexmoon@xyz tmp]$ cat test.py
print("hellow wolrd!")
print("end")
这里wq
是最长用的保存并退出,如果不想保存,想直接退出,可以q
,但如果内容有变更,是不允许你这样离开的,需要使用q!
强制退出。如果文件没有写权限,同样是无法执行w
命令的,此时如果你是该文件的拥有者或者root
用户,可以使用w!
强制写入。类似的wq!
是强制写入后退出。
以上就是最简单的vi
操作流程,当然vi
的功能远远不止如此,这在后边详细说明。
按键说明
这里将vi
中可以使用的按键和命令按模式划分为三部分:
为了更好地进行
vim
相关测试,这里下载了我的一个项目以提供文本文件,不过需要先安装工具git
:sudo yum install git
,如果无法安装的可能还需要替换CentOS
的源为国内的源:CentOS配置本地yum源/阿里云yum源/163yuan源,并配置yum源的优先级,当然这并不是必须的,你可以上传自己喜欢的文本到虚拟机中进行测试。
指令模式下可以使用的按键
- 下边按键中的
d
>n>G
之类的表示依次输入某个按键,比如这个就表示先输入d
,再输入一个数字,最后再输入G
。- 下边按键中的未被代码模块包裹的n字母表示输入任意一个数字,比如20。
+
表示组合键。
按键 | 作用 |
---|---|
h 或方向键左 |
向左移动光标 |
j 或方向键下 |
向下移动光标 |
k 或方向键上 |
向上移动光标 |
l 或 |