[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再按= : 让所有的屏都有一样的高度

posted @ 2012-08-29 11:53  喵星人の耳朵  阅读(303)  评论(0编辑  收藏  举报