Vi
常用命令及技巧
vi使用中经常用到的一些命令以及部分技巧,较为实用!
进入vi的命令
vi filename : 打开或新建文件,并将光标置于第一行首
vi +n filename :打开文件,并将光标置于第n行首
vi + filename :打开文件,并将光标置于最后一行首
vi +/pattern filename :打开文件,并将光标置于第一个与pattern匹配的串处
vi -r filename :在上次正用vi编辑时发生系统崩溃,恢复 filename
vi filename....filename :打开多个文件,依次编辑
vi filename : 打开或新建文件,并将光标置于第一行首
vi +n filename :打开文件,并将光标置于第n行首
vi + filename :打开文件,并将光标置于最后一行首
vi +/pattern filename :打开文件,并将光标置于第一个与pattern匹配的串处
vi -r filename :在上次正用vi编辑时发生系统崩溃,恢复 filename
vi filename....filename :打开多个文件,依次编辑
光标移动命令
键盘的←↑→↓键 分别是左移,上移,右移,下移
h :光标左移一个字符
l :光标右移一个字符
k 或Ctrl+p:光标上移一行
j 或Ctrl+n :光标下移一行
l :光标右移一个字符
k 或Ctrl+p:光标上移一行
j 或Ctrl+n :光标下移一行
O(数字), $ 移至当前行首和行尾
<shift>+h移动光标至当前窗口的起点
<shift>+l移动光标至当前窗口的末尾
<shift>+g (或G)移动光标至文件的末尾
<ctrl>+f前翻一页
<ctrl>+b后翻一页
nG 移动光标至第n行
<ctrl>+g 显示当前行号
J 将当前行与下一行连接
u 取消前一个命令
插入命令(注意字母大小写)
i 在光标前插入文本
I 在此行开始插入文本
a 在光标后插入文本
A 在此行未插入文本
o 在当前行下面加一空行并进入输入方式
O在当前行上面加一空行并进入输入方式
删除、复制、粘贴命令
x 删除当前字符
d$ 删除当前行中从光标往后的所有字符
d0 删除当前行中从光标往前的所有字符
dd 删除当前行
ndd 删除光标所在位置之下的n行
:n1 ,n2d 删除n1行到n2行 (在最后一行状态)
yy 将当前行复制到缓冲区
nyy 将光标所在位置之下的n行文本复制到缓冲区
p:将上一次删除或复制的文本复制到光标的下方
P:将上一次删除或复制的文本复制到光标的上方
说明:移动正文时需先用删除命令将要移动的正文删除,然后使用复制命令
查找命令
/要查找的字符串(回车):查找光标位置之后的字符串
?要查找的字符串(回车):查找光标位置之前的字符串
n 继续向同一方向查找匹配的字符串
N 继续进行反方向查找匹配的字符串
* 在查找的字符串中可匹配任意字符
? 在查找的字符串中可匹配一个字符
修改命令
r 只替换光标位置上的一个字符
R 用重写的方法替换原来的字符串,结束替换按<Esc>键
:[n1,n2]s/旧字符串/新字符串/g<Enter> 用新文本替换n1~n2行内的所有旧字符串, n1,n2缺省时只修改当前行
:g/旧文本/s//新文本/g<Enter> 用新文本替换缓冲区内找到的所有旧文本
. 重复上一次修改
u 取消上一次修改
U 将当前行恢复到修改前的状态
文件的读写和退出
vi中文件的读写命令均在最后一行状态命令实现
w 将缓冲区内容写入原文件
w file2 将缓冲区内容写入文件file2
w >>file2 将缓冲区内容附加到文件file2的后面
q 退出vi
q! 强行退出vi,不改写文件
r file2 将file2中的内容读入到缓冲区当前行后
wq 存盘退出
!shell 执行shell命令
! 退出shell命令
在vi中执行shell命令
:!ls 在命令前需加字符“!”
file1 file2.f test.c … (当前目录中的文件表)
Press RETURN or Enter command to continue
常用功能选项的设置
功能选项将改变vi的显示环境,用户可在文件$HOME/.exrc中设置自己的选项,如没有此文件,则使用缺省设置。set命令在vi的最后一行命令状态使用。
set 显示与缺省不同的设置
set all 显示所有设置
set ai/noai 自动/不自动缩进
set nu/nonu 显示/不显示行号
set list/nolist 显示/不显示不可打印字符
set showmode/noshowmode显示/不显示当前操作模式
set ts=4 设置<Tab>键为4个空格
set ic/noic 忽略/不忽略大小写
问题及技巧
1.在打开一个文件编辑后发现该用户对该文件没有写权,不能存盘。
vi file
:w /tmp/file既然没法存盘,若不想放弃所做的所有修改,可以先临时存到/tmp/file。
:20,30w /tmp/file 或者仅仅把第20到30行之间的内容存盘成文件/tmp/file。
2.同时编辑两个文件,在两个文件中拷贝剪贴文本
vi file1 file2
yy 同时打开两个文件,在文件1的光标所在处拷贝所在行。
:n 切换到文件2 (n=next)。
p 在文件2的光标所在处粘贴所拷贝的行。
:N 切换回文件1。