[Linux]自己整理的vi命令
这几天开始学vi的使用,以前用的是Gedit,但是命令行下面是不能够使用Gedit的。命令行下的文本编辑工具,最最常用的是vi和vim了。
我自己整理了一下vi的常用命令,并且在自己的系统上做了测试,环境Ubuntu10.04,vi的版本倒是没去注意,不知道哪个版本的。
在Linux发行版中,vi是几乎都会有的,而vim不一定会有。所以这里整理的命令是vi的而不是vim的。
-----进入vi的命令-----
vi filename : 打开或新建文件,并将光标置于第一行首
vi +n filename : 打开文件,并将光标置于第n行首
vi + filename : 打开文件,并将光标置于最后一行首
vi +/pattern filename : 打开文件,并将光标置于第一个与pattern匹配的串处
vi -r filename : 在上次正用vi编辑时发生系统崩溃,恢复filename
vi filename....filename : 打开多个文件,依次进行编辑
-----模式介绍-----
vi分为三种模式,分别是一般模式,编辑模式和指令模式。下面介绍各个模式的功能:
一般模式(默认打开的模式):
移动光标(hjkl),复制(yy),粘贴(p),删除字符(x),删除整行(d),搜索/替换
编辑模式:
以插入或替换来编辑文件内容(aior进入编辑模式,Esc键退出)
指令模式:
读取/保存文件,其它命令(:/?进入指令模式)
-----移动光标类命令-----
h或Backspace或← : 光标左移一个字符
l或Space或→ : 光标右移一个字符
k或Ctrl+p或↑ : 光标上移一行
j或Enter或Ctrl+n或↓ : 光标下移一行
+ : 光标移动到非空格符的下一行
- : 光标移动到非空格符的上一行
以上6条命令,前面加n(n是数字),可实现移动n行
H : 光标移至屏幕顶行
M : 光标移至屏幕中间行
L : 光标移至屏幕最后行
gg : 光标移至第一行行首
G : 光标移至最后一行行首
0 : 光标移至当前行首(注意是数字零)
$ : 光标移至当前行尾
nG : 光标移至第n行首
n$ : 光标移至第n行尾
) : 光标移至句尾
( : 光标移至句首
} : 光标移至段落开头
{ : 光标移至段落结尾
w或W : 光标移至下一个单词首(单词,我的理解是指几个连续的字母,如“Hello World”是两个单词)
b或B : 光标移至上一个单词首
e或E : 光标移至下一个单词尾
-----屏幕翻滚类命令-----
Ctrl+u : 向文件首翻半屏
Ctrl+d : 向文件尾翻半屏
Ctrl+f : 向文件尾翻一屏
Ctrl+b : 向文件首翻一屏
zz : 当前行滚动至屏幕中部
nz : 将第n行滚至屏幕顶部,不指定n时将当前行滚至屏幕顶部。(这条命令我没有测试成功,但网上很多关于vi的文章都讲了这条命令,所以也写在这里)
-----插入文本类命令-----
a : 在光标后插入,进入编辑模式
A : 在当前行尾插入,进入编辑模式
i : 在光标前插入,进入编辑模式
I : 在当前行首插入,进入编辑模式
o : 在当前行之下新开一行插入,进入编辑模式
O : 在当前行之上新开一行插入,进入编辑模式
r : 替换当前字符
R : 替换当前字符及其后的字符,直至按ESC键
s : 从当前光标位置处开始,以输入的文本替代指定数目的字符
S : 删除指定数目的行,并以所输入文本代替之
ncw或nCW : 修改指定数目的字
nCC : 修改指定数目的行
-----删除命令-----
x : 删除光标后一个字符,前面加n(n是数字),可实现向后删除n个字符
X : 删除光标前一个字符,前面加n(n是数字),可实现向前删除n个字符
dd : 删除光标所在行,前面加n(n是数字),可实现向下删除n行
dnG : 删除第n行到光标所在行
dG : 删除光标所在行到最后一行
d0 : 从行首删至光标所在处的字符(注意是数字零)
d$或D : 从光标所在处删至行尾的字符
ndw或ndW : 删除光标处开始及其后的n-1个字
Ctrl+u : 输入方式下删除所输入的文本
-----搜索及替换命令-----
/pattern : 从光标开始处向文件尾搜索pattern
?pattern : 从光标开始处向文件首搜索pattern
n : 在同一方向重复上一次搜索命令
N : 在反方向上重复上一次搜索命令
:s/p1/p2/g: 将当前行中所有p1均用p2替代(命令模式中g代表的是全局,在g后面加上c会在替换前会询问是否需要替换)
:n1,n2s/p1/p2/g: 将第n1至n2行中所有p1均用p2替代
:g/p1/s//p2/g: 将文件中所有p1均用p2替换
-----复制与粘贴命令-----
yy : 复制光标所在行,前面加n(n是数字),可实现向下复制n行
ynG : 复制第n行到光标所在行
yG : 复制光标所在行到最后一行
y0 : 复制行首到光标所在字符
y$ : 复制光标所在字符到行尾
yw : 复制光标所在单词
p : 在光标的下一行粘贴
P : 在光标的上一行粘贴
-----一般模式其它命令-----
J : 将光标所在行与下一行合成同一行
c : 重复删除多个数据(如向下删除10行 : 10nj)
u : 撤销
Ctrl+r : 还原
. : 重复前一个操作(删除,粘贴,撤销,还原)
-----文件保存及退出命令-----
:q : 退出(加!表示强制)
:w : 保存(加!表示强制)
:w filename : 保存为文件
:x或ZZ : 等同与:wq
:e filename : 创建新文件
:n filename : 加载新文件
-----:set命令-----
number/nu : 显示行号
nonumber/nonu : 隐藏行号
autoindent/ai : 自动缩进
noautoindent/noai : 取消自动缩进
tabstop/ts=n : 将一个tab键宽度设为n
all : 显示所有环境参数
-----指令模式其它命令-----
: n1,n2 co n3 : 将n1行到n2行之间的内容拷贝到第n3行下
: n1,n2 m n3 : 将n1行到n2行之间的内容移至到第n3行下
: n1,n2 d : 将n1行到n2行之间的内容删除
: !command : 执行shell命令command
: n1,n2 w!command : 将文件中n1行至n2行的内容作为command的输入并执行之,若不指定n
: 1,$,w!command : 则表示将整个文件内容作为command的输入
: r!command : 将命令command的输出结果放到当前行
-----多文件编辑功能-----
:args : 显示编辑名单中的各个文件名
:n : 读入编辑名单中的下一个文件
:e#或:N : 读入编辑名单内的前一个文件
:rew : 读入编辑名单中的第一个文件
:e file : 读入另一个文件进vi(此文件可不在编辑名单内)
:sp file : 读入另外一个文件的路径及文件名,水平分屏显示
:vsp file : 读入另外一个文件的路径及文件名,垂直分屏显示(这条命令我使用的时候提示当前版本不支持,说不定新版本支持,也就写在这里了)
Ctrl加两次按w : 在分屏中切换
ctrl+w再按方向键 : 在分屏中切换
ctrl+w再按+ : 分屏增加高度
ctrl+w再按- : 分屏减少高度
ctrl+w再按= : 让所有的屏都有一样的高度