1:首先知道vi三种模式:
命令模式、文本输入模式、末行模式
(1):命令模式,该模式下只接受vi命令,若输入的字符是合法的 vi 命令,则 vi 在接受用户命令之后完成相应的动作。若输入的字符不是 vi 的合法命令,vi 会响铃报警。
(2):文本输入模式:在命令模式下输入插入命令i、附加命令a、打开命令o、修改命令c、取代命令r或替换命令s都可以进入文本输入模式。在该模式下,用户输入的任何字符都被 vi 当做文件内容保存起来,并将其显示在屏幕上。在文本输入过程中,若想回到命令模式下,按下Esc键即可。
(3):末行模式:也称 ex 转义模式,在命令模式下,用户按:键即可进入末行模式下,此时 vi 会在显示窗口的最后一行(通常也是屏幕的最后一行)显示一个:作为末行模式的说明符,等待用户输入命令。多数文件管理命令都是在此模式下执行的(如把编辑缓冲区的内容写到文件中等)。末行命令执行完后,vi 自动回到命令模式。
三者之间如何切换?
Snipaste_2019-08-12_18-01-10.png2:命令
(1):打开
vi (可加路径打开某文件,不存在时创建)
如果只输入 vi,而不带文件名,也可以进入 vi。这时编辑的文件是没有文件名的,所以在退出 vi 时,需要在退出命令后输入文件名,这样才能保证该文件被保存在磁盘中。
vi +行号 文件名 打开某文件,且光标处于指定行号的一行行首
vi 行号 文件名 光标处于文件最末行
vi +/模式字符串 文件名 打开后光标就处于文件中第一个与指定模式串相匹配的那行行首
:set nohlsearch 取消高亮显示
vi 需要打开文件的通配符 vi 可以同时编辑多个文件,写入要操作的文件,还可以使用通配符
(2):编辑
(2.1) 插入文本命令
i(insert缩写),切换进入输入模式
I(Insert before line),在当前行的最顶端输入
(2.2) 追加文本命令
a(append缩写),在当前光标所在位置追加内容
A(Append after line),在当前行的最末尾追加内容
(2.3) 空行插入命令
o(open a new line below),在当前行的下一行输入,即换行
O(Open a line above),在当前行的上面插入一行
(3):删除
(3.1) 删除单个
x 命令:删除光标处的字符。若 x 之前加上一个数字 n,则删除从光标所在位置开始向右的n个字符。
X 命令:删除光标前面的字符。若 X 之前加上数字 n,则删除从光标前面那个字符开始向左的n个字符。
(3.2) 删除多个
dd 命令:删除光标所在的整行。在 dd 前可加上一个数字 n,表示删除当前行及其后 n-1 行的内容。
D 命令或 d$ 命令:两个命令功能一样,都是删除从光标所在处开始到行尾的内容。
d0 命令:该命令删除从光标前一个字符开始到行首的内容。
dw 命令:删除一个单词。若光标在词中间,从光标开始删至词尾. dw前加数字n,表示删除n个指定单词。
d( 命令:该命令删除到上一句开始的所有字符。
d) 命令:该命令删除到下一句开始的所有字符。
d} 命令:该命令删除到上一段开始的所有字符。
d{ 命令:该命令删除到下一段开始的所有字符。
d<CR> 命令:该命令(<CR>表示回车)删除包括当前行在内的两行字符。
(4) 复制粘贴
yy 命令:复制光标所在的整行。在 yy 前可加一个数字 n,表示复制当前行及其后 n-1 行的内容。
Y 或 y$ 命令:两命令功能一样,都是复制从光标所在处开始到行尾的内容。
yw 命令:复制一个单词.若光标在词中间,从光标开始复制至词尾.yw前加数字n,表示复制n个指定的单词
y) 命令:复制到下一句幵始的所有字符。
y} 命令:复制到下一段开始的所有字符。
y<CR> 命令(<CR> 表示回车):复制包括当前行在内的两行内容。
粘贴命令
p 命令:粘贴命令,粘贴当前缓冲区中的内容。
文本选择命令
v 命令:在命令模式下进行文本选择。在需要选择的文本的起始处按下 v 键进入块选择模式,然后移动光
标到块尾处。这之间的部分被高亮显示,表示被选中。
V 命令:在命令模式下按行进行文本选择。在需要选择的文本的第一行按下 V 键,然后移动光标到块的最
后一行。这之间的所有行被高亮显示,表示被选中。
vi 编辑器支持最近编辑内容的恢复,但是由于 vi 编辑器使用寄存器存放最近内容,所以恢复能力有限。vi 编辑器使用 9 个寄存器,可以存放已经删除的 9 个最近内容,这些内容可以被恢复(最近一次删除的会在寄存器1中)
(5) 撤销
u 命令:该命令撤销上一次所做的操作。多次使用 u 命令会一步一步依次撤销之前做过的操作(在一次切
换到文本输入模式中输入的所有文本算一次操作)。
U 命令:该命令会一次性撤销自上次移动到当前行以来做过的所有操作,再使用一次 U 命令则撤销之前的
U 命令所做的操作,恢复被撤销的内容。
(6) 重复
重复命令只能在命令模式下工作,在该模式下按下.键即可
(7) 退出
:q命令 如果退出时当前编辑文件尚未保存,则 vi 并不退出,而是继续等待用户的命令,会提示
No write since last change (use! to overrides)
:q!命令 不论文件是否改变都会强行退出 vi 编辑器,对于此命令用户应当慎用。
:w 新文件名 保存当前编辑文件,但并不退出,而是继续等待用户输入命令。在使用 w 命令时,可以再
给当前编辑文件起一个新的文件名。这个功能相当于将该文件另存为为一个新的文件
:w! 新文件名 该命令与:w命令相同,所不同的是,即使指定的新文件存在,vi 编辑器也会用当前编辑
文件对其进行替换,而不再询问用户。因此,此命令同样要慎用。
:wq 将先保存文件,然后退出 vi 返回到 shell。如果当前文件尚未取名,则需要现指定一个文件名。
:x 若当前编辑文件曾被修改过,则 vi 会保存该文件。否则 vi 直接退出,不保存该文件。
(8) 替换
r命令 该命令将当前光标所指的字符替换为提供的字符。可以在该命令之前加上数字 n,表示将从当
前字符开始的 n 个字符替换为提供的字符。
R命令 该命令会让 vi 进入 replace 模式。在此模式下,每个输入的字符都会替换当前光标下的字符
,直到输入 <Esc> 结束该模式。
(9) 光标移动
(9.1) 基本移动命令
h命令 光标左移一个字符
j命令 光标下移一行
k命令 光标上移一行
l命令 光标右移一个字符
(9.2) 按行移动
H命令 将光标移至当前屏幕的第1行,而不是整个文件的第1行,前加 上数字n,则将光标移至第n行的行首
M命令 将光标移至屏幕显示文件的中间行的行首。即如果当前屏幕已经充满,则移动到整个屏幕的中间行
,否则,移动到显示文本的那些行的中间行。
L命令 将光标移至屏幕显示文件的最底行的行首
G命令 在全文的范围内移动光标,此时的光标移动范围不再受屏幕的限制
(9.3) 按字移动-------三组命令
9.3.1 W和w命令
w 和 W 命令将光标右移至下一个字的字首。
这两个命令的区别在于:
w 命令所指的字是指英文单词、标点符号和非字母字符;
W 命令所指的字是指两个空格之间的任何内容。
9.3.2 E和e命令
如果光标起始位置处于字内,则 e 和 E 命令将把光标移到本字字尾;如果光标起始位置处于字尾,
则 e 和 E 命令将把光标移动到下一个字的字尾。
e 和 E 命令的区别在于:
e 命令所指的字是指英文单词、标点符号和非字母字符;
E 命令所指的字是指两个空格之间的任何内容。
9.3.3 B和b命令
如果光标处于所在字内,则 b 和 B 命令将把光标移至本字字首;如果光标处于所在字字首,则 b和
B 命令将把光标移到上一个字的字首。
两个命令的区别在于:
b 命令所指的字是指英文单词、标点符号和非字母字符;
B 命令所指的字是指两个空格之间的任何内容。
(9.4) 按段落移动光标
在vi 编辑器中,一个段落被定义为是以一个空白行开始和结束的片段.按段落移动光标的命令有以下两种。
{命令: 该命令将光标向前移至上一个段落的开头。
}命令: 该命令将光标向后移至下一个段落的开头。
(10)文本移动
1:> 命令
将指定的正文行向右移动,通常是右移 8 个空格。后面跟所要移动的行数,0为移动本行
2:< 命令
将指定的正文行向左移动。其使用方式与命令相同,但是方向相反。
3:>> 命令
将光标所在行右移 8 个空格。如果在>>命令之前给出一个数字 n,
例如 4,则表示光标当前行及其下面的 3 行(共4行)都右移 8 个空格。
4:<< 命令
将光标所在行左移 8 个空格。其使用与>>命令相同,但是移动方向相反。
(11)文本跨行移动
imj 将 i 行的内容移动到 j 行后面
(12)文本跨行移动
ctrl + u 将屏幕向前(文件头方向)翻滚半屏
ctrl + d 将屏幕向后(文件尾方向)翻滚半屏
ctrl + f 将屏幕向文件尾方向翻滚一整屏
ctrl + b 将屏幕向文件首方向翻滚一整屏
可以在滚屏和分页命令之前加上一个数字 n,表示屏幕向前或向后翻滚 n 行,或者屏幕向前或向后移动 n 页。这些设置会被 vi 编辑器记住,下次用户在使用滚屏和分页命令时,还会滚动和上次设置相同的行数或者页数。
(13)字符串检索命令
1: / 命令
从光标处开始向后寻找字符串 error。使用示例:/error
2: ? 命令
从光标处开始向前寻找字符串 error。使用示例:?error
3: n 命令
重复检索上一条检索指令
4:g/ 命令
使光标停止在第一个检索到的 string 串的行首
(14)字符串替换命令
格式:[range]s/s1/s2/ [option]
range 代表替换范围,省略时表示当前行。下面是一些检索范围的例子。
1,10表示从第 1 行到 10 行。
%表示整个文件,同1, $。
. ,$从当前行到文件尾。
s 为替换命令。
s1 要被替换的串,s2 为替换的串。
option 表示选项:
/g表示在全局文件中进行替换。
/c表示在每次替换之前需要用户进行确认。
省略时仅对每行第一个匹配串进行替换。
s1可进行模式匹配命令如下:
\<word,表示以word开头的字符串
(15)窗口切分命令
格式: : split文件名
:表示进入末行模式。split 也可简写为 sp。这时窗口切分为上下两部分,
下半部分对应原来的文件,上半部分对应新打开的文件。
切换窗口:
Ctrl+w,然后 j 移动光标到下面的一个窗口
Ctrl+w,然后 k 移动光标到上面的一个窗口
Ctrl+w,然后 q 关闭当前窗口
Ctrl+w,然后 w 移动光标到另一个窗口
(16)属性设置
1: :set nu 显示行号 :nonu 不显示行号
2: :set hlsearch (nohlsearch) 该命令设定搜寻字符串反白显示(或者不反白显示)。
3: :set autoindent 语法缩进命令,显示程序语法自动缩进。
4: :set backup(nobackup) 文件存储命令,自动储存备份文件(或者不自动备份文件)。
5: :set all 显示选项命令,显示所有的选项。
6: :syntax on (off) 语法高亮命令,实现程序语法高亮显示(或者不高亮显示)。
7: :set ignorecase(noignorecase) 大小写区分命令,忽略大小写(或者区分大小写)。
网友评论