杨超

杨超的博客

他的个人主页  他的博客

My Trilogy of vi I:commands and shortcuts

杨超  2010年08月17日 星期二 22:48 | 1336次浏览 | 0条评论

1.保存和舍弃 2.移动和滚屏 3.标记与跳转 4.模式与编辑 5.搜索与替换 6.编辑多个文件 7.宏 8.执行shell命令

1.保存和舍弃

 :w 保存

:w file 另存为file

:w %.bak 另存为file.bak(假定当前文件名为file,%可指代当前文件名)

:x     存盘退出

:wq 存盘退出

:q  无未保存修改情况下的退出

:q! 舍弃一切修改,强制退出

:e! 舍弃一切修改,将文档恢复到初始状态

2.移动和滚屏

 j 上移

k 下移

h 左移

l  右移

w 以单词为单位右移,光标停在每单词首部 

b  以单词为单位左移,光标停在每单词首部 

W 同w,但是单词以空白字符分界

B  同b,但是单词以东百字符分界

e   以单词为单位右移,光标停在每单词尾部 

ge 以单词为单位左移,光标停在每单词尾部

E   同e,但是单词以空白字符分界

gE 同ge,但是单词以空白字符分界

0   移动到当前行首

^  移动到当前行第一个非空白字符

$   移动到当前行最后一个字符

%  移动到与光标当前括号相匹配的另一个括号

(    移动到句子开始

)    移动到句子结尾

{   移动到段落开始

}   移动看段落结尾

H   移动到屏幕首行第一个非空白字符

M   移动到屏幕中间行第一个非空白字符

L    移动到屏幕末行第一个非空白字符

gg 移动到文件首行第一个非空白字符

G   移动到文件尾行第一个非空白字符

12G 移动到第12行第一个非空白字符

注意:以下x表示任意字符,{a-z}表示任意小写字母

fx  移动到当前行光标右边第一个x

Fx 移动到当前行光标左边第一个x 
tx  移动到当前行光标右边第一个x的前一个字符

Tx 移动到当前行光标左边第一个x的前一个字符
;   重复上一次f、F、t、T,方向与上次相同

,   重复上一次f、F、t、T,方向与上次相反


CTRL+u 向下滚半屏

CTRL+d 向上滚半屏
CTRL+f  向下滚半屏

CTRL+b 向上滚半屏

zt   以当前行作为屏幕首行滚屏

zz  以当前行作为屏幕中间行滚屏

zb  以当前行作为屏幕末行滚屏

3.标记与跳转

m{a-z} 标记光标所在处
'{a-z}   跳到指定标记处行首第一个非空白字符
`{a-z}  精确跳到标记处

CTRL+](注意这是右中括号) 跳到帮助tag

``跳回到刚才的跳转出发点

`[ 跳回上次修改的起始处

`] 跳回上次修改的结尾处

CTRL+o  跳回上一次的跳转点

CTRL+i   跳到下一次的跳转点

:jumps   列出所有的跳转点
:marks   列出所有的标记

[ [   移动到前一个行首的'{'字符上

] ]   移动到下一个行首的'{'字符上
[ ]   移动到前一个行首的'}'字符上
] [   移动到下一个行首的'}'字符上
{    到前一个空行上
}    到下一个空行上
gd  到当前局部变量的定义处(当前的意思是光标停留其上的单词).

4.模式与编辑

 注:文本对象

iw  一个单词(含其后空格)

aw 一个单词(不含其后空格)

as  一个句子(含其后空格)

is   一个句子(不含其后空格)

J 将当前行的末尾和下一行连接起来

i 在当前光标处开始插入字符

I 在当前行第一个非空白字符处插入字符

a 在当前光标处之后开始插入字符

A 在当前行最后一个字符后插入字符

c 后接相关信息以改写内容

C 改写光标处到行尾的内容

以上均会进入insert模式

R 进入replace模式

d 后接相关信息以删除内容

D 删除光标处到行尾的内容

y 后接相关信息以复制内容

Y 复制光标处到行尾的内容

r  后接相关信息改写一个字符

x 删除光标处字符

. 重复上一次修改

v 进入visual模式

CTRL+v 进入选择矩形文本块的visual模式

visual模式下的o  光标移动到文本块的对角

visual模式下的O 光标平移到文本块光标当前行的另一个角

~ 对选定文本进行大小写反转

"{a,b,c,d...x,y,z}y  将选定文本复制到指定寄存器中
"{a,b,c,d...x,y,z}p  将寄存器中内容粘贴出来

5.搜索与替换

*  向下搜索光标所在处单词 

#  向上搜索光标所在处单词

/file  向下搜索file

?file 向上搜索file

n 搜索相同方向的下一个

N 搜索相同方向的上一个

:[range]s/from/to[/flag]

6.编辑多个文件

 vi -d file1 file2 以diff模式打开file1和file2

:split   水平分割

:vsplit 垂直分割

vi file1 file2 file3 打开多个文件

:n或:bn 切换到同时打开的下一个文件

:bp 切换到同时打开的上一个文件

:b2 切换到同时打开的第二个文件,后面的数字可视情况自定

7.宏

 记录宏
q{a,b,c,d...x,y,z}
...
...
...
q

引用宏

@{a,b,c,d...x,y,z} 引用指定宏 

@@                       引用上一条宏

编辑宏

G
o<Esc>
"np 将寄存器的内容置于该行
{edits} 此处指的是文本化编辑宏中记录的命令
0
"ny$ 最后两个字母是命令,指的是将刚才编辑的一行替换到n中,也可以用别的
dd

q{A,B,C,D...X,Y,Z} 追加命令到寄存器中
...
q

gCTRL+g 统计字数

CTRL+g 查看当前文件信息 

8.执行shell命令

:!command  派生一个shell执行command,执行完后返回vi

!!command  将当前行作为命令command的输入,用输出替换当前行文本(等同于:.!command,手动输入:.,$!command则是代表对当前行到最后一行执行命令command)

:sh              进入shell环境,执行exit则返回vi

评论

我的评论:

发表评论

请 登录 后发表评论。还没有在Zeuux哲思注册吗?现在 注册 !

暂时没有评论

Zeuux © 2024

京ICP备05028076号