用了vi两年,因为不用vi写代码作开发,只是简单的修改配置文件而已,因此,呵呵,两年了还是一点不熟悉。最近因为公司要求需要学习在linux/unix上开发c/c++,只好努力学一下vi/vim了。
找了一本书,O'Reilly的Learning The VI Editor,chm的电子版本,认真地学了一遍,总结了一下常用命令:
文件操作
vi +n file 打开文件并移动到第n行
vi + file 打开文件并移动到最后一行
vi R file / view file 只读打开文件
:w 保存
:w! 覆盖已存在的文件文件
:w newfile 保存为新文件
:wq 保存并退出
ZZ 保存并退出=:wq
:q 退出
:q! 退出不保存修改
:e! 退回到上一次保存的状态
:1,10w newfile 将第一行到第10行保存为新文件
:.,$w >> file 将当前位置到结尾的内容添加到别的文件
:r file 读取file文件的内容
移动
Numeric + h|j|k|l 执行n次操作
h 向左移动(一个字符)
j 向下移动一行
k 向上移动一行
l 向右移动(一个字符)
e/E 移动到单词的末尾
(/) 移动到当前(一下)句的开始
{/} 移动到当前(一下)段的开始
[[/]] 移动到当前(一下)部分的开始
0 移动到行首
$ 移动到行末
w 向后移动一个文本块
W 向后移动一个文本块(忽略标点)
b 向前移动一个文本块
B 向前移动一个文本块(忽略标点)
^ 移动到当前行的第一个非空白字符
回车/+ 移动到下一行的开头的第一个字符
- 移动到上一行的开头的第一个字符
CTRL-F 下翻一屏
CTRL-B 上翻一屏
CTRL-D 下翻半屏
CTRL-U 下翻半屏
z + 回车 将当前行移到屏幕顶部
z. 将当前行移到屏幕中间
z- 将当前行移到屏幕底部
CTRL-L/CTRL-R 重新刷新屏幕
H 移到屏幕的第一行
nH 移到屏幕的第n行
M 移到屏幕的中间
L 移到屏幕的最后一行
nL 移到屏幕的最后一行前的n行
CTRL-L 显示行信息
G 移动到文件的最后一行
nG 移动到文件的第n行
`` 移动到上一个位置
编辑
i 在当前位置前插入
I 在行首插入
a 在当前位置后添加
A 在行末添加
o 在当前行下方新建一个空行开始插入
O 在当前行上方新建一个空行开始插入
s 删除当前字符然后进入插入状态
S 删除当前行然后进入插入状态
cw 修改当前词语(删除然后进入插入状态)
c2b 删除前面两个词语
c$ 删除本行当前位置后所有的内容
c0 删除本行当前位置前所有的内容
cc 修改当前行(删除然后进入插入状态)
r 替换当前字符(还保持命令状态)
R 连续替换(进入替换状态)
~ 修改当前字符的大小写
J 连接两行
标记
mx 将当前位置标记为x
'x 移动到标记为x的行
`x 移动到标记为x的位置
``/'' 在两次位置间切换
删除
dw 删除一个单词
d2w 删除两个单词
dd 删除当前行
d3d 删除3行
d0 删除当前行中在光标前的所有内容
d$/D 删除当前行中在光标后的所有内容
db 删除前一个单词
x 删除一个字符
3x 删除3个字符
移动
p 粘贴
xp 相当于交换两个字符的位置
yw 复制一个单词
. 重复上一个操作
. 取消上一个操作
搜索
/pattern 从前往后搜
?pattern 从后往前搜
n/N 和上一词搜索方向相同(相反)再搜
fx/Fx 在同一行中查找下(上)一个x字符并移动光标
替换
:s/old/new 替换当前行的第一个匹配
:s/old/new/g 替换当前行的全部匹配
:1,100s/old/new/g 替换1-100行的全部匹配
:1,$s/old/new/g 替换全部匹配=:%s/old/new/g
:g/pattern/s/old/new/g 查找满足pattern条件的行并进行替换
命令组合:
Change Delete Copy from Cursor to ...
cH dH yH top of screen
cL dL yL bottom of screen
c+ d+ y+ next line
c5| d5| y5| column 5 of current line
2c) 2d) 2y) second sentence following
c{ d{ y{ previous paragraph
c/pattern d/pattern y/pattern pattern
cn dn yn next pattern
cG dG yG end of file
c13G d13G y13G line number 13
(这里还是看书里面的原文吧。)