vi常用命令

来源:岁月联盟 编辑:exp 时间:2011-09-07

==================
vi command
==================
vi a.txt 用vi编辑器编辑a.txt,如果不存在则建立空文件,默认是一般模式;
---
a(光标后) i(光标前) r(替换光标字符) o(下一行) A(行尾) I(行首) R(同r) O(上一行) 都可从 一般模式 进入 编辑模式

---
Esc 可以从 编辑模式 进入 一般模式
---
: 从 一般模式 进入 命令模式,输入取消、保存等指令
---
/ 从 一般模式 进入 命令模式,可以进行搜索;
---
wq 命令默认下,保持文件,并退出;
q 命令默认下,退出;
q! 命令默认下,取消对文件的修改,并退出;
---

=========
一般模式
=========
h 或 左箭头 左
j 或 下箭头 下
k 或 上箭头 上
l 或 右箭头 右

---
ctrl+f 向前翻页
ctrl+b 向后翻页
ctrl+d 向前翻半页
ctrl+u 向后翻半页
---
0 或 home 移动到该行第一个字符
$ 或 end 移动到该行最后一个字符
n<space> 向右移动n个字符
---
G 移动到最后一行
[i] gg 移动到第 i 行,省略 i 则移动到第1行,
n<Enter> 向下移动n行
---
={motion} apply motion to specify lines, the default motion is indenting,
e.g.
gg=G apply indenting to whole file,
---
w 后1个单词 词首
e 后1个单词 词尾,(当前如果在单词中,且不是词尾,则到当前单词的词尾,)
b 前1个单词 词首
---
/word 向下搜索 word
?word 向上搜索 word
---
x 向后删除1个
3x 向后删除3个
X 向前删除1个
4X 向前删除4个
---
dd 删除/剪切 整行
3dd 删除/剪切 包括当前行向下的3行

dw 删除/剪切 单词
3dw 删除/剪切 当前向右的3个单词

d光标移动 删除/剪切 光标移动的 字符 或 行,输入d 然后移动光标,如果光标向左则删除左边的1个字符,向右则删除当前字符(相当于 x),向上则删除当前行和上一行,向下则删除当前行和下一行,跳转行则删除2行之间(包括2行)的所有行,

---
yy 复制所在行
3yy 包括当前行复制向下3行

yw 复制 光标之后的第1个单词,光标当前所在单词仅复制光标及其后的部分(而不是整个单词),光标后的第1个空白符也被复制(如果存在),
3yw 复制 光标之后的3个单词,
---
p 粘贴在当前行下
P 粘贴在当前行上
---
u undo
ctrl + r redo
---
:i 跳转到第 i 行
---
ctrl + shift + >> shift right current line
2 ctrl + shift + >> shift right 2 line
ctrl + shift + << shift left current line
2 ctrl + shift + << shift left 2 line

=========
一般模式 ---> 编辑模式
=========
i 在当前光标前插入字符
I 在当前行首前插入字符
---
a 在当前光标后插入字符
A 在当前行尾插入字符
---
o 在当前行 下 新开一行,插入字符
O 在当前行 上 新开一行,插入字符
---
r,R 准备替换当前字符,替换后仍回到一般模式

=========
编辑模式 ---> 一般模式
=========
Esc 退出编辑模式,进入一般模式
---

=========
一般模式 ---> 命令行模式
=========
: 进入命令行模式
---

=========
命令行模式
=========
w 保存
w! 强制保存,即使是只读文件,只要用户的权限够,就可以保存
q 退出vi,如果文件已经改变且尚未保存则报错;
q! 取消修改,并退出vi
wq 保存并退出
wq! 强制保存并退出
---
w b.txt 当前文档另存为b.txt
---
r c.txt 将c.txt的内容加入到 当前文档中 光标处,
---
set nu 显示行号
set nonu 取消行号
---
set ai 自动缩进
set noai 不自动缩进
---
set list 显示 tab 和 行尾 字符, tab 用 ^I 表示,行尾用 $ 表示,
set nolist 不显示 tab 和 行尾 字符,
---
set tablestop=x 设置 tab 的大小,
---
set all 查看 当前设置
---
help [command] 显示帮助,用 :q 退出帮助

---
n 切换到下个文件
e# 切换到上个文件
---
[a,b|% ]s/xx/yy[/gic]
将 xx 替换为 yy,
a b 分别指定 起始 和 结尾 行号,如果未指定则默认对当前行起作用, . 表示当前行, $ 表示末行, % 表示所有行
g 表示替换所有的匹配,如果 未指定 g 则仅替换每行中的第1个匹配,
i 表示忽略大小写,如果 未指定 i 则大小写敏感,
c 表示是否对每次替换进行确认,如果指定 c,则每个匹配的替换要确认,输入 y 或 n 确认,
支持通配符,特殊字符要用 / 转义,如 /. ,

例子:
s/xx/yy 将当前行中 第1个 xx 替换为 yy
10,$ s/xx/yy 从第10行 到末尾,将每行中 第1个 xx 替换为 yy
% s/xx/yy/g 所有行中 所有的 xx 替换为 yy
% s//./y/g 所有行中 所有的 . 替换为 y
% s// /+// /g 替换所有的连续空格为1个空格,
% s/tesT/abcdef/gi 替换所有 test(不区分大小写),
% s/test/abcdef/gc 替换所有 test,每次替换都要求确认,

=========
一般模式 ---> 搜索模式
=========
/ 向下搜索
? 向上搜索
n 下一处
shift+n 上一处

---

作者“java-2007”