所有的 UNIX-like 系统都会内置 vi 文本编辑器,其它的文本编辑器则不一定会存在,很多软件的编辑接口都会主动调用 vi,同时 vi 还具有程序编辑的能力,具有语法高亮的功能。
而 vim 则可以视作为 vi 的高级版本,它具有颜色显示功能,并且还支持许多的程序语法。
输入
alias
命令可以查看到,目前大部分的 Linux 发行版都以 vim 替换 vi 的功能
1 vim 的使用
基本上 vim 共分为三种模式,分别是 一般命令模式、编辑模式 与 命令行模式。
-
一般命令模式(command mode)
使用 vi 编辑器打开文件直接进入的就是 一般命令模式,此时可以执行的操作是:【上下左右】移动光标、【删除字符】、【删除整行】、【复制、黏贴文本】,但是无法进行编辑文件内容的操作 -
编辑模式(insert mode)
在一般命令模式中可以按下【i
、l
、o
、O
、a
、A
、r
、R
】等任意一个字母之后进入编辑模式,此时界面的左下方会出现insert
或replace
的字样。要退回一般命令模式就按下Esc
按钮即可 -
命令行模式
在一般命令模式中可以输入 【:
、/
、?
】三个的任意一个字符,就可以将光标移动到下面最后一行,此时可以进行一些 查找数据、读取、保存、批量替换字符、退出 vim、显示行号等操作
1.1 按键说明
1.1.1 一般命令模式
下面列举出一些最常用的一些按键,移动光标,移动光标除了使用箭头键还可以使用以下按键,同时如果想要多次移动,如想要向左移动30个字符,可以使使用 30h
组合键。
h
:向左移动一个字符j
:向下移动一个字符k
:向上移动一个字符l
:向右移动一个字符[Home]
:移动到这一行的最前面字符处[end]
:移动到这一行的最后面字符处H
:移动到这个屏幕的最上方那一行的第一个字符M
:移动到这个屏幕的中央那一行的第一个字符L
:移动到这个屏幕的最下方那一行的第一个字符G
:移动到这个文件的最后一行nG
:n
为数字,移动到这个文件的第n
行
查找与替换:
/word
:在光标之下寻找一个名称为word
的字符串位置?word
:在光标之上寻找一个名称为word
的字符串位置n
:在输入查找字符串之后,再点击n
键继续进行向下寻找该字符串N
:与n
相反,此为向上寻找:n1,n2s/word1/word2/g
:n1
、n2
为数字,在第n1
与n2
行之间寻找word1
这个字符串,并将该字符串替换为word2
,可以使用$
字符表示该文件的最后一行
删除、剪切
x
与X
:在一行中,x
为向后删除一个字符,X
为向前删除一个字符dd
:删除(剪切)光标所在的那一整行ndd
:n
为数字,删除(剪切)光标所在的向下n
行
复制
yy
:复制光标所在的那一行nyy
:n
为数字,复制光标所在的向下n
行
黏贴
p
与P
:p
键将已复制的数据在光标的下一行黏贴,而P
键则是贴在光标的上一行
恢复操作、重做 前一个操作、重复 前一个操作
u
:恢复前一个操作,就类似于[Ctrl] + z
[Ctrl] + r
:重做前一个操作.
:重复前一个操作
1.1.2 命令行模式
:w
:将编辑的数据写入硬盘文件中,即保存:w!
:文件属性为只读时,强行保存,具体能否成功,还是与你对该文件的权限有关:q
:退出 vim:q!
:不保存,退出 vimZZ
:若文件没有修改则不保存退出,若已经被修改,则保存后退出:w [filename]
:将编辑的数据保存为另一个文件:r [filename]
:在编辑的数据中,读入另一个名为filename
文件的数据,将 该文件内容加到光标所在行的后面:! [command]
:暂时退出 vim 到命令行模式下执行command
的显示结果
在 vim 中,【数字】是很有意义的,数字通常代表重复做几次的意思,也有可能是代表去到第几个什么什么的意思。
1.2 vim 的缓存、恢复与打开时的警告信息
在 vim 的一般命令模式下按下
[ctrl] - z
的组合键,可以让 vim 调到后台去执行。
当 vim 的工作被不正常地中断,导致缓存无法借由正常流程来结束,所以缓存就不会消失,而继续保留下来,此时在该目录下会出现一个后缀为 .swp
的缓存文件出现。当存在该缓存文件,再打开源文件的时候就会弹出一些问题信息以及解决方案。
在缓存警告信息的界面中,可以输入以下六个可用按键(首字母)作为解决方案:
[O]epn Read-Only
:以只读的方式打开该文件(E)dit anyway
:还是使用正常地方式打开该文件,并不会加载缓存的内容(R)ecover
:加载缓存信息,需要注意的是,加载缓存信息后,该缓存文件并不会自行删除,此时需要手动删除缓存文件(D)elete it
:直接删除缓存文件(Q)uit
:退出 vim(A)bort
:与Q
类似,退出 vim
2 vim 的额外功能
2.1 可视区块
可视区块的作用感觉有点像 VScode 编辑器中的“鼠标滚轮按键”,可以激活一系列代码区然后进行批量操作,当在一般命令模式下按下 v
或 V
或 [Ctrl] + v
时,这个时候光标移动过的地方就会开始反白,这三个按键的意义分别是:
v
:字符选择数据V
:行选择数据[ctrl] + v
:矩形方式选择数据y
:将反白的地方复制起来d
:将反白的地方删除掉p
:将刚复制的内容,在光标所在处黏贴
2.2 多文件编辑
使用 vim 单独地打开多个文件,此时就相当于打开了多个 vim 窗口,这些 vim 窗口都是独立的,这样想要多文件编辑很不方便,想要多文件编辑就需要 使用 vim
命令后面同时接需要打开的文件名从而达到同时打开多文件的效果。
多文件编辑按键:
:n
:编辑下一个文件:N
:编辑上一个文件:files
:列出目前这个 vim 开启的所有文件
2.3 划分窗口功能
如果想要从另一个文件复制部分内容,却没有像使用上述多文件编辑的方式打开文件,或想要同时查看几个文件,此时就需要使用到划分窗口功能,常用命令如下:
:sp [fileName]
:打开一个新窗口,如果有加fileName
,表示在新窗口创建一个新文件[ctrl] + w + ↑
:移动到上一个窗口[ctrl] + w + ↓
:移动到下一个窗口
退出窗口就直接输入 :q
就可以了。
2.4 vim 的关键词补全
vim 的关键词补全,就需要以下补齐组合键:
[ctrl] + x => [ctrl] + n
:通过目前正在编辑的这个 文件的内容文字 作为关键词,予以补齐[ctrl] + x => [ctrl] + f
:以当前目前内容的 文件名 作为关键词,予以补齐[ctrl] + x => [ctrl] + o
:以 文件扩展名 作为语法补齐,以 vim 内置的关键词,予以补齐
3 vim 的环境设置
下面列举一些常用的命令:
:set all
:显示目前所有的环境参数设置值:set nu
/:set nonu
:是否显示行号:set autoindent
/:set noatuoindent
:是否自动缩进:syntax on
/:syntax off
:是否依据程序相关语法显示不同颜色:set bg=dark
/:set bg=light
:选择高亮的主题