Linux命令学习三:vi
????vi命令是Linux环境下一个强大的文本编辑器,素有“编辑器之神”之称。可见,掌握好vi命令的使用,可以让用户在linux下的工作效率有极大的提升。下面整理了一些vi命令的常用方法。
启动vi
vi [文件路径]文件名
????可以通过上面的命令启动vi,并且打开指定的文件进行查看、编辑。其中[文件路径]
是可选参数。如果省略了前面的文件路径,则vi会在当前目录下查到指定的文件。
????跟touch命令一样,如果文件不存在,vi还会自动创建文件。当然创建文件的前提还是要有相关的操作权限。
vi命令的三种模式
????vi命令的三种模式,分别是:一般模式,编辑模式,命令模式(底行模式)。
一般模式
????一般模式是vi的默认模式,启动vi后,默认会进入到一般模式。在这个模式下可以进行复制、剪切、粘贴、删除等操作。
移动光标
????移动光标有几种方式,大概可以归类为以下几种方式。
以字符为单位移动光标
????正如在windows操作系统下的上、下、左、右四个按键,vi命令也是可以使用这四个按键操作光标进行上、下、左、右的移动。同时vi还有其他四个按键也拥有同样的功能。
按键 | 功能说明 |
---|---|
h | 使光标向左移动一个字符 |
j | 使光标向下移动一个字符 |
k | 使光标向上移动一个字符 |
l | 使光标向右移动一个字符 |
以单词为单位移动光标
????vi会以空格或者其他一些符号为分隔符,使用这些快捷键,可以让光标快速定位到单词的开头或者结尾。
按键 | 功能说明 |
---|---|
w | 快速将光标移动到下一个单词的第一个字母 再按一次该按键光标会跳到下一个单词的第一个字母 |
e | 快速将光标移动到光标所在位置的单词的最后一个字母 再按一次该按键光标会跳到下一个单词的最后一个字母 |
b | 快速将光标移动到光标当前所在位置的单词的第一个字母 再按一次该按键光标会跳到上一个单词的第一个字母 |
以行为单位移动光标
????以行为单位,让光标在整个文档随意上下跳转
按键 | 功能说明 |
---|---|
^ | 英文输入法状态下,按住键盘的shift + 数字键6 跟正则表达式的功能一样,该按键会将光标快速定位到光标所在行的行首 |
$ | 英文输入法状态下,按住键盘的shift + 数字键4 跟正则表达式的功能一样,该按钮会将光标快速定位到光标所在行的行尾 |
[n]G | n为阿拉伯数字,表示的是行号,G则一定是大写状态下的G键。 如:15G,光标会快速跳转到文档的第15行 |
CTRL + g | ctrl 键 + 小写字母g 该功能是显示光标当前所在的位置,处于文档的第几行第几列 |
以页为单位移动光标
????其实这里理解为翻页可能会更好一些,但是为了方便记忆,暂且先归为按页跳转
按键 | 功能说明 |
---|---|
CTRL + d: | 向下滚动半页,助记(d:down) |
CTRL + u: | 向上滚动半页,助记(u:up) |
CTRL + f : | 向下滚动一页,助记(f:front) |
CTRL + b: | 向上滚动一页,助记(b:back) |
以文档为单位移动光标
????直接就是跳到文档的开头和结尾了
按键 | 功能说明 |
---|---|
gg | 小写字母状态下连续按两次g键 光标会马上跳转到文档的首行 |
G | 大写字母状态下按G键 光标会马上跳到文档的最后一行 |
复制功能:y
????复制功能的关键按钮是 "y"键,再结合上面移动光标的功能,构造出来的结合键,就是一些功能强大的复制功能。
以单词为单位进行复制
????使用”y“键,再跟”以单词为单位移动光标“,构造出来的组合键,就是跟单词相关的复制功能。
按键 | 功能说明 |
---|---|
yw | 复制光标所在位置,直到下一个单词开头的内容 |
ye | 复制光标所在位置,直到当前单词结尾(或者下一个单词结尾)的内容 |
yb | 复制光标所在位置,直到当前单词开头(或者前一个单词开头)的内容 |
以行为单位进行复制
????使用”y“键,再跟”以行为单位移动光标“,构造出来的组合键,就是跟单词相关的复制功能。
按键 | 功能说明 |
---|---|
y^ | 先按下y键,输入 ^ 将光标跳转到行首 该组合键会复制光标当前所在位置,直到本行最开头的内容 |
y$ | 先按下y键,输入 $将光标跳转到行尾 该组合键会复制光标当前所在位置,直到本行最后面的内容 |
[n]yy | n为可选参数,可以是任意阿拉伯数字,意思是要复制多少行,只输入yy则会复制一行 如:3yy,则代表复制光标当前所在行,连同往下数的2行进行复制 |
剪切(删除)功能:d
????剪切功能的关键按键是”d“键,再结合上面移动光标的功能,构造出来的结合键,就是一些功能强大的剪切功能。
????提醒一下,剪切功能就是把原来的内容”装“到剪切板,然后将原来的内容”删除“。剪切后不粘贴,那么剪切功能也可以当作是删除功能来使用的。
以单词为单位进行剪切(删除)
????使用”d“键,再跟”以单词为单位移动光标“,构造出来的组合键,就是跟单词相关的复制功能。
按键 | 功能说明 |
---|---|
dw | 剪切光标所在位置,直到下一个单词开头的内容 |
de | 剪切光标所在位置,直到当前单词结尾(或者下一个单词结尾)的内容 |
db | 剪切光标所在位置,直到当前单词开头(或者前一个单词开头)的内容 |
以行为单位进行剪切(删除)
????使用”d“键,再跟”以行为单位移动光标“,构造出来的组合键,就是跟单词相关的复制功能。
按键 | 功能说明 |
---|---|
d^ | 先按下d键,输入 ^ 将光标跳转到行首 该组合键会剪切(删除)光标当前所在位置,直到本行最开头的内容 |
d$ | 先按下d键,输入 $将光标跳转到行尾 该组合键会剪切(删除)光标当前所在位置,直到本行最后面的内容 |
[n]dd | n为可选参数,可以是任意阿拉伯数字,意思是要复制多少行,只输入dd则会剪切(删除)一行 如:6dd,则代表复制光标当前所在行,连同往下数的5行进行剪切(删除) |
粘贴功能:p
????粘贴功能就是小写字母”p“键,和大写字母”P“键,但是如果复制、剪切的内容不一样,实现起来也会有点不一样。
以单词为单位粘贴
按键 | 功能说明 |
---|---|
p | 小写字母p 光标当前所在位置之后,粘贴出前复制、剪切的内容 |
P | 大写字母P 光标当前所在位置之前,粘贴出前复制、剪切的内容 |
以行为单位粘贴
按键 | 功能说明 |
---|---|
p | 小写字母p 光标当前所在行的内容不动,在光标所以行的下一行开始插入复制的内容 |
P | 大写字母P 光标当前所在行的内容会往下移,跟在粘贴出来的内容后面 |
删除补充:x
????删除功能还有小写字母”x“键,还有大写字母”X“键。除以上面写到的按行进行删除外,vi也有类似于windows记事本的按字符删除的功能,跟退格键、Del键一样的功能。
按键 | 功能说明 |
---|---|
[n]x | 小写字母x n为可选参数,若忽略参数n,则x键的功能就是windows记事本软件下的退格键 如:6x, 直接删除光标所在位置及后面5个字符 |
[n]X | 大写字母x n为可选参数,若忽略参数n,则X键的功能就是windows记事本软件下的Del键 如:8X,直接删除光标所在位置及前面7个字符 |
重写功能:r
????重写功能的关键按钮是 小写字母"r"键和大写字母”R“键。重写功能就是将原来的内容覆盖了,用新的内容代替了原来的内容。
按键 | 功能说明 |
---|---|
r | 小写字母r 先按下r键,再输入新内容,则新内容只会将光标当前所在位置的内容替换 |
R | 大写字母R 跟windows系统下的Word文档下,按下Ins(insert)键一样。 只要不断地输入内容,光标所在位置及后面已有的内容都会被替换,需要按Esc键主动退出 |
撤回功能:u
????撤回功能只有一个按键,通过小写字母”u“按钮,可以撤回前面对文档的修改。
编辑模式
????进入编辑模式后,vi的操作就跟平常在windows系统下使用记事本工具差不多了。从一般模式进入编辑模式,有以下几个按键可以选择,不同的按钮,也有不同的效果
按键 | 功能说明 |
---|---|
a | 小写字母a 在光标所在位置后面进行编辑 |
i | 小写字母i 在光标当前所在位置进行编辑 |
o | 小写字母o 光标所在行的下面插入空白行,同时光标移动到新插入的空白行 |
A | 大写字母A 光标移动到当前所在行的最后面进行编辑 |
I | 大写字母I 光标移动到光前所在行的最前面进行编辑 |
O | 大写字母O 在光标所在行插入新的空白行,光标停留在新行,光标所以行的内容所部住下移动 |
命令模式(底行模式)
????命令模式下可以进行保存、退出、查找 、替换等工作。
保存、退出
按键 | 功能说明 |
---|---|
:w | 保存对文档的修改但不退出 |
:wq | 保存对文档的修改修改并退出 |
:q! | 放充对文档的修改并强行退出 |
查找
按键 | 功能说明 |
---|---|
/ | 从光标所在位置,向下查找,查找到第一个匹配的内容即停止 可以通过按键”n“继续向下查找,或者通过按钮”N“向上进行反向查找 |
? | 从光标所在位置,向上查找,查找到第一个匹配的内容即停止 可以通过按键”n“继续向上查找,或者通过按钮”N“向下进行反向查找 |
替换
按键 | 功能说明 |
---|---|
s/old_string/new_string | 将光标所在行第一次匹配到的字符串old_string,替换为新的字符串new_string |
s/old_string/new_string/g | 将光标所在行所有匹配到的字符串old_string,替换为新的字符串new_string |
%s/old_string/new_string | 将整个文档所有行第一次匹配到的字符串old_string,替换为新的字符串new_string |
%s/old_string/new_string/g | 将整个文档所有能匹配到的字符串old_string,替换为新的字符串new_string |
其他功能
按键 | 功能说明 |
---|---|
:set nu | 显示行号 |
:set nonu | 取消显示行号 |
:n | 快速跳转到文档的第n行 |
三种模式之前相互切换
命令模式无法直接进入到编辑模式,同样编辑模式也无法直接进入到命令模式。编辑模式,或者命令模式,通过ESC键可以切换到一般模式,然后再通过输入对应的命令进入到编辑模式或者命令模式。