Vi常用命令
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
进入vi的命令 (1)
移动光标类命令 (1)
屏幕翻滚类命令 (2)
编辑插入文本类命令 (3)
删除命令 (5)
搜索及替换命令 (6)
选项设置 (8)
组合命令 (10)
最后行方式命令 (14)
寄存器操作 (15)
进入vi的命令
vi filename :打开或新建文件,并将光标置于第一行首
vi +n filename :打开文件,并将光标置于第n行首
vi + filename :打开文件,并将光标置于最后一行首
vi +/pattern filename:打开文件,并将光标置于第一个与pattern匹配的串处
vi -r filename :在上次正用vi编辑时发生系统崩溃,恢复filename
vi filename....filename :打开多个文件,依次进行编辑
移动光标类命令
h :光标左移一个字符
l :光标右移一个字符
space:光标右移一个字符
Backspace:光标左移一个字符
k或Ctrl+p:光标上移一行
j或Ctrl+n :光标下移一行
Enter :光标下移一行
w或W :光标右移一个字至字首
b或B :光标左移一个字至字首
e或E :光标右移一个字至字尾
) :光标移至句尾
( :光标移至句首
}:光标移至段落开头
{:光标移至段落结尾
nG:光标移至第n行首
n+:光标下移n行
n-:光标上移n行
n$:光标移至第n行尾
H :光标移至屏幕顶行
M :光标移至屏幕中间行
L :光标移至屏幕最后行
0:(注意是数字零)光标移至当前行首
$:光标移至当前行尾
^ 光标移到行首
f 光标移到当前光标位置后面的第一个指定的字符下
F 光标移到当前光标位置前面的第一个指定的字符下
t 光标移到当前光标位置后面的第一个指定的字符前
T 光标移到当前光标位置前面的第一个指定的字符前
% 光标移动到与当前括号匹配的括号处
:n 光标移动到指定行
按数字:0:移到文章的开头。
按G:移动到文章的最后。
按w:光标跳到下个字的开头
按e:光标跳到下个字的字尾
按b:光标回到上个字的开头
按:#l:光标移到该行的第#个位置,如:5l,56l。
跳至指定的行
Ctrl + g列出光标所在行的行号。
#G:例如,15G,表示移动光标至文章的第15行行首
14.光标控制
k:上移nk 上移n行
j:下移nj 下移n行
将光标移到第n行,按下mk
将光标移到第m行,按下"ay'k
即将第n到m的行存到a寄存器,以此类推,b,c........寄存器等
屏幕翻滚类命令
Ctrl+u:向文件首翻半屏
Ctrl+d:向文件尾翻半屏
Ctrl+f:向文件尾翻一屏
Ctrl+b;向文件首翻一屏
nz:将第n行滚至屏幕顶部,不指定n时将当前行滚至屏幕顶部。
zz 将当前行置于屏幕中央
zt 将当前行置于屏幕顶端
zb 将当前行置于屏幕底端
编辑插入文本类命令
i :在光标前
I :在当前行首
a:光标后
A:在当前行尾
o:在当前行之下新开一行
O:在当前行之上新开一行
r:替换当前字符
R:替换当前字符及其后的字符,直至按ESC键
s:从当前光标位置处开始,以输入的文本替代指定数目的字符
S:删除指定数目的行,并以所输入文本代替之
ncw或nCW:修改指定数目的字
nCC:修改指定数目的行
J 删除换行符
u 取消上次操作
ctr-R 重做
c 修改指定的内容,和d相似
p 将删除缓冲区中的内容插入光标当前的位置
y 复制
vi a b c
:n跳至下一个文件,:e#回到刚才编辑的文件。
比如当前编辑文件为a,:n跳至b,再:n跳至c,:e#回到b,想回到a的话用:ea
打开一个,vi 文件名
然后在vi的命令输入状态下输入
:sp 另外一个文件的路径及文件名
如此就可以在一个窗口打开3个文件了。
可以使用ctrl +两次按w
在3个文件中切换
:edit 编辑一个新的文件
:previous 打开文件列表中的前一个文件
:next 打开文件列表中的后一个文件
:args 指定一个文件列表
:saveas 给文件改名
:file 给正在编辑的文件改名,但不保存
:split 将窗口分成上下两个窗口
:vsplit 将窗口分成左右两个窗口
:split 文件为制定的文件打开新窗口
:new 打开新窗口,以及一个无名的缓冲区
:close 关闭窗口
ctr-w w 切换窗口
ctr-w [hjkl] 切换到窗口
ctr-w [HJKL] 移动窗口
:only 只保存当前窗口,其他窗口关闭
ctw-w + 增加当前窗口高度
ctw-w - 减小当前窗口高度
:qall 所有的窗口都退出
:wall 所有的窗口内容都写入文件
取消上一命令(Undo)
重复命令(Redo)
重复命令只能在命令模式下工作,在该模式下按“.”键既可。
执行一个重复命令时,其结果是依赖于光标当前位置的。
取消上一命令(Undo)
重复命令(Redo)
重复命令只能在命令模式下工作,在该模式下按“.”键既可。
执行一个重复命令时,其结果是依赖于光标当前位置的。
fx 往右移动到x 字元上
Fx 往左移动到x 字元上
tx 往右移动到x 字元前
Tx 往左移动到x 字元前
; 配合f&t 使用,重复一次
, 配合f&t 使用,反方向重复一次
/string 往右移动到有string 的地方
?string 往左移动到有string 的地方
n 配合/&? 使用,重复一次
N 配合/&? 使用,反方向重复一次
d 删除(delete)
y 复制(yank)
p 放置(put)
c 修改(change)
x 删除光标下的字符("dl"的缩写)
X 删除光标前的字符("dh"的缩写)
D 从当前位置删除到行尾("d$"的缩写)
dw 从当前位置删除到下一个单词开头
db 从当前位置删除到前一个单词的开头
diw 删除光标上的单词(不包括空白字符)
daw 删除光标上的单词(包括空白字符)
dG 删除到文末
dgg 删除到文首
如果你用"c" 代替"d",这会变成修改命令;而改用"y",则变成拷贝命令
「cw」:更改光标所在处的字到字尾处
「c#w」:例如,「c3w」表示更改3个字
复制
「yw」:将光标所在之处到字尾的字符复制到缓冲区中。
「#yw」:复制#个字到缓冲区
「yy」:复制光标所在行到缓冲区。
「#yy」:例如,「6yy」表示拷贝从光标所在的该行“往下数”6行文字。
「p」:将缓冲区内的字符贴到光标所在位置。
注意:所有与“y”有关的复制命令都必须与“p”配合才能完成复制与粘贴功能。
daB 删除{}及其内的内容(在非v可视模式下)
diB 删除{}中的内容
ab 选择()中的内容
ib 选择()中的内容( 不含() )
aB 选择{}中的内容
iB 选择{}中的内容( 不含{} )
·变量定位
gd 转到光标下局部变量的定义处
Gd 转到光标下全局变量的定义处
:r filename 将文件filename 插入在当前行之下
复制与剪切
xp 交换前后两个字符的位置
ddp 上下两行的位置交换
:g/fred/t$ 拷贝行,从fred到文件末尾(EOF)
删除命令
ndw或ndW:删除光标处开始及其后的n-1个字
do:删至行首
d$:删至行尾
ndd:删除当前行及其后n-1行
x或X:删除一个字符,x删除光标后的,而X删除光标前的
Ctrl+u:删除输入方式下所输入的文本
u 撤消前一条命令的结果
. 重复最后一条修改正文的命令
搜索及替换命令
/pattern:从光标开始处向文件尾搜索pattern
?pattern:从光标开始处向文件首搜索pattern
n:在同一方向重复上一次搜索命令
N:在反方向上重复上一次搜索命令
:s/p1/p2/g:将当前行中所有p1均用p2替代
:n1,n2s/p1/p2/g:将第n1至n2行中所有p1均用p2替代
:g/p1/s//p2/g:将文件中所有p1均用p2替换
/ 向后搜索
? 向前搜索
`` 跳转到前一个位置
`a 跳转到标记为a的位置
ma 将光标的当前位置标记为a
`[ 跳转到最后一次修改的起始位置
`] 跳转到最后一次修改的结束位置
`" 跳转到上次编辑该文件时光标最后停留的位置
:s 替换
:substitute 替换
:%s/a/a/c 对所有行替换
:m,ns/a/a/c 对从m到n行替换
rc 用c 替换光标所指向的当前字符
nrc 用c 替换光标所指向的前n 个字符
5rc 用c 替换光标所指向的前5 个字符
x 删除光标所指向的当前字符
nx 删除光标所指向的前n 个字符
3x 删除光标所指向的前3 个字符
dw 删除光标右侧的字
ndw 删除光标右侧的n 个字
3dw 删除光标右侧的3 个字
db 删除光标左侧的字
ndb 删除光标左侧的n 个字
5db 删除光标左侧的5 个字
dd 删除光标所在行,并去除空隙
ndd 删除n 行内容,并去除空隙
3dd 删除3 行内容,并去除空隙
从正文中删除的内容(如字符、字或行)并没有真正丢失,而是被剪切并复制到了一个内存缓冲区中。
用户可
将其粘贴到正文中的指定位置。
完成这一操作的命令是:
p 小写字母p,将缓冲区的内容粘贴到光标的后面
P 大写字母P,将缓冲区的内容粘贴到光标的前面
yy 复制当前行到内存缓冲区
nyy 复制n 行内容到内存缓冲区
5yy 复制5 行内容到内存缓冲区
/str1 正向搜索字符串str1
n 继续搜索,找出str1 字符串下次出现的位置
?str2 反向搜索字符串str2
给出一个字符串,可以通过搜索该字符串到达指定行。
如果希望进行正向搜索,将待搜索的字符串置于两个“
/”之间;如果希望反向搜索,则将字符串放在两个“?”之间。
例如:
:/str/ 正向搜索,将光标移到下一个包含字符串str 的行
:?str? 反向搜索,将光标移到上一个包含字符串str 的行
:/str/w file 正向搜索,并将第一个包含字符串str 的行写入file
文件
:/str1/,/str2/w file 正向搜索,并将包含字符串str1 的行至包含字符串s
tr2 的行写
正文替换
利用:s 命令可以实现字符串的替换。
具体的用法包括:
:s/str1/str2/ 用字符串str2 替换行中首次出现的字符串str1
:s/str1/str2/g 用字符串str2 替换行中所有出现的字符串str1
:.,$ s/str1/str2/g 用字符串str2 替换正文当前行到末尾所有出现的字符串str1
:1,$ s/str1/str2/g 用字符串str2 替换正文中所有出现的字符串str1
:g/str1/s//str2/g 功能同上
从上述替换命令可以看到:g 放在命令末尾,表示对搜索字符串的每次出现进行替换;不加g,表示只对搜索
字符串的首次出现进行替换;g 放在命令开头,表示对正文中所有包含搜索字符串的行进行替换操作。
:s/p1/p2/g:将当前行中所有p1均用p2替代
:n1,n2s/p1/p2/g:将第n1至n2行中所有p1均用p2替代
:%s/old_word/new_word/g
这个指令是于在整个文件中替换特定字符串
字串搜寻与取代
s(substitute)指令可搜寻某行列范围。
g(global)指令则可搜寻整个编辑缓冲区的资料。
s指令以第一个满足该条件的字串为其取代的对象,若该行有数个满足该条
件的字串,也仅能取代第一个,若想取代所有的字串则需加上g参数。
7)查找替换
/<C-R><C-W> 把狭义单词<cword> 写到搜索命令行
/<C-R><C-A> 把广义单词<cWORD> 写到搜索命令行
:g/str/s/str1/str2/g
第一个g表示对每一个包括s1的行都进行替换,
第二个g表示对每一行的所有进行替换
包括str的行所有的str1都用str2替换
:%s/f $/for$/g 将每一行尾部的“f ”(f键和空格键)替换为for
:%s/^/mv /g 在每一行的头部添加“mv ”(mv键和空格键)
:s/fred/<c-r>a/g 替换fred成register a中的内容,呵呵
:g/<input|<form/p 显示含<input或<form的行
# 替换一个visual区域
# 选择一个区域,然后输入:s/Emacs/Vim/ 等等,vim会自动进入:模式:'<,'>s/Emacs/Vim/g 前面的'<,'>是vim自动添加的
# 在多个文档中搜索
:bufdo /searchstr
:argdo /searchstr
全局替换
语法为:[addr]s/源字符串/目的字符串/[option]
全局替换命令为::%s/源字符串/目的字符串/g
[addr] 表示检索范围,省略时表示当前行。
如:“1,20”:表示从第1行到20行;
“%”:表示整个文件,同“1,$”;
“. ,$”:从当前行到文件尾;
s : 表示替换操作
[option] : 表示操作类型
如:g 表示全局替换;
c 表示进行确认
p 表示替代结果逐行显示(Ctrl + L恢复屏幕);
省略option时仅对每行第一个匹配串进行替换;
如果在源字符串和目的字符串中出现特殊字符,需要用”\”转义
选项设置
all:列出所有选项设置情况
term:设置终端类型
ignorance:在搜索中忽略大小写
list:显示制表位(Ctrl+I)和行尾标志($)
number:显示行号
report:显示由面向行的命令修改过的数目
terse:显示简短的警告信息
warn:在转到别的文件时若没保存当前文件则显示NO write信息
nomagic:允许在搜索模式中,使用前面不带“\”的特殊字符
nowrapscan:禁止vi在搜索到达文件两端时,又从另一端开始
mesg:允许vi显示其他用户用write写到自己终端上的信息
状态命令< Ctrl+G >
命令显示在vi状态行上的vi状态信息,包括正在编辑的文件名、是否修改过、当前行号、文件的行数以及光标之前的行占整个文件的百分比。
autoindent 设置该选项,则正文自动缩进
ignorecase 设置该选项,则忽略规则表达式中大小写字母的区别
number 设置该选项,则显示正文行号
ruler 设置该选项,则在屏幕底部显示光标所在行、列的位置
tabstop 设置按Tab 键跳过的空格数。
例如:set tabstop=n,n 默认值为8
mk 将选项保存在当前目录的.exrc 文件中
环境的设定
==========
:set nu 设定资料的行号。
:set nonu 取消行号设定。
:set ai 自动内缩。
:set noai 取消自动内缩。
17. vi 环境选项Solaris ksh
noautoindent nomodelines noshowmode
autoprint nonumber noslowopen
noautowrite nonovice tabstop=8
nobeautify nooptimize taglength=0
directory=/var/tmp paragraphs=IPLPPPQPP LIpplpipnpbtags=tags /usr/lib/tags noedcompatible prompt tagstack
noerrorbells noreadonly term=vt100
noexrc redraw noterse
flash remap timeout
hardtabs=8 report=5 ttytype=vt100 noignorecase scroll=11 warn
nolisp sections=NHSHH HUuhsh+c window=23
nolist shell=/bin/ksh wrapscan
magic shiftwidth=8 wrapmargin=0
mesg noshowmatch nowriteany
For C-Shell:
setenv EXINIT "set nu"
For Bourne or Korn Shell:
EXINIT="set nu"; export EXINIT
For Korn Shell Only (alternate method):
typeset -x EXINIT="set nu"
在.profile 里设置vi 的环境选项, 以上均测试过
18.标记文本
mchar用字母char标记当前光标的位置
`char 移至char所标记处
'char移至char标记所在行的开头处
"移至当前行上一次所在位置(在光标移动之后)――一个双引号
''移至当前行上第一次所在位置的行的开头处(在光标移动之后)――两个单引号
19.
同时vi多个文件时,CTRL-SHIFT-6回到上一个文件,在本次vi的文件和上次vi的文件之间切换。
但是我发现一个BUG:在用CTRL-SHIFT-6切换到上一个文件后,用:args查看多文件vi状态时,
屏幕底部仍然显示目前vi的是刚才的文件。
(在HP-UX,Solaris,AIX上通过)
也可以使用:
:e#
进行切换
组合命令
"dw" 命令删除一个单词。
你可能认出来了,"w" 是词移动命令。
实际上,"d" 命
令后面可以跟任何"动作"(motion)命令,它会删除从当前位置到光标移动到的目标
位置的的全部内容。
例如"4w" 命令能够向后移动四个单词。
所以"d4w" 命令删除4个单词。
如果你用"e" 命令作为动作,这时Vim 认为你是想删掉整个单词(包括最后一个字符)"$" 命令移动到行尾。
所以,"d$" 命令从当前的位置一直删除到本行行尾。
这是一个"包含的" 命令,所以,这行的最后一个字符也会被删除
另一个操作符命令是"c",表示修改,change。
它的作用方式与"d" 操作符相似,只是完成后会切换到插入模式。
例如,"cw" 修改一个词,更精确的说,它删除一个词,并切换到插入模式。
这里"c2wbe<Esc>" 包括如下操作:
c 修改操作符
2w 移动两个单词的距离(与操作符合起来,它删除两个单词并进入插入模式)
be 插入be 这个单词
<Esc> 切换回普通模式
"d$" 删除到行尾;"c$" 则修改到行尾。
这就象先用"d$" 删除一行再用"a" 启动插入模式并加入新的文字。
快捷键
有些"操作符-动作" 命令由于经常被使用,所以被设置为单字符命令:
x 表示dl (删除当前光标下的字符)
X 表示dh (删除光标左边的字符)
D 表示d$ (删除到行尾)
C 表示c$ (修改到行尾)
s 表示cl (修改一个字符)
S 表示cc (修改一整行)
重复一个修改
"." 是Vim 中一个非常简单而有用的命令。
它重复最后一次的修改操作。
例如,假设你在编辑一个HTML 文件,你想删除所有的<B> 标记。
你把光标移到第一个"<" 上,然后用"df>" 命令删除<B>。
然后你就可以移到</B> 的< 上面用"." 命令删除它。
"." 命令
执行最后一次的修改命令(在本例中,就是"df>")。
要删除下一个<B> 标记,移动到下一个< 的位置,再执行"." 命令即可。
To <B>generate</B> a table of <B>contents
f< 找第一个< --->
df> 删除到> -->
f< 找下一个< --------->
重复df> --->
f< 找下一个< ------------->
重复df> -->
"." 命令重复任何除"u" (undo),CTRL-R (redo) 和冒号命令外的修改。
关于粘贴的更多知识
"P" 命令象"p" 一样也是插入字符,但插入点在光标前面。
当你用"dd" 删除一行,"P" 会把它插入到光标所在行的前一行。
而当你用"dw" 删除一个单词,"P" 会把它
插入到光标前面。
你可以执行这个命令多次,每次会插入相同的文本。
"p" 和"P" 命令接受个数前缀,被插入的文本就会被插入指定的次数。
所以"dd" 后
加一个"3p" 会把删除行的三个拷贝插入到文本中。
交换两个字符
经常发生这样的情况,当你输入字符的时候,你的手指比你的脑子转得快(或者相反?)。
这样的结果是你经常把"the" 敲成"teh"。
Vim 让你可以很容易得修正这种错误。
只要把光标移到"teh" 的"e" 上,然后执行"xp" 即可。
这个工作过程是:"x" 删除一个字符,保存到寄存器。
"p" 把这个被保存的字符插入到光标的后面,也就是"h" 的后面了。
teh th the
x p
由于"y" 是一个操作符,所以"yw" 命令就是拷贝一个单词了。
当然了,个数前缀也是
有效的。
要拷贝两个单词,就可以用"y2w"。
例如:
let sqr = LongVariable *
-------------->
y2w
let sqr = LongVariable * p
let sqr = LongVariable * LongVariable
注意:"yw" 命令包括单词后面的空白字符。
如果你不想要这个字符,改用"ye" 命令。
"yy" 命令拷贝一整行,就像"dd" 删除一整行一样。
出乎意料地是,"D" 删除到行尾而"Y" 却是拷贝一整行。
要注意这个区别!"y$" 拷贝到行尾。
使用剪贴板
"Cut" 菜单项会在把文字拷进剪贴板前删除它。
"Copy","Cut" 和"Paste" 命令在弹出
菜单中也有(当然了,前提是有弹出式菜单)。
如果你的Vim 有工具条,在工具条上
也能找到这些命令。
如果你用的不是GUI,或者你根本不喜欢用菜单,你只能用其它办法了。
你还是可以用普通
的"y"(yank)和"p"(put)命令,但在前面必须加上"*(一个双引号加一个星号)。
例如,要拷贝一行到剪贴板中:
"*yy
要粘贴回来:
"*p
这仅在支持剪贴板的Vim 版本中才能工作。
文本对象
如果你在一个单词的中间而又想删掉这个单词,在你用"dw" 前,你必须先移到这个单词的开始处。
这里还有一个更简单的方法:"daw"。
this is some example text.
daw
this is some text.
"daw" 的"d" 是删除操作符。
"aw" 是一个文本对象。
提示:"aw" 表示"A Word"
(一个单词),这样,"daw" 就是"Delete A Word"(删除一个单词)。
确切地说,
该单词后的空格字符也被删除掉了。
用"cis" 可以改变一个句子。
看下面的句子:
Hello there. This is an example. Just some text.
移动到第二行的开始处。
现在使用"cis":
Hello there. Just some text.
现在你输入新的句子"Another line.":
Hello there. Another line. Just some text.
"cis" 包括"c"(change,修改)操作符和"is" 文本对象。
这表示"Inner Sentence"(译者注:实在很难用中文表示这个意思了,各位还是记英文名吧)。
还有
一个文本对象是"as",区别是"as" 包括句子后面的空白字符而"is" 不包括。
如果
你要删除一个句子,而且你还想同时删除句子后面空白字符,就用"das";如果你想保
留空白字符而替换一个句子,则使用"cis"。
*04.9* 替换模式
"R" 命令启动替换模式。
在这个模式下,你输入的每个字符都会覆盖当前光标上的字符。
这会一直持续下去,直到你输入<Esc>。
在下面的例子中,你在"text" 的第一个"t" 上启动替换模式:
This is text.
Rinteresting.<Esc>
This is interesting.
你可能会注意到,这是用十二个字符替换一行中的五个字符。
如果超出行的范围,"R" 命令自动进行行扩展,而不是替换到下一行。
你可以通过<Insert> 在插入模式和替换模式间切换。
但当你使用<BS>(退格键)进行修正时,你会发现原来被替换的字符又回来了。
这就好像一个"撤消" 命令一样。
. %
%用来匹配块,
如果你的光标在类似([{}])
或者#ifdef #else #endif上
%将把光标跳转到相应的匹配符号上去,
%还可以用来指定命令范围,
如果你想把一个
{
..
...
}的块全部删除。
可以先把光标移到{ 再敲d%
类似的,
如果你想把一个块全部往里缩进一个tab
可以把光标移到{ 敲>%
2. =
=是用来缩进的假设你已经在.vimrc里
设置了你的缩进格式,
你就可以用=来缩进你的代码了
=%就是缩进一个块。
3.正则表达式
正则表达式大家都清楚,
我主要讲个一般人不太用,
但很有用的表达,
例如你想把所有的"..."形式的串替换成'...'的形式
但引号里的内容不变
你就可以用
%s/"\(.*\)"/'\1'/来做
上面这个正则表达式"\(.*\)"里\用来表示()是元字符
第一个在括号里的被匹配的串就可以被\1来代表, 以后依次是\2 \3。
顺便说一句,我到现在还不
知道怎么限制vim里正则表达匹配的贪婪算法
·编译选项
:cn 命令会把你带到下一个出错地点,而不考虑它在什么文件里。
:cc 命令会向你显示当前错误的编译器输出信息;
:cl 会生成一个列有项目所有错误的列表,以供浏览这些错误
最后行方式命令
:n1,n2 co n3:将n1行到n2行之间的内容拷贝到第n3行下
:n1,n2 m n3:将n1行到n2行之间的内容移至到第n3行下
:n1,n2 d :将n1行到n2行之间的内容删除
:w :保存当前文件
:e filename:打开文件filename进行编辑
:x:保存当前文件并退出
:q:退出vi
:q!:不保存文件并退出vi
:!command:执行shell命令command
:n1,n2 w!command:将文件中n1行至n2行的内容作为command的输入并执行之,若不指定n1,n2,则表示将整个文件内容作为command的输入
:r!command:将命令command的输出结果放到当前行
ZZ 退出vi
:help 帮助系统
ctr-] 跳转到标签制定的目标
ctr-T 回到前一个目标
在命令模式中,连按两次大写字母Z,若当前编辑的文件曾被修改过,则Vi保存该文件后退出,返回到shell;
若当前编辑的文件没被修改过,则Vi直接退出, 返回到shell。
若用户真的希望用文件的当前内容替换newfile中原有内容,可使用命令:w! newfile
在末行模式下,输入命令:wq
Vi将先保存文件,然后退出Vi返回到shell。
在末行模式下,输入命令:x
该命令的功能同命令模式下的ZZ命令功能相同。
w filename
储存正在编辑的文件为filename
wq filename
储存正在编辑的文件为filename,并退出vi
恢复文件
vi 在编辑某个文件时,会另外生成一个临时文件,这个文件的名称通常以. 开头,并以.swp 结尾。
vi 在
正常退出时,该文件被删除,若意外退出,而没有保存文件的最新修改内容,则可以使
用恢复命令:
:recover 恢复文件
也可以在启动vi 时利用-r 选项。
恢复编辑时被中断的文件
======================
在编辑过程中,若系统当掉或连线中断,而缓冲区的资料并还未
被写回磁盘时,当再度回到系统,执行下列指令即可回复中断前
的文件内容。
%vi -r filename
替换文件中的字符串
在vi界面下使用命令
:%s#/usr/bin#/bin#g
可以把文件中所有路径/usr/bin换成/bin。
也可以使用命令:
:%s/usr/bin/bin/g
其中“”是转义字符,表明其后的“/”字符是具有实际意义的字符,不是分隔符。
9)窗口操作
:vne [filename]
:sp [filename]
:S [filename]
:new [filename]
:^w + ^r 交换两个窗口的位置
^w = 窗口等宽
:res -n 窗口高度减小n
:res +n 窗口高度增大n
:vert res -n
:vert res +n
10)DOS格式文本转成Unix格式文本
:1,$s/^M//g
11)书签
在阅读和编写大的程序文件时,利用标记(书签)功能定位是十分有帮助的。
将光标移到想做标记的位置。
假如做一个名为“debug1”的标记,那么用户可在命令模式下输入做标记的命令“mdebug1”,然后敲入回车键,一个名为“debug1”的标记就做好了。
接下来用户可以随意将光标移到其它的位置,当在命令模式下输入“`debug1”后,就能快速回到“debug1”的标记所在行的行首。
寄存器操作
"?nyy:将当前行及其下n行的内容保存到寄存器?中,其中?为一个字母,n为一个数字"?nyw:将当前行及其下n个字保存到寄存器?中,其中?为一个字母,n为一个数字
"?nyl:将当前行及其下n个字符保存到寄存器?中,其中?为一个字母,n为一个数字"?p:取出寄存器?中的内容并将其放到光标位置处。
这里?可以是一个字母,也可以是一个数字
ndd:将当前行及其下共n行文本删除,并将所删内容放到1号删除寄存器中。