vi是Linux系统中一款编辑软件,也是Linux系统中第一款全屏幕编辑软件。
- vi的启动
命令:vi test.txt
该编辑器的启动方式很简单,只需在终端窗口中输入命令即可。该命令就会进入vi编辑器中编辑一个名叫test.txt的文件。如果该文件已存在,输入该命令则vi会将该文件的整个内容读取到已准备进行编辑的缓冲区当中,若该文件不存在,则vi将打开一个新的缓冲区域来进行编辑。
- vi的三种模式
(1)命令行模式
在终端输入启动vi的命令,进入编辑器中时就是命令行模式。在此模式下,用户可以通过控制屏幕光标的移动,进行字符或者行的删除复制等操作。
(2)插入模式
在命令行模式下输入i(insert)即可进入插入模式。在此模式下,用户可以进行输入、查找等基本的文本操作。
(3)末行模式
末行模式也称作转义模式。在命令模式下,按“:”(冒号)即可进入末行模式,此时vi会在窗口的最后一行显示一个“:”作为末行模式的提示符,等待用户输入命令。在此模式下,可将文本保存或退出编辑器,也可以进行设置编辑环境等操作,还可进行字符串的查找操作。
- 三种模式的转换
命令行模式下按“i”可进入插入模式,按“:”可进入末行模式。
插入模式下按Esc键返回命令行模式。
末行模式下输入命令完成后可自动返回命令行模式。
- 基本操作
以下内容仅显示常用操作。
(1)移动光标
vi可以直接用键盘上的方向键来进行屏幕上光标的上下左右移动。
k 上移
j 下移
h 左移
l 右移
Ctrl+b 屏幕往后移动一页
Ctrl+f 屏幕往前移动一页
Ctrl+u 屏幕往后移动半页
Ctrl+d 屏幕往前移动半页
0(零,非大O) 移动到光标所在行的行首
gg 光标移动到文件首行行首
G 移动到末行行首
$ 移动到光标所在行的行尾
^ 移动到光标所在行的行首
w 光标移动到下个字(单词)的开头
e 光标移动到下个字(单词)的结尾(如果光标所在位置非单词尾部,则跳到该单词的尾部,如 果光标位于单词尾部,则跳到下个单词尾部)
b 光标回到上个字(单词)的开头(如果光标所在位置非单词开头,则跳到该单词的开头,如果 光标位于单词开头,则跳到上个单词开头)
nl 光标位置向后移动n个位置
:n 光标跳转到第n行行首
nG 光标跳转到第n行行首
例:用于测试的test.txt的文件内容如下,此时,初始光标位置在第6行“f”处,测试时,每行测试数据的光标默认为初始位置
按0,光标移动到第6行的“a”处
按gg,光标移动到第1行的“a”处
按G,光标移动到第10行“H”处
按$,光标移动到第6行“g”处
按^,光标移动到第6行“a”处
按w,光标移动到第7行“A”处,再按w,光标移动到第8行行首,空行也算单词
按e,光标移动到第6行“g”处,再按e,光标移动到第7行“G”处
按b,光标移动到第6行“a”处,再按b,光标移动到第5行“!”处
按1l(数字1和字母l),光标移动到第6行“g”处,如果按2l,光标还是移动到“g”处
按:10,光标跳转到第10行“H”处(末行模式)
按10G,光标跳转到第10行“H”处
(2)进入插入模式
启动vi后,进入的模式是命令行模式。此时,可根据不同需要按键进入插入模式。
i 在光标当前位置开始插入
I 在光标所在行的行首插入
a 在光标所在位置的下一个位置开始插入
A 在光标所在行的行末插入
o 插入新的一行,在行首开始插入
O 在光标所在行的下面插入一行
s 删除光标后的一个字符,并进入插入模式
S 删除光标所在的行,然后进入插入模式
例:用于测试的test.txt的文件内容如下,此时,光标初始位置在第10行“e”处,测试时,每行测试数据的光标默认为初始位置
按i,在第10行的“e”位置开始插入,插入的内容显示到“e”的前一位置
按I,在第10行的“H”位置开始插入,插入的内容显示到“H”的前一位置
按a,在第10行的“l”位置开始插入,插入的内容显示到“l”的前一位置
按A,在第10行的“!”的下一位置开始插入,插入的内容显示到“!”后边
按o,在第10行下边插入新的一行,插入的内容显示到第11行行首
按O,在第10行上边插入新的一行,插入的内容显示到第10行行首,将原先的第10行的内容下移,即第 11行
按s,删除第10行的“e”字符,插入的内容显示到“l”的前一位置
按S,删除第10行的全部内容,插入的内容显示到第10行行首
(3)命令模式下删除操作
x 删除光标所在位置的字符
nx 删除光标所在位置的字符及后面的(n-1)个字符
X 删除光标所在位置的前面一个字符
nX 删除光标所在位置前面的n个字符
dd 删除光标所在行的内容
ndd 从光标所在行开始删除n行
D 删除从光标位置到光标所在行行尾的内容
dG 删除光标所在行到行尾的所有内容
d1G 删除光标所在行到第一行的所有内容
:n,md 删除从第n行到第m行的内容(末行模式)
例:用于测试的test.txt的文件内容如下,此时,光标初始位置在第5行“@”处,测试时,如无额外说明,每行测试数据的光标默认为初始位置
按x,删除第5行的“@”,光标移动到“!”处
按2x,删除第5行的“@#”,光标移动到“$”处
按X,删除第5行的“!”
若光标位于第6行的“d”处,按3X,删除第6行的“abc”
按dd,删除第5行的全部内容,后面内容依次上移
按3dd,删除第5、6、7行动的全部内容,后面内容依次上移
按D,删除第5行的“@#$”
按dG,删除第5行到第10行的全部内容
按d1G,删除第1行到第5行的所有内容
按:8,9d,删除第8行和第9行内容
追加:在命令模式下按u可撤销上一步操作
(4)命令模式下复制粘贴操作
yw 从光标所在处复制该单词到缓冲区(若光标在单词开头,则复制完整单词,否则从光标处复制)
nyw 复制从光标所在处开始的n个单词到缓冲区(若光标在单词开头,则复制完整单词,否则从光标处复制)
yy 复制光标所在行到缓冲区
nyy 复制从光标所在行开始的n行内容到缓冲区
p 将缓冲区的内容吓到光标所在位置
例:用于测试的test.txt的文件内容如下,此时,光标初始位置在第2行“B”处,测试时,每行测试数据的光标默认为初始位置
按yw,复制第2行的“BCD”到缓冲区,再按p后粘贴到光标所选位置
按2yw,复制第2行的“BCD”和第3行全部内容到缓冲区,再按p后粘贴到光标所选位置
按yy,复制第2行全部内容到缓冲区,再按p后在光标所选位置的下面重新插入一行粘贴
按2yy,复制第2、3行全部内容到缓冲区,再按p后在光标所选位置的下面重新插入一行粘贴
(5)末行模式下查找操作
/word 从上而下在文件中查找字符串“word”
?word 从下而上在文件中查找字符串“word”
例:用于测试的FindWord.txt的文件内容如下左图所示,键入命令/hello后查找图如下中图所示,键入命令?hello后查找图如下右图所示,查找结果都相同,只是光标位置不同
追加:在末行模式下按:noh可取消因为查找而留下的高亮显示
(6)末行模式下替换操作
:s/old/new 将当前行中查找到的第一个目标字符串“old”替换为“new”
:s/old/new/g 将当前行中查找到的所有目标字符串“old”替换为“new”
:n,ms/old/new/g 将行号在“n,m”范围内的目标字符串“old”替换为“new”
:%s/old/new/g 将整个文件中的目标字符串“old”替换为“new”
例:用于测试的FindWord.txt的文件内容如上左图所示,分别测试①替换第1行的第一个“ha”为“hai”②替换第1行的所有“ha”为“hai”③替换4到7行的“ha”为“hai”④替换文件中所有的“ha”为“hai”
注意:要替换n,m行范围内的目标字符串时,光标必须处在该范围内。
(7)末行模式下的其他操作
:w 保存文件
:q 退出(若:q无法退出,可使用:q!来强制退出)
:wq 保存文件并退出
(8)注释与反注释
注释:
①在命令行模式下,将光标固定在想注释行的第一行的第一列,按Ctrl+V进入可视化(VISUAL BLOCK)模式
②上下移动光标,选择想要注释的行
③按I(大写I)进入插入(Insert)模式,输入注释符“//”或“#”
④按两次Esc键,注释完成
例:注释FindWord.txt文件中第4、5、6行代码
或者,输入命令:4,6s/^/#/g(冒号也是命令的一部分,“#”注释)
或者,输入命令:4,6s#^#//#g(冒号也是命令的一部分,“//”注释)
反注释:
①命令行模式下,将光标固定在想要反注释行的第一行的第一列,按Ctrl+V进入可视化(VISUAL BLOCK)模式
②上下移动光标,选择想要反注释掉的行首的注释符号
③按“d”删除注释符,即完成反注释
(9)分屏
:spilt(或者:sp) 水平分屏
:vsplit(或者:vsp) 垂直分屏
:only 取消分屏(保留当前屏)
Ctrl+w+h 切换到当前屏的左边一屏
Ctrl+w+l 切换到当前屏的右边一屏
Ctrl+w+j 切换到当前屏的下边一屏
Ctrl+w+k 切换到当前屏的上边一屏
示例:水平分屏
vi命令打开一个文件,然后在命令模式下输入分屏代码
水平分屏结果:
如此图所示,当前屏为test.txt,即光标所在的屏,若接下来键入:only命令,则test.txt屏将被保留。
以上即是本人对于vi的基本操作的简单总结,后期会持续更新~~