vim基础操作
vim可以称得上是古董级的编辑软件了,具有开源、可扩展性好等很多优点,通过各种插件的配合能够变身成为强大的IDE。由于想要将vim的功能发挥到极致,需要记忆大量的命令,掌握起来相对困难。随着其它各种IDE的完善,vim在功能方面并没有什么特别优势,除了帮助可怜的乌干达儿童外.....
vim也有几个其他编辑器不具备的优点值得我们掌握这个上古神器的用法。首先,vim或vi被内置在大多数的Unix、Linux系统中,而其它可能需要自行安装。其次,在没有鼠标或非GUI的情况下使用vim也是为数不多的选择。vim的支持者还能列出更多的理由。
vim使用中可以分为三种模式,命令模式、插入模式、视图模式。
一、命令模式
vim设计之初就是让整个文本编辑都用键盘而非鼠标来完成,键盘上几乎每个键都有固定的用法。vim的制作者希望用户在命令模式完成大部分的编辑工作,将此模式设计为默认模式,初学者打开vim,如果直接输入单词,结果就会滴滴乱响,这是因为vim把用户输入的单词理解为命令了。
初学vim最大的障碍就在命令模式中。光标移动、复制粘贴、查找替换、退出保存...,每一种操作都对应着vim中的一个命令。
1.1 文件的打开、退出和保存
在Linux终端中输入vim,然后回车便可开启vim编辑器。
使用vim打开已存在的文件,可在vim 后面跟文件名(注意切换到文件所在目录,或使用文件的绝对路径);如果文件不存在,vim将为你新建一个使用该文件名的文件。
以上两种方式都会打开~/Documents/test.c这个文件,如果test.c不存在,vim将在这个目录下创建一个test.c文件。
关闭文件时,则要根据是否进行了编辑、是否要保存编辑的内容,选用相应的命令。具体命令见下表。
命令 |
说明 |
:w |
保存编辑后的文件内容,但不退出vim编辑器。这个命令的作用是把内存缓冲区中的数据写到启动vim时指定的文件中。 |
:w! |
强制写文件,即强制覆盖原有文件。如果原有文件的访问权限不允许写入文件,例如,原有的文件为只读文件,则可使用这个命令强制写入。但是,这种命令用法仅当用户是文件的属主时才适用,而超级用户则不受此限制。 |
:wq |
保存文件内容后退出vim编辑器。这个命令的作用是把内存缓冲区中的数据写到启动vim时指定的文件中,然后退出vim编辑器。另外一种替代的方法是用ZZ命令。 |
:wq! |
强制保存文件内容后退出vim编辑器。这个命令的作用是把内存缓冲区中的数据强制写到启动vim时指定的文件中,然后退出vim编辑器。 |
ZZ |
使用ZZ命令时,如果文件已经做过编辑处理,则把内存缓冲区中的数据写到启动vim时指定的文件中,然后退出vim编辑器。否则只是退出vim而已。注意,ZZ命令前面无需加冒号“:”,也无需按Enter键。 |
:q |
在未做任何编辑处理而准备退出vim时,可以使用此命令。如果已做过编辑处理,则vim不允许用户使用“:q”命令退出,同时还会输出下列警告信息: No write since last change (:quit!overrides) |
:q! |
强制退出vim编辑器,放弃编辑处理的结果。如果确实不需要保存修改后的文件内容,可输入“:q!”命令,强行退出vim编辑器。 |
:w filename |
把编辑处理后的结果写到指定的文件中保存 |
:w! filename |
把编辑处理后的结果强制保存到指定的文件中,如果文件已经存在,则覆盖现有的文件。 |
:wq! filename |
把编辑处理后的结果强制保存到指定的文件中,如果文件已经存在,则覆盖现有文件,并退出vim编辑器。 |
vim 在编辑某个文件时,会另外生成一个临时文件,这个文件的名称通常以 . 开头,并以 .swp 结尾。Vim 在正常退出时,该文件被删除,若意外退出,而没有保存文件的最新修改内容,则可以使用恢复命令 :recover 来恢复文件,也可以在启动vim时用 -r 选项。
1.2 光标移动
键盘上面的上下左右四个导航键,能够完成相应的光标移动。同时键盘上处在h、j、k、l四个键对应着左、下、上、右的光标移动。
针对光标所在行,以下命令可以使光标到达行首或行尾。
命令 |
说明 |
0或者Home |
将光标移动到行首 |
$或者End |
将光标移动到行尾 |
针对当前屏幕,以下命令可以使光标移动到屏幕的最上、中间、最下的一行的行首。
命令 |
说明 |
H |
光标移动到屏幕最上面一行的行首 |
M |
光标移动到屏幕最中间一行的行首 |
L |
光标移动到屏幕最下面一行的行首 |
针对当前文件,可能进行更大范围的光标移动或翻页,那么可以使用如下命令
命令 |
说明 |
G |
将光标移动到文件的最后一行 |
ctrl+f |
在文件中前移一页(相当于 page down) |
ctrl+b |
在文件中后移一页(相当于 page up) |
vim提供了大量的移动光标的命令,以使光标精确到达我们需要的位置,上述命令仅占该类型命令的一小部分,但已能够满足光标移动的基本要求。
1.3 查找与替换
命令 |
说明 |
/ |
/后跟字符串,用来向下寻找匹配的字符串 |
? |
?后跟字符串,用来向上寻找匹配的字符串 |
结合上面两种基础的搜索命令,可以组合出更多、功能更强大的搜索命令。下面是一些经常配合使用的命令。 |
|
n |
用来重复前一个查找操作。假如刚才执行了/hello来向下查找hello这个字符串,那么n将会再执行一次/hello。 |
N |
用来反向的重复前一个查找操作。 假如刚才执行了/hello来向下查找hello这个字符串,那么N将会执行一次?hello来向上查找。 |
1.5 撤销与恢复
二、插入模式
插入模式下,我们可以进行文本内容的输入、删除、修改等工作。
在命令模式下把光标定位到正确位置后,使用以下命令可以进入到插入模式。
命令 |
简单说明 |
i |
在光标左侧插入正文 |
a |
在光标右侧插入正文 |
I |
在光标所在行的开头插入 |
A |
在光标所在行的末尾插入 |
o |
在光标所在行的下一行增添新行 |
O |
在光标所在行的上一行增添新行 |
三、视图模式