一般情况来说:
0代表行首,$代表行末
$,G代表最后一行
光标移动
0 移动到本行最前面
$ 移动到本行最后
G 移动文件最后一行
nG 移动到文件第n行
gg 移动到文件第一行
n【space】移动这一行的第n个字符
n【enter】移动n行
H屏幕第一行
M屏幕中间一行
L屏幕最后一行
查找和替换
/word 查找word
?word 查找word,不过是向上查找
n 向下重复上一个查找
N 向上重复下一个查找
:n1,n2s/word1/word2/g 替换
:1,$s/word1/word2/g 第一行到最后一行的替换
因此多行注释的方法就是:
:n1,n2s/^/#/g
删除多行注释的方法就是
:n1,n2s/#//g(还是:n1,n2s/^#//g)
删除,复制和粘贴
dd 删除当前行
ndd删除当前行之后所有n行
dG删除当前行到最后一行
d1G删除当前行到第一行
d0删除光标值第一个字符
d$ 删除光标至当前行最后一个字符
yy 复制当前行
nyy复制当前行之下的n行
y1G复制当前行至第一行
yG 复制当前行之最后一行
y0 复制当前字符至本行首个字符
y$ 复制当前字符至本行最后一个字符
p 将复制内容粘贴至当前行的下一行
重复、撤销等操作
j 将光标所在行和下一行数据合并
. 重复上一个操作
u 撤销上一个操作
【ctrl】+r 重复上一个操作
其他命令行操作
:wq! 强制保存退出
:w【filename】 相当于另存为
:r[filename] 将filename的内容加到光标所在行的后面
:n1,n2 w[filename]将n1至n2行的内容保存到filename文件中
:set nu 设置行好
:set nonu 取消行好
vi的选择功能:
v 字符选择,将光标经过的地方反白
V 行选择,光标经过的行反白
[ctrl]+v 块选择
y 将反白的地方复制起来
d 将反白的地方删除
vi 多文件编辑功能
之前碰到过这种情况,将文件一中某些行复制粘贴到文件二中,格式会乱掉
此时,可以利用i同时打开多个文件vi -o file1 file2 file3
:file 显示当前所有文件
:n 编辑下一个文件
:N 编辑上一个文件
[ctrl] +w 也可在多文件之间切换
这样就可以采用上面的快捷方式,如同在一个文件中操作
windows以CRLF(^M$)换行,linux以$换行,转换的时候可以采用dos2unix、unix2dos命令
除了vi之外,如果仅仅是查看一个文件,还有cat、tac、nl等方式,并可以通过参数设置是否显示行号,时候显示断行、【tabl】等看不见的字符。
vi的多窗口编辑和参数设置
如果编辑的文件篇幅过大时,可能需要vi多窗口编辑功能,
打开一个文件,:sp可以实现多窗口切换【ctrl】+w可以进行窗口之间的切换
对于vi环境参数的设置等,可以参照linux私房菜的p287
对于编码或者语系编码转换,同上