vi编辑器是Linux系统下最基本的编辑器,工作在字符模式下。由于不使用图形界面,因此Vi的工作效率非常高,且它在系统和服务管理中的功能是带图形界面的编辑器无法比拟的。
vi编辑器有三种模式:命令模式(command mode)、插入模式(insert mode)和底行模式(last line mode)
命令模式:
使用vi编辑器打开文件后,默认进入命令模式。在该模式下可以通过键盘控制逛变得移动以及文本内容的复制 粘贴 删除等。
1. 光标移动:
级别 | 操作符 | 说明 |
字符级 | “左键”或字母h | 使光标向字符的左边移动 |
“右键”或字母l | 使光标向字符的右边移动 | |
行级 | “上键”或字母k | 使光标移动到上一行 |
“下键”或字母j | 使光标移动到下一行 | |
符号$ | 使光标移动到当前行尾 | |
数字0 | 使光标移动到当前行首 | |
单词级 | 字母w | 使光标移动到下一个单词的首字母 |
字母e | 使光标移动到本单词尾字母 | |
字母b | 使光标移动到本单词首字母 | |
段落级 | 符号} | 使光标移动到段落结尾 |
符号{ | 使光标移动到段落开头 | |
屏幕级 | 字母H | 使光标移动到屏幕首部 |
字母L | 使光标移动到屏幕尾部 | |
文档级 | 字母G | 使光标移动到文档尾行 |
n+G | 使光标移动到文档的第n行 |
3. 删除
操作符 | 说明 |
字母x | 删除光标所在的单个字符 |
字母dd | 删除光标所在的当前行 |
n+dd | 删除包括光标所在行的后面n行内容 |
d+$ | 删除光标位置到行尾的所有内容 |
4. 复制和粘贴
操作符 | 说明 |
yy | 复制光标到当前行 |
nyy | 复制包括光标所在行的后面n行内容 |
ye | 从光标所在位置开始复制直到当前单词结尾 |
y$ | 从光标所在位置复制到当前行结尾 |
y{ | 从当前段落开始位置复制到光标所在位置 |
p | 将复制内容粘贴到光标所在位置 |
几种常见命令:
u:撤销
.:重新执行上一次命令
J:合并两行内容
r:快速替换光标所在字符
插入模式
只有在插入模式下,才能对文件内容进行修改操作,此模式下的操作与Windows记事本的操作类似。插入模式与低行模式之间不能直接转换。
底行模式
底行模式可以对文件进行保存,也可进行查找,退出编辑器等操作
① :set nu。设置行号,仅对本次操作有效
② :set nonu。取消行号,仅对本次操作有效
③ :n。使光标移动到第n行
④ :/xx。在文件中查找xx,若查找结果不为空,可以使用n查找下一个,使用N查找上一个
⑤ 底行模式下还可以进行内容替换:
操作符 | 说明 |
:s/被替换内容/替换内容/ | 替换光标所在行的第一个目标 |
:s/被替换内容/替换内容/g | 替换光标所在行的所有目标 |
:%s/被替换内容/替换内容/g | 替换整个文档中的所有目标 |
:%s/被替换内容/替换内容/gc | 替换整个文档中的所有目标,且没替换一个内容都有相应的提示 |
⑥ 操作完毕后,如需保存文件或退出编辑器,可先使用Esc进入底行模式,再使用以下操作符完成相应操作
操作符 | 说明 |
:q | 退出vi编辑器 |
:w | 保存编辑后的内容 |
:wq | 保存并退出vi编辑器 |
:q! | 强行退出vi编辑器,不保存对文件的修改 |
:w! | 对于没有修改权限的用户强行保存对文件的修改,并且修改后文件的所有者和所属组都有相应的变化 |
:wq! | 强行保存文件并退出vi编辑器 |
模式切换
命令模式转换至插入模式:插入命令 插入模式转换至命令模式:Esc
命令模式转换至底行模式:“: ” 底行模式转换至命令模式:自动切换
1)命令模式和插入模式之间的转换:
按键“i”可直接进入插入模式,此时内容和光标位置与命令模式相同
操作符 | 说明 |
a | 光标向后移动一位进入编辑模式 |
s | 删除光标所在的字母进入编辑模式 |
o | 在当前行之下新起一行进入编辑模式 |
A | 光标移动到当前行末尾进入编辑模式 |
I | 光标移动到当前行行首进入编辑模式 |
S | 删除光标所在行进入编辑模式 |
O | 在当前行之上新起一行进入编辑模式 |
Esc可直接返回命令模式
2)命令模式和底行模式之间的转换
在命令模式输入:或者/,可进入底行模式。若从底行模式返回命令模式,可使用Esc键。若底行不为空,可连续按两次Esc,清空底行并返回命令模式
设置
如何将底行模式下对vi编辑器的设置长久有效?
[mjj@localhost ~ ]$vi .vimrc
.vimrc 为隐藏文件
设置 | 说明 |
set number | 设置行号 |
set autoindent | 自动对齐 |
set smartindent | 智能对齐 |
set showmatch | 括号匹配 |
set tabstop=4 | 使用Tab键时为4个空格 |
set mouse=a | 鼠标支持 |
set cindent | 使用c语言格式对齐 |