Vi编辑器
Linux vi 命令也就是指 vi 编辑器,它们是一个意思。vi 编辑器是 Linux/UNIX 环境下经典的编辑器。Linux vi 命令非常强大,熟练地使用它可以高效的编辑代码,配置系统文件等,是程序员和运维人员必须掌握的技能。
声明:本文章由 http://c.biancheng.net/vi/ 经过本人简化编辑补充而来,简化了描述,删减了部分对于运维不常用的命令重新排版,方便学习以及速查
目录
- vi的三种模式、以及其他说明
- vi编辑器的进入
- vi编辑器修改命令
- vi编辑器删除命令
- vi编辑器复制命令
- vi编辑器撤销命令
- vi编辑器重复命令
- vi编辑器退出命令
- vi编辑器替换命令
- vi编辑器按字光标移动命令
- vi编辑器文本移动命令
- vi编辑器检索命令
- vi编辑器替换命令
- vi编辑器窗口切分命令
- vi编辑器属性设置
- vi编辑器寄存器
1.VI的三种模式、以及其他说明
1. 命令模式
该模式是进入 vi 编辑器后的默认模式。任何时候,不管用户处于何种模式,按下Esc键即可进入末行模式。
在末行模式下,用户可以输入 vi 命令,用于管理自己的文档。此时从键盘上输入的任何字符都被当做编辑命令来解释。若输入的字符是合法的 vi 命令,则 vi 在接受用户命令之后完成相应的动作。
2. 文本输入模式
在末行模式下输入插入命令i
、附加命令a
、打开命令o
、修改命令c
、取代命令r
或替换命令s
都可以进入文本输入模式。
在该模式下,用户输入的任何字符都被 vi 当做文件内容保存起来,并将其显示在屏幕上。在文本输入过程中,若想回到末行模式下,按下Esc键即可。
3. 末行模式(ex转义模式)
在末行模式下,用户按:
键即可进入末行模式,此时 vi 会在显示窗口的最后一行(通常也是屏幕的最后一行)显示一个:
作为末行模式的说明符,等待用户输入命令。多数文件管理命令都是在此模式下执行的(如把编辑缓冲区的内容写到文件中等)。
I
~
~
~
~
~
~
~
~
~
~
~
~
"test.c" [New File]
I表示光标
进入 vi 之后,首先进入的就是末行模式,也就是说等待命令输入而不是文本输入。这时输入的字母都将作为命令来解释。
光标表示 vi 编辑器的当前编辑位置停留在屏幕第 1 行首位上。其余各行行首均有一个~符号,表示该行为空行。
命令执行完后,vi 自动回到末行模式。
4. 光标移动
h | j | k | l |
---|---|---|---|
← | ↓ | ↑ | → |
5. 行移动
H | M | L | nG |
---|---|---|---|
当前屏幕第一行 | 当前屏幕中间行 | 挡片屏幕最后一样 | 移动至全文第n行 |
6. 行移动
ctrl+u | ctrl+d | ctrl+f/PgUp | ctrl+b/PgDn |
---|---|---|---|
向上翻滚半屏 | 向下翻滚半屏 | 向上翻滚整屏 | 向下翻滚整屏 |
7.文首文尾移动
gg
移动到文件最开头
G
移动到文件最末尾
2.vi编辑器的进入
创建或者进入文件
$ vi filename
示例
$ vi tmp.sh
进入文件时跳转到指定行(调试shell脚本时常用)
$ vi +[行号] filename
示例
$ vi +5 tmp.sh
$ vi + tmp.sh //把数字去掉为最末行
匹配进入
$ vi +/[匹配内容] filename
示例
$ vi +/main tmp.sh //与直接在末行模式执行 '/' 相似
3. vi编辑器修改命令
插入命令[命令模式]->[文本输入模式]
末行模式下输入i
I
此时 vi 处于文本插入状态,屏幕最下行显示 “--INSERT--”
说明信息。
i
插入到光标所在位置前
I
在行首插入
追加命令[命令模式]->[文本输入模式]
末行模式下输入a
A
此时 vi 处于文本插入状态,屏幕最下行显示 “--INSERT--”
说明信息。
a
插入到光标所在位置后
A
行尾追加
插入空行(常用)[命令模式]->[文本输入模式]
末行模式下输入o
O
此时 vi 处于文本插入状态,屏幕最下行显示 “--INSERT--”
说明信息。
o
所在行下面插入一个空行。
O
所在行上面插入一个空行。
删除当前行后插入(常用)[命令模式]
cc
删除当前单词后插入[命令模式]
cw
以单词为界限(常用)
cW
以空格为界限
4. vi编辑器删除命令
单个字符删除[命令模式]
x
不进入文本输入模式删除后面一个字符。
X
不进入文本输入模式删除前面一个字符。
删除当前行(常用)[命令模式]
dd
删除行首到光标位置字符[命令模式]
d0
删除一个单词[命令模式]
dw
以单词为界限。
dW
以空格为界限。
5. vi编辑器修改命令
复制都可以用p
粘贴(常用)
复制行[命令模式]
yy
复制光标所在的整行。在 yy 前可加一个数字,表示复制往下n行(常用)。
yw
以单词为界限复制,可加n。
yW
以空格为界限复制,可加n。
文本选择命令[命令模式]
v
块选择模式
V
行选择模式
6. vi编辑器撤销命令
撤销[命令模式]
u
该命令撤销上一次所做的操作(常用)。
U
该命令会一次性撤销自上次移动到当前行以来做过的所有操作,再使用一次 U 命令则撤销之前的 U 命令所做的操作,恢复被撤销的内容。
7. vi编辑器重复命令
重复命令只能在末行模式下工作,在该模式下按下.
键即可。
8. vi编辑器退出命令(常用)
退出[末行模式]
:q
没有做修改情况下退出
强制退出[末行模式]
:q!
不保存强制退出
保存[末行模式]
:w
保存不退出
:w filename
另存为
:w! filename
不询问强制另存为
保存且退出[末行模式]
:wq
保存退出
:wq!
强制保存退出
:x
如果修改过则保存退出,如果未修改过则直接退出
9. vi编辑器替换命令
替换[命令模式] (常用)
r
替换当前字符
nr
替换往后n个字符
替换模式[命令模式]
R
进入替换模式,每个输入的字符都会替换当前光标下的字符,ESC结束
10. vi编辑器按字光标移动命令
按单词移动[命令模式]
w
移动到下个一个单词首
W
移动到下个一个单词首,以空格为分隔
e
移动到本个、下个单词尾
E
移动到本个、下个单词尾,以空格为分隔
b
移动到本个、上个单词首
B
移动到本个、上个单词首,以空格为分隔
行首行尾[命令模式]
$
光标移动至行尾
^
光标移动至行首
Home
光标移动至行尾
End
光标移动至行首
11. vi编辑器文本移动命令
向后移动[命令模式]
>n
当前光标后n行向右移动8个空格,回车确定
<n
当前光标后n行向左移动8个空格,回车确定
n>>
当前光标后n行向右移动8个空格
n<<
当前光标后n行向左移动8个空格
跨行移动[末行模式]
imj
把第 i 行移至第 j 行的下方
合并两行[命令模式]
J
合并本行和下一行
12. vi编辑器检索命令
查找字符串[末行模式] (常用)(可匹配正则)
/string
向下查找
?string
向上查找
当前行内查找字符串[命令模式]
f
f后加字符,向后查找
F
F后加字符,向前查找
重复[末行模式]
n
重复上条查找命令
N
重复上条查找命令,方向相反
13. vi编辑器替换命令
替换[末行模式] (常用)(可匹配正则)
[range]s/s1/s2/ [option]
[range]
表示检索范围,省略时表示当前行。下面是一些检索范围的例子。
1,10
表示从第 1 行到 10 行。%
表示整个文件,同1,$
。.,$
从当前行到文件尾。- s 为替换命令。
- s1 要被替换的串,s2 为替换的串。
- option 表示选项:
- c表示在每次替换之前需要用户进行确认。
14. vi编辑器窗口切分
窗口切分(末行模式)
:split
:sp
窗口切分
:split filename
:sp fielname
窗口切分打开新文件
Ctrl+w,然后 j | Ctrl+w,然后k | Ctrl+w,然后 q | Ctrl+w,然后 j |
---|---|---|---|
移动光标到下面的一个窗口 | 移动光标到上面的一个窗口 | 关闭当前窗口 | 移动光标到另一个窗口 |
15. vi编辑器属性设置
末行模式下执行
:set
查看当前编辑器环境变量
:set all
查看当前编辑器全部环境变量
:set tabstop=n
设置制表停止位(tabstop)的长度(常用)
:set fileencoding
查看当前文件编码格式
vi filename -c “e ++enc=GB2312” 通过指定字符集进入
:set fileformat
查看文件格式
:set ff=unix
将文件格式转为unix格式(常用)
:set ff=dos
将文件格式转为dos格式
:set list
显示不可视字符(常用)
:set nolist
不显示不可视字符(常用)
:set nu
显示行号(常用)
:set nonu
隐藏行号(常用)
:set ignorecase
开启忽略大小写
:set noignorecase
关闭忽略大小写
:set wrap
自动换行
:set nowrap
不自动换行
16. vi编辑器寄存器
:reg
:registers
查看寄存器内容
无名寄存器
vi有默认的无名寄存器,任何被命令删除或者复制的内容都会放到无名寄存器中
寄存器标识为0-9
0一直为最新内容
1-9为历史内容
有名寄存器
可以通过
"ad
剪切
"ay
复制
"ap
粘贴