Linux | 人生苦短,我用Vim【最受欢迎的编辑器】

之前在实验室学习的时候看到超哥一直在使用Vim编辑器,后来在Linux环境下进行一些文件配置的时候,也常常使用,很早就想对于Vim进行一次系统的了解和相关操作归纳,只不过一直没有开始。直到昨天,在论坛和朋友圈看到Vim编辑器创始人去世的消息。

图片

一、Vim是什么

Vim是一个高度可配置的文本编辑器,用于创建和更改任何类型的文本非常高效。与大多数UNIX系统和Apple OS X一起,它被包含为“vi”。Vim是稳定的,并且不断发展,变得更好。其特点是:持久的多级撤消树;广泛的插件系统;支持数百种编程语言和文件格式;强大的搜索和替换;与许多工具集成。

Vim是Vi IMproved,是编辑器Vi的一个加强版,一个极其强大并符合IT工程师(程序员、运维)习惯的编辑器。如果你是一名职业的SE,那么一定在寻找一款出色的能够自由定制、满足灵活编辑功能的编辑器。那么答案,就是vim或者Emacs。vim最大特色是完全使用键盘命令进行编辑,脱离了鼠标操作虽然使得入门变得困难,但上手之后键盘的各种巧妙组合操作却能带来极为大幅的效率提升。

在Linux系统中,RHEL和CentOS的配置文件是/etc/vimrc,Debian和Ubuntu的配置文件是/usr/share/vim/vimrc。

那么vimRC中的RC是什么意思?
一般在运行某个软件、环境或工具之初,要初始执行的一些命令,称为Run Commands,即RC。根据Wikipedia.org的记载,RC缩写的用法源自MIT的相容分时操作系统(Compatible Time-Sharing System,CTSS)[参考1],有兴趣的话请自行了解。

二、三种基本模式

基本上vi/vim可以分为三种状态,分别是普通模式、插入模式和命令模式,各模式的功能区分如下:

1、普通模式
控制屏幕光标的移动,字符、字或行的删除,移动复制某区段。

2、插入模式
只有在插入下,才可以做文字输入、删除,按「ESC」键可回到普通模式。
可以按i、I、a、A、o、O、r、R即可。其中i和I表示插入(Insert),r和R表示替换(replace)。

3、命令模式
将文件保存或退出vim,也可以设置编辑环境,如寻找字符串、列出行号等……
可以按“:”、“/”、“?”。其中“:”表示输入vim命令,“/”表示后面输入要向下搜索的字符串,“?”表示后面输入要向上搜索字符串。

其实,可以把普通模式理解为常态,进入其它任何一种模式,需要某种特殊方式,而从其它特殊模式回到普通模式,就按「ESC」键即可。

Vim的三种基本模式如下图:

img

三、vim最常用的配置

为了使以下参数永久有效,那你可以把以下参数写进/etc/vimrc配置文件里,当然,有一些参数已经存在配置文件中了。

1、颜色设置
syntax on   开启代码高亮
syntax off   关闭代码高亮
syntax enable 开启代码高亮
2、搜索设置
set hlsearch   –开启搜索高亮
set nohlsearch  –关闭搜索高亮
set incsearch    –输入搜索字符串的同时进行搜索
set ignorecase  –搜索时忽略大小写

3、用户界面
set ruler       –开启光标位置提示
set number     –显示行号
set nonu      –不显示行号
set cmdheight=1  –命令部分高度为1

4、编辑辅助配置
set autoindent     –自动缩进
set noautoindent   –不自动缩进
set smartindent     –智能缩进
set autoread       –当文件在外部被改变时,vim自动更新载入
set showmatch      –显示匹配的括号

四、常用的状态切换按键
1、普通模式 → 插入模式
i   小写字母i,   在光标位置插入
a  小写字母a,  在光标的下一个位置插入
I   大写字母I,   在光标所在行的第一个非空格处插入
A  大写字母A, 在光标所在行的最后一个字符处插入
o  小写字母o,  在光标所在行的下一行处插入新行
O  大写字母O, 在光标所在行的上一行处插入新航
r   小写字母r,   替换光标所在处的字符一次
R  大写字母R, 持续替换光标所在处的字符,直到按下「ESC」键

2、普通模式 → 命令模式
:w   保存文件
:w!  强制保存文件(前提是用户有修改文件访问权限的权限)
:q   退出缓冲区
:q!  强制退出缓冲区而不保存
:wq   保存文件并退出缓冲区
:wq!  强制保存文件并退出缓冲区(前提是用户有修改文件访问权限的权限)
:w [filename]  另存为名为filename文件
:r [filename]   将另外一个文件读入到正在编辑的文件
:n1,n2 w [filename]  将n1行到n2行的数据另存为名为filename文件
:x      保存并退出
ZZ    保存并退出
ZQ   不保存退出

3、插入模式 → 视图模式
按下「ESC」键

4、命令模式 → 视图模式
按下「ESC」键

五、常用的光标移动按键
1、光标字符操作
h  向左箭头键(←) 光标向左移动一个字符
l   向右箭头键(→) 光标向右移动一个字符
j   向下箭头键(↓) 光标向下移动一个字符
k  向上箭头键(↑) 光标向上移动一个字符
$  光标移动到行尾(End),注意要按「Shift」键
0  光标移动到行首(Home)
^  光标移动到行首第一个非空白字符(Home),注意要按「Shift」键

2、光标词操作
w   光标移动到后一词的词首
W  光标移动到后一词的词首且忽略标点符号
e   光标移动到后一词的词尾
E   光标移动到后一词的词尾且忽略标点符号
b   光标移动到前一词的词首
B   光标移动到前一词的词首且忽略标点符号

