目录
一、三种模式
在使用VI/VIM编辑文件之前,我们需要了解Vim/Vi下的三种模式:
1、命令模式:用户对一个文件启动 Vim/Vi,便进入了命令模式(也称为一般模式)。此状态下敲击键盘动作会被Vim识别为命令,而非输入字符。在此模式下,可以通过命令对文件内容进行删除,复制,粘贴等行为。
2、插入模式:在命令模式下,输入i, I, o, O, a, A, r, R等任意命令,便会立即进入插入模式(也称之编辑模式),在这个模式下,我们才可以对文件进行详细的编辑,比如使用退格键,删除键,回车键等各式各样的文本编辑了。按 ESC 键回到命令模式。
3、底线命令模式:在命令模式下,输入字符【:?/】三个中的任意一个,就会来到底线命令模式下。在这个模式下,我们可以完成搜索、读取、存档、离开Vim/Vi等很多行为。按【ESC】键回到命令模式。
以图形来表示三种模式的关系:
二、VI/VIM的使用
1、命令模式下的常用指令
a)移动游标
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行(常用) |
b)搜索、替换
/word | 向游标之下查询一个名为word的字串,回车后,就移至到其位置! (常用) |
?word | 向游标之上查询一个名为word的字串 |
n | 这个n是英文按键。代表重复执行前一个搜寻的动作。表示下一个next |
N | 这个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字符串进行替换!并且在取代前询问使用者来确认是否需要取代!(常用) |
常用:
:n1,n2s/^/#/g 使用#连续注释
:n1,n2s/^#//g 取消#的连续注释
:n1,n2s/^/\/\//g 使用//连续注释
c)删除、复制与粘贴
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、进入与退出插入模式的命令
a)进入插入模式
进入插入模式后, vi 界面的左下角处会出现 [--INSERT--] 或 [--REPLACE--] 的字样。此时才能在文件里面输入字符时。
i, I | i 为从目前游标所在处插入, I 为在游标所在行的行首插入 (常用) |
a, A | a 为在游标所在处的下一个字符开始插入,A为在游标所在行的行尾插入(常用) |
o, O | o为英文字母。o为在游标所在的下一行插入新的一行,O为在游标所在行的上一行插入新行(常用) |
r, R | r只会替换游标所在处的那一个字符;R会一直取代游标所在处的字符(常用) |
b)退出插入模式
[Esc] | 退出插入模式,回到命令模式中(常用) |
3、底行命令模式的退出等操作
a)底行命令模式的退出
:w | 将编辑的文件写入磁盘中,即保存(常用) |
:w! | 如文件为只读时,强制写入到该文件。不过到底能不能写入,还是要看你的权限! |
:q | 离开 vi (常用) |
:q! | 强制退出Vi。不进行保存操作。 |
:wq | 保存并退出。若为 :wq! 則表示强制存储并退出 (常用) |
ZZ | 如文件没有更新,则不保存离开,如有更新,就保存离开 |
:w [filename] | 将编辑的文件存储为另一个文件,相当于另存为 |
:r [filename] | 在编辑的文件中,读入另一个文件的数据。即将『filename』 这个文件的内容添加到游标之后。 |
:r !命令 | 导入命令执行结果 |
:n1,n2 w [filename] | 将第n1行到第n2行的数据保存到filename文件里 |
:! command | 暂时离开 vi 到指令列模式下执行 command 的显示结果。例如『:! ls /home』 |
感叹号 [ !] 在vi中,通常具有强制的意思
b)VIM的行号设置
:set nu | 显示行号 |
:set nonu | 取消行号 |
三、Vim的额外功能
1、命令模式下的区块选择
v | 字符选择,会将游标经过的地方选中 |
V | 行选择,会将游标经过的行选中 |
[Ctrl]+v | 列选择,可以用方形的方式选择数据 |
y | 复制选中的数据 |
d | 删除选中的数据 |
p | 将复制的数据 粘贴到游标所在处 |
2、底行命令模式下的多文档编辑
可以在同一个终端中同时编辑多个文件
同时编辑多个文件的语法:Vim filename1 filename2 ..........
在底行命令模式下进行下列操作:
:n | 编辑下一个文件 |
:N | 编辑上一个文件 |
:files | 列出当前Vim正在编辑的文件列表 |
注意 :切换编辑文件时一般需要加感叹号 [ ! ]
3、底行命令模式下的多窗口功能
同样在底行命令模式下,与多文档编辑不同的是,多窗口在同一个终端中分为多个窗口显示不同文件;而多文档编辑终端只显示一个文件,通过切换命令来达到多文档编辑的效果。
语法:[ :sp filename ]
:sp [filename] | 开启一个新窗口,指定 filename,新窗口就显示新文件的内容,不指定名称,就是同一个文件。 |
[ctrl]+w+ j / [ctrl]+w+↓ | 游标移动到下方的窗口。 |
[ctrl]+w+ k / [ctrl]+w+↑ | 游标移动到上方的窗口。 |
[ctrl]+w+ q | 关闭游标所在的窗口 |
4、插入模式下的单词补全功能
当处于Vim插入模式时,我们输入某一个单词的首字母后,可以按以下组合按键
[ctrl]+x -> [ctrl]+n | 以正在编辑的文件里的内容文字作为关键字进行补全 |
[ctrl]+x -> [ctrl]+f | 以当前目录内的文件名作为关键字,进行补全 |
[ctrl]+x -> [ctrl]+o | 以文件类型的内置语法进行补全 |
参考资料:https://blog.csdn.net/Michael__One/article/details/85114886