一、Vim/Vi的简介
1、为什么要学习Vim/Vi
世界上的文本编辑器(含代码编辑器)的种类多不胜数,他们各有各的优点,在功能设计上也很强大,可视化界面上也越做越好看,既然有那么多的编辑器,我们为什么还要学习Vim/Vi呢。我来说一下原因:
1、所有的类Unix系统,都自带vi 文本编辑器
2、很多应用程序的编辑界面都会主动呼唤 vi编辑器
3、vim 具有程序编辑的能力,可以主动的以字体颜色辨别语法的正确性,方便程序设计;
4、操作简单,编辑速度快。
这回知道为什么要学习Vim/Vi了吧。其实主要原因是第二点,因为在Linux系统中有太多的指令都预设使用 vi 作为文本编辑的界面,所以你必须、一定要学会 vi ,否则很多指令你根本就无法操作。
2、Vi与Vim的关系
Vi是一个功能强大的全屏幕文本编辑器,是Linux/Unix上最常用的多模式文本编辑器,它可以建立、编辑和显示文本等操作。Vi编辑界面上,没有菜单,可以通过多种指令进行快速编辑。
Vim可以理解为是Vi的升级版,它兼容了Vi的所有指令,同时还提供了额外的优越特性:
- 支持语法高亮显示,同时支持多种开发语言语法检查
- 区块选择(Visual Block)
- 多档案编辑
- 多视窗功能
- 挑字补全功能
- 多级撤销
由于上面的第一条特性,因此Vim特别适合代码编辑,也因此有人称之为“代码开发工具”。
3、模式介绍
基本上 Vim/Vi 可以概括为三种模式,分別是命令模式,插入模式,底线命令模式。他们的作用分别是:
命令模式:用户对一个文件启动 Vim/Vi,便进入了命令模式(也称为一般模式)。此状态下敲击键盘动作会被Vim识别为命令,而非输入字符。比如我们此时按下i,并不会输入一个字符,i被当作了一个命令。在此模式下,可以通过命令对文件内容进行删除,复制,粘贴等行为
插入模式:在命令模式下,输入i, I, o, O, a, A, r, R等任意命令,便会立即进入插入模式(也称之编辑模式),在这个模式下,我们才可以对文件进行详细的编辑,比如使用退格键,删除键,回车键等各式各样的文本编辑了。按【ESC】键回到命令模式
底线命令模式:在命令模式下,输入字符【:?/】三个中的任意一个,就会来到底线命令模式下。在这个模式下,我们可以完成搜索、读取、存档、离开Vim/Vi等很多行为。按【ESC】键回到命令模式
以图形来表示一下三种模式的关系:
二、Vim/Vi的使用
大概了解了Vim/Vi后,好奇的你是不是想立刻知道都有哪些好玩的命令呢?下面以表格的形式分别来介绍一下。
1、命令模式下的常用指令
移动游标的方法 | |
h 、 向左方向鍵(←) | 游标向左移动一个字符 |
j 、向下方向鍵(↓) | 游标向下移动一个字符 |
k 、 向上方向鍵(↑) | 游标向上移动一个字符 |
l 、 向右方向鍵(→) | 游标向右移动一个字符 |
如果想要进行多次移动的话,比如向下移动 30 列,可以使用 "30j" 或 "30↓" 的组合按键, 也就是加上想要进行的次数,按下指令即可! | |
[Ctrl] + [f] | 屏幕『向下』移动一页,相当于 [Page Down]按键 (常用) |
[Ctrl] + [b] | 屏幕『向上』移动一页,相当于 [Page Up] 按键 (常用) |
[Ctrl] + [d] | 屏幕『向下』移动半页 |
[Ctrl] + [u] | 屏幕『向上』移动半页 |
+ | 游标移动到下一行的行首 |
- | 游标移动到上一行的行首 |
n<space> | n 表示『数字』,例如 20 。按下数字后再按空格键,游标会向后移动n个字符的距离。例如 20<space> 则游标向右移动20个字符 |
0 或功能键[Home] | 数字『 0 』:移动到这一行的行首 |
$ 或功能鍵[End] | 移动到这一行的行尾 |
H | 移动到当前屏幕的最上一行的行首 |
M | 移动到当前屏幕的中间一行的行首 |
L | 移动到当前屏幕的最下一行的行首 |
G | 移动到这个文件的最后一行(常用) |
nG | n 为数字。移动到这个文件的第n行。例如 20G 则会移动到这个文档的20第20行(可配合 :set nu) 相当于【:n】 |
gg | 移动到这个文件的第一行,相当于1G (常用) |
n<Enter> | n 为数字。游标向下移动n行(常用) |
搜索、替换等命令 | |
/word | 向游标之下查询一个名为word的字串,回车后,就移至到其位置! (常用) |
?word | 向游标之上查询一个名为word的字串 |
n | 这个n是英文按键。代表重复执行前一个搜寻的动作。表示下一个next |
N | 这个N与n的方向相反,表示上一个 |
使用 /word 配合 n 及 N 是非常有帮助的,可以让你重复的找到一些你要搜寻的关键字 | |
:n1,n2s/word1/word2/g | n1 与 n2 均表示数字。表示在第 n1 与 n2 行之间寻找word1字符串,并使用word2字符串进行替换(常用) |
:1,$s/word1/word2/g | 从第一行到最后一行搜寻word1字符串,使用word2字符串进行替换(常用) 相当于【:%s/word1/word2/g】 |
:1,$s/word1/word2/gc | 从第一行到最后一行搜寻word1字符串,使用word2字符串进行替换!并且在取代前询问使用者来确认是否需要取代!(常用) |
删除、复制与粘贴 | |
x, X | 在一行字符中,x表示向后删除一个字符(相当于del键),X为向前删除一个字符(相当于退格键) (常用) |
nx | n 为数字,连续向后删除n个字符。 |
dd | 刪除游标所在的那一行(常用) |
ndd | n 为数字。删除游标所在的向下n行(常用) |
:n1,n2d | n1和n2都是数字,表示删除第n1行到第n2行的数据 |
d1G | 刪除游标所在到第一行的所有行数据 |
dG | 刪除游标所在到最后一行的所有行数据 |
d$ | 刪除游标所在行,到该行的行尾 |
d0 | 0为数字 ,刪除游标所在行,到该行的行首 |
yy,Y | 复制游标所在的那一行数据(常用) |
nyy,nY | n 为数字。复制游标所在的向下n行(常用) |
y1G | 复制游标所在行,到第一行的所有数据 |
yG | 复制游标所在行,到最后一行的所有数据 |
y0 | 复制游标所在行,到行首的所有数据 |
y$ | 复制游标所在行,到行尾的所有数据 |
p, P | p表示将复制的数据粘贴到游标所在行的下一行,P表示将复制的数据粘贴到游标所在行的上一行 (常用) |
J | 将游标所在行与下一行结合成同一行 |
c | 重复删除多行数据,例如向下刪除 10 列,[ 10cj ] |
u | 撤销前一个动作。(常用) |
学会了撤销后,是不是很快乐啊 | |
. | 不要怀疑,对,就是小数点!意思是重复前一个动作的意思。 如果你想要重复刪除、重复粘贴等等动作,按下小数点就好了 (常用) |
2、进入插入模式的命令
下面的命令都是进入插入模式的命令: | |
i, I | i 为从目前游标所在处插入, I 为在游标所在行的行首插入 (常用) |
a, A | a 为在游标所在处的下一个字符开始插入,A为在游标所在行的行尾插入(常用) |
o, O | o为英文字母。o为在游标所在的下一行插入新的一行,O为在游标所在行的上一行插入新行(常用) |
r, R | r只会替换游标所在处的那一个字符;R会一直取代游标所在处的字符(常用) |
这些按键后,在 vi 界面的左下角处会出现『--INSERT--』或『--REPLACE--』的字样。注意:你想要在文件里面输入字符时,一定要在左下角处看到 INSERT 或 REPLACE 才能输入。 | |
[Esc] | 退出插入模式,回到命令模式中(常用) |
3、底行命令模式的退出等操作
底行命令模式的退出等指令 | |
:w | 将编辑的文件写入磁盘中,即保存(常用) |
:w! | 如文件为只读时,强制写入到该文件。不过到底能不能写入,还是要看你的权限! |
:q | 离开 vi (常用) |
:q! | 强制退出Vi。不进行保存操作。 |
注意,感叹号!在vi中,常常具有『強制』的意思 | |
:wq | 保存并退出。若为 :wq! 則表示强制存储并退出 (常用) |
ZZ | 如文件没有更新,则不保存离开,如有更新,就保存离开 |
:w [filename] | 将编辑的文件存储为另一个文件,相当于另存为。 |
:r [filename] | 在编辑的文件中,读入另一个文件的数据。即将『filename』 这个文件的内容添加到游标之后 |
:n1,n2 w [filename] | 将第n1行到第n2行的数据保存到filename文件里 |
:! command | 暂时离开 vi 到指令列模式下执行 command 的显示结果。例如『:! ls /home』 |
VIM的行号设置 | |
:set nu | 显示行号 |
:set nonu | 取消行号 |
4、一些应用案例
应用1:导入命令执行结果
:r !命令
应用2:连续行注释
:n1,n2s/^/#/g 使用#连续注释
:n1,n2s/^#//g 取消#的连续注释
:n1,n2s/^/\/\//g 使用//连续注释
三、Vim的额外功能
1、区块选择的使用
在命令模式下,我们使用按钮v就可以进行区块的处理了,下面是相关命令
区块选择的按键意义 | |
v | 字符选择,会将游标经过的地方选中 |
V | 行选择,会将游标经过的行选中 |
[Ctrl]+v | 列选择,可以用方形的方式选择数据 |
y | 复制选中的数据 |
d | 删除选中的数据 |
p | 将复制的数据 粘贴到游标所在处 |
2、多文档编辑
比如我们想将文件a里的某一行记录,复制到文件b中,我们可以想到在图形化界面中开两个终端来完成。而Vim本身就提供了可以同时编辑多个文件,这样就不用在另开一个终端了,方便又省时。
同时编辑多个文件的语法:Vim filename1 filename2 ..........
在Vim界面我们可以在底行命令模式下进行下列操作:
:n | 编辑下一个文件 |
:N | 编辑上一个文件 |
:files | 列出当前Vim正在编辑的文件列表 |
3、多窗口功能
现在很多编辑工具都有多窗口功能,每个窗口打开一个文件,我们多用于对比两个文件的内容,用起来特别方便。在Vim上也有这样的功能,很帅吧。
在Vim界面的底行命令模式下,我们可以输入【:sp filename】打开一个窗口对新文件进行编辑。如果sp后没有指定新文件名,就默认打开同一个文件。
多窗口的按键功能 | |
:sp [filename] | 开启一个新窗口,指定 filename,新窗口就显示新文件的内容,不指定名称,就是同一个文件。 |
[ctrl]+w+ j [ctrl]+w+↓ | 游标移动到下方的窗口。 |
[ctrl]+w+ k [ctrl]+w+↑ | 游标移动到上方的窗口。 |
[ctrl]+w+ q | 关闭游标所在的窗口 |
4、Vim的单词补全功能
使用过eclipse、notepad++等工具的人都应该知道,单词补全功能可以让人在编辑时提高工作效率。同样的,Vim也不会没有这个功能。
当处于Vim插入模式时,我们输入某一个单词的首字母后,可以按以下组合按键
组合按键 | 补全的内容 |
[ctrl]+x -> [ctrl]+n | 以正在编辑的文件里的内容文字作为关键字进行补全 |
[ctrl]+x -> [ctrl]+f | 以当前目录内的文件名作为关键字,进行补全 |
[ctrl]+x -> [ctrl]+o | 以文件类型的内置语法进行补全 |
应用案例:
--------------------------------------------------------------------整理完毕,敬请留言---------------------------------------------------------------------------------------