3、光标行操作
G     光标移动到文件的最后一行的第一个非空白字符
nG/ngg 光标移动到文件的第n行,相当于”:n”
gg    光标移动到文件的第1行的第一个非空白字符

4、光标页操作
Ctrl + f   向下翻页(Pagedown)
Ctrl + b  向上翻页(Pageup)
Ctrl + d  向下翻半页
Ctrl + u  向上翻半页
「H」  光标移动到目前显示页的第一行
「M」  光标移动到目前显示页的中间行
「L」   光标移动到目前显示页的最后一行

5、光标自由操作
Ctrl + o  回到光标的上一位置

六、常用编辑操作按键
1、删除操作(delete)
dd   删除光标所在行
ndd    删除从光标所在行开始,向下的n行
d1G   删除从光标所在行开始,到第一行的所有行
dG   删除从光标所在行开始,到最后一行的所有行
d$    删除从光标所在位置,到行尾的所有字符
d0    删除从光标所在位置,到行首的所有字符
x    每按一次,删除光标所在位置的“后面”一个字符。
nx     删除光标所在位置的“后面”n个字符。
X      大写的X,每按一次,删除光标所在位置的“前面”一个字符。
nX    删除光标所在位置的“前面”n个字符。

2、复制操作(yank)
yy   复制光标所在行
nyy    复制从光标所在行开始,向下的n行
y1G   复制从光标所在行开始,到第一行的所有行
yG     复制从光标所在行开始,到最后一行的所有行
y$   复制从光标所在位置,到行尾的所有字符
y0   复制从光标所在位置,到行首的所有字符
J     将光标所在行与下一行合并成一行
yw     复制当前光标所在的字母到该单词的最后一个字母
yaw   复制当前光标所在的单词

3、粘贴操作(paste)
p  小写字母p,粘贴剪贴板中的数据,从光标所在行的下一行开始
P  大写字母P,粘贴剪贴板中的数据,从光标所在行的上一行开始~~

4、撤销与重做操作(undo)
u   撤销上一个操作

5、重复操作
.   重复上一操作

6、替换操作(replace)
r    替换光标所在处字符
R   进入替换模式,直至按ESC退出
cc     替换光标所在行
cw    替换光标所在的英文单词
~    转换大小写
:n1,n2s/old/new/g  从n1到n2行将old替换成new,g表示全部替换
:1,/old/new/g  将整个文件的old替换成new :1,s/old/new/gcc表示确认
new (y/n/a/q/l/E/Y)? 表示如下:
    y:    替换当前内容
    n:   不替换
    a:    替换所有
    q:    退出
    l:   替换当前内容,并退出
    Ctrl + e:向后查找
    Ctrl + y:向前查找

7、排版操作
:le    光标所在行左对齐
:ri     光标所在行右对齐
:ce   光标所在行居中

8、查看历史
:history  显示最近在vim里面输入的历史

七、常用的搜索快捷键
1、搜索字符串
/string    向下搜索字符串“string”
?string   向上搜索字符串“string”

2、重复上次搜索
n   根据上次搜索条件找到下一个匹配的字符串
N  根据上次搜索条件找到上一个匹配的字符串

八、常用多缓冲区操作按键
1、单一缓冲区打开多个文件
:files  显示目前打开了哪些文件
:n    切换到下一个缓冲区内容
:N   切换到上一个缓冲区内容
:2n    切换到下下个缓冲区内容
:bn    下一个缓冲区内容(buffer next)
:bp    上一个缓冲区内容(buffer previous)

2、多个缓冲区打开多个文件
:sp [filename]  打开一个新的缓冲区,如果有filename则内容为该文件,否则为当前文件
Ctrl+w n  新建一个缓冲区
Ctrl+w q  退出光标所在的缓冲区
Ctrl+w j   光标移动到下一缓冲区
Ctrl+w k  光标移动到上一缓冲区
Ctrl+w l  光标移动到右一缓冲区
Ctrl+w h  光标移动到左一缓冲区
Ctrl+w v  左右切割窗口新建缓冲区
Ctrl+w s  上下切割窗口新建缓冲区
Ctrl+w o  使光标所在缓冲区最大化,其他缓冲区隐藏

九、关于加密
1、加密文本文件
当你用vim打开或新建一个文件时,如果加上-x参数,即:

vim -x test.txt  –打开你要加密的文本文件

那么vim会提示你:
Enter entryption key:
当你输入了密码后,vim会提示你重复输入以确认:
Enter same key again:
当你在设置密码的时候,是以*来显示的,非明文。打开文件之后,:wq保存退出,密码才生效。

当下次有人(包括你自己)打开该文件的时候,vim就会提示:
Enter encryption key:
这时你只要输入你之前所设置的密码就可以了。如果你输入的密码是错误的,vim并不会提示你密码错误,而是显示一堆无意义的垃圾代码。

2、解除加密与重设密码
打开你已经加密的文件,然后输入:

vim test.txt   –打开加密文件之后,输入下面内容

:set key=
1
2
这样,你的密码就被设置为空了,今后进入就不再需要输入密码了。而如果你向重设密码的话,你可以输入:

:X
1
注意是个大写字母X。这时vim会提示你,只要反复输入两次新的密码就可以了:

Enter entryption key:
Enter sanme key again:
1
2
如果是清除密码,连续敲两次键盘就可以了

注意:

加密、解除密码、重设密码之后,一定要保存之后才能生效。
如果密码输入错误,vim不会拒绝访问者编辑文件。在这种显示乱码的情况下编辑文件并保存,整个文件就会变得混乱不堪,无法辨识。今后即使使用正确的密码打开文件,也看不到正确的文档了。