vi使用手册(转载)


从shell中启动可视化编辑器
vi filename 指示shell启动vi编辑器,并将参数filename传给它。如果当前目前中存在该文件,则vi编辑器将它解释为要打开的文件;如果没有该文件,则vi编译器创建新文件
vi file1 file2 file3 shell传递3个参数给vi,vi将它们解释为要打开的文件。可以使用w命令保存文件,使用n命令访问下一个文件
vi +# filename 打开文件,并将光标移到指定的行。例如,命令vi +100 records 从第100行开始编辑文件records
vi +the filename 打开文件,并将光标移动包含有目标字符串的行。例如,命令vi +Jason friends 从第1个含有字符串Jason的行开始编辑文件friends
view filename 打开文件进行编辑,但是拒绝保存对文件的修改,除非使用w!命令
光标移动命令
hjkl 将光标分别向左、下、上、右移动一个字符
0(零) 将光标移到当前行的行首
^(脱字符) 同0一样将光标移到当前行的行首
$ 将光标移到当前行的行末
##G 将光标移到G前面的数字指定的行。例如,42G将光标移到文件的第42行
G 将光标移到文件的最后一行
w 将光标向前移到下一个单词的首字母
e 将光标向前移到下一个单词的最后一个字母
b 将光标向后移到上一个单词首字母
- 将光标定位到上一行的行首
+ 将光标定位到下一行的行首
12 将光标定位到当前行的第12列
L 将光标定位到屏幕的最下面一行
M 将光标定位到屏幕中间的一行
H 将光标定位到屏幕的最上面一行
'' 两个单引号将光标移到它的先前的位置
光标定位命令(上下文的)
fb 将光标向前移到当前行上的下一个字母b(或者其他的任意指定的字符)
Fb 将光标向后移到当前行上的上一个字母b(或指定的字符)
t# 将光标移到当前行上字符#的第1个实例的右侧。例如,命令tM将光标移到当前行上第1个M的右侧
T# 在当前行上向左移动光标,将它移到字符#的第1个实例的前一字符
word 将光标向前移到单词word的下一个实例
word 将光标向后移到单词word的上一个实例
n 将光标移到前面命令word或word中指定模式的下一个实例
显示调整命令
Ctrl+D 显示文件中的下半屏文本
Ctrl+U 显示文件中的上半屏文本
Ctrl+F 显示文件中的下一屏文本
Ctrl+B 显示文件中的上一屏文本
设置显示选项
set number 将行号作为屏幕显示的一部分,但是行号并不是文件的一部分。它的缩写形式为set nu
set nonumber 清除屏幕上的行号。也可以使用缩写形式set nonu
set showmode 在屏幕的右下角显示追加模式信息
set list 在每行的行末显示美元符号,并用Ctrl+I表示制表符
set showmatch 在输入)或]时,将光标移到与之匹配的(或[
set window=value 定义屏幕上显示的文本行的行数
set autoindent 自动缩进。也可以使用缩写形式set ai
set tabstop=value 设置显示制表符的空格字符个数。也可以使用缩写形式ts=value
set wrapmargin=value 设置显示器的右页边。当输入进入所设置的页边时,编辑器自动回车换行
set ignorecase 指示编辑器搜索字符串,并忽略目标中字母的大小写
set 显示设置的所有选项
set all 显示所有可以设置的选项
文本删除命令
dd 删除当前光标所有的文本行
#dd 删除#行文本
dw 从文本中删除一个单词
#dw 从文本中删除#个单词
x 删除光标所在的一个字符
#x 从文本中删除#个字符
D 删除当前行上光标后面的部分
#,#d 例如,12,37d 将删除第12~37行之间的所有文本,包括第12和37行
撤销命令
u 撤销。恢复最近一次的文本修改操作,即使已经移动了光标。在Linux系统中,再次使用撤销命令将恢复更前一次的文本修改操作。在BSD的vi中,第2次撤销操作将撤销第一次撤销操作,恢复第1次撤销前修改的文本
redo 在Linux系统中,取消撤销操作恢复文本修改。在标准的UNIX系统中,第2个u命令取消第1个u命令,结果就是一个“redo”
U 如果在修改后还没有将光标移出当前行,则可以撤销对当前行进行的所有的文本修改
向文本中添加文本
a(小写) 从光标的右侧开始插入文本
A(大写) 从当前行的行末开始添加文本
i(小写) 从光标的左侧开始插入文本
I(大写) 从当前行的行首插入文本
o(小写) 在光标的下面打开(或插入)一个新行
O(大写) 在光标的上面打开一个新行
#r filename 例如,8r report.old读取文件report.old,并将它的内容放到当前文件的第8行之后
Esc 无论使用什么命令进入了追加插入模式,都可以通过按Esc键离开追加模式返回到vi的命令模式
Ctrl+V 允许输入控制字符。按Ctrl+V键后再按回车键将把Ctrl+M插入到文件中
在文件中修改文本
cw 仅仅修改光标处的单词(删除单词,然后进入追加模式中,以在被删除单词的位置添加文本)
s(小写) 替换单个字符
S(大写) 替换整行文本
cc 替换整行文本(同S)
r 用输入的下一个字符替代当前光标处的字符,并自动返回到命令模式
R 将编辑器放到覆盖模式,用输入的字符来逐个替换光标处的字符
C(大写) 修改行上从光标到行末之间的文本
ct# 修改行上从光标到前向第1个目标字符之间的文本。例如ctY将删除当前行上从光标到向前第1个字符Y之间的所有文本,并进入追加模式以在删除文本的位置添加文本
cf# 修改行上从光标到前向第1个目标字符之间的文本(包括目标字符)。例如cfY将删除当前行上从光标到向前第1个字符Y之间(包括Y)的所有文本,并进入追加模式以在删除文本的位置添加文本
cT# 修改行上从光标到后向第1个目标字符之间的文本。例如cTY将删除当前行上从光标到向后第1个字符Y之间的所有文本,并进入追加模式以在删除文本的位置添加文本
cF# 修改行上从光标到后向第1个目标字符之间的文本(包括目标字符)。例如cFY将删除当前行上从光标到向后第1个字符Y之间(包括Y)的所有文本,并进入追加模式以在删除文本的位置添加文本
接出和粘贴行的单词
yy 将当前行复制或接出到内在缓冲区。20yy将当前行和它后面的19行(共20行)文本复制到内存。目标行仍然保留在文件中,可以使用p命令将这些内存中的文本粘贴到文件中
dd 删除当前行,并将它放到与yy命令使用的相同的内存缓冲区。目标行从文件中删除,但是可以使用p命令将它粘贴到文件中的其他地方
yw 将当前光标所在的单词接出或复制到内在缓冲区。6yw命令将把当前单词和它后面的5个(共6个)单词复制到内存
dw 删除当前的单词,并将它放到与yw命令使用的相同的内存缓冲区。可以使用p命令将单词粘贴到文件的其他地方
yt# 接出从光标到向前一个字符(不包括该字符)之间的文本。例如,ytB命令将从光标到字符B的下一实例(不包括字符B)之间的文本接出或复制到内存
yf# 接出从光标到向前一个字符(包括该字符)之间的文本。例如,yf命令将从光标到字符的下一个实例(包括字符)之间的文本接出或复制到内存
yT# 后向接出(不包括目标字符)。例如,yTN命令将从光标到字符N的后向第1个实例之间的文本(不包括字符N)接出或复制到内存
yF# 后向接出(包括目标字符)。例如,yFJ命令将把从光标到字符N的向后第1个实例之间的文本(包括字符N)接出或复制到内存
p 将内存中的文本行粘贴到文件中光标所在行的下面,或将内存中的单词粘贴到文件中光标的右侧
P(大写) 将接出或删除的文本行粘贴到文件中光标所在行的上面。或将接出或删除的单词粘贴到文件中光标的左侧
文件移动命令
J 将下行文本同当前行合并成一行
#,# move # 将指定的行移到目标位置。12,35 move 58命令将第12~35行之间的所有文本移到第58行的后面。缩写为mo
1,26 co 82 将第1~26行之间的所有文本复制到第82行的后面(可以选择行号)
使用可视化编辑器进行全局编辑
s targetreplacement 查找当前行上目标字符串的第1个实例并删除,然后用字符串replacement替换。只修改当前行上的第1个目标实例
g targetsreplacement 查找所有行上目标字符串的第1个实例并删除,然后用字符串replacement替换。修改所有行上目标的第1个实例
#,# stargetreplacement 在指定的行上进行替换。例如,7,37 smarchwalk将查找第7~37行之间的所有文本行,并用字符串walk替换每行中的第1个目标字符串march。所有指定行上的第1个目标字符串修改
#,# stargetreplacementg 在指定的行上进行全局替换。例如,1,$ sfunjoyfulg 将在第1行到文件最后一行之间查找目标字符串fun的所有实例并删除,然后用字符串joyful替换。指定行上的目标字符串的所有实例都被修改
g targetsreplacement 查找所有行上目标字符串的第1个实例并删除,然后用字符串replacement替换。所有行上的第1个目标都被修改
#,# targetsreplacement 在指定的行上进行替换,例如,7,37 marchswalk命令在第7~37行之间每个文本行上查找目标字符串的第1个实例并删除,然后用字符串walk替换。所有指定行上的第1个目标字符串都被修改
#,# targetsreplacementg 在指定的行上进行全局替换。例如,1,$ funsjoyfulg将在第1行到文件最后一行之间查找目标字符串fun的所有实例并删除,然后用字符串joyful替换。指定行上的所有目标字符串都被修改
编辑工具:映射,缩写和标记
m# 用字母标记当前行。例如,ma命令表示用a标记当前行。即使移动了标记行,它仍然标记为a,可以用a来定位该行
'# 定位标记行。例如,命令'a将光标移到标记a的行。命令'a,$d将删除从标记行到文件末尾之间的所有行
map # command string 在命令模式中输入#时,将其作为一个命令串。例如,map #o#!binksh产生一个新的命令模式指令,您输入#时,它被解释为o打开个新行,并添加文本#!binksh到文件中。为了在命令中包含回车和其他控制字符,可以在它们的前面用Ctrl+V命令
ab abbreviation char-string 设置追加模式缩写。例如,在命令模式中输入ab mv Milky Way Galaxy,则建立缩写。如果在追加模式中输入字符串mw,然后按Esc键,mw将被Milky Way Galaxy替代
在vi编辑器中向shell发出命令
!ls 启动一个shell,并让shell运行ls程序。在运行完指定的程序后,必须按回车键以返回到编辑器中
!ksh 启动一个shell,它允许运行多个命令。退出shell可以回到编译器中
Or!speel% 对当前文件(%)进行拼写检查,并将spell的输出诗篇到当前文件中,从第1行(0行后面)开始放置这些输出
31r!command% 运行UNIX命令(如cal或date)并将它的输出读入到当前文件,从第31行开始放置这些输出
Ctrl+Z 用于挂起当前编辑会话进程的csh和ksh命令,它允许您向父shell发出命令
fg 重新激活挂起的编辑进程的csh和ksh命令
读、写和退出编辑器
wq 保存编辑会话期间对文件所做的修改,退出编辑器返回到shell
q 如果没有对文件进行修改或添加文件,可以用q退出对一个文件的编辑
q! 退出对文件的编辑返回到shell模式,但是不保存在编辑会话期间对文件所做的修改
w filename v将文件的缓冲区副本(修改版本)保存到一个新文件
[color=#DC143C][b]#,# w newtest 例如,1,6 w newtext命令创建一个名为newtext的文件,并将当前文件的第1~6行文本复制到文件newtext中
1,6 w  oldfile 将当前文件的第1~6行文本的一个副本追加到已有文件oldfile的末尾
1,6 w! oldfile 用当前文件的第1~6行文本覆盖文件oldfile
进入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 :光标右移一个字j至字尾
) :光标移至句尾
( :光标移至句首
}:光标移至段落开头
{:光标移至段落结尾
nG:光标移至第n行首
n+:光标下移n行
n-:光标上移n行
n$:光标移至第n行尾
H :光标移至屏幕顶行
M :光标移至屏幕中间行
L :光标移至屏幕最后行
0:(注意是数字零)光标移至当前行首
$:光标移至当前行尾
屏幕翻滚类命令
Ctrl+u:向文件首翻半屏
Ctrl+d:向文件尾翻半屏
Ctrl+f:向文件尾翻一屏
Ctrl+b;向文件首翻一屏
nz:将第n行滚至屏幕顶部,不指定n时将当前行滚至屏幕顶部。
插入文本类命令
i :在光标前
I :在当前行首
a:光标后
A:在当前行尾
o:在当前行之下新开一行
O:在当前行之上新开一行
r:替换当前字符
R:替换当前字符及其后的字符,直至按ESC键
s:从当前光标位置处开始,以输入的文本替代指定数目的字符
S:删除指定数目的行,并以所输入文本代替之
ncw或nCW:修改指定数目的字
nCC:修改指定数目的行
删除命令
ndw或ndW:删除光标处开始及其后的n-1个字
do:删至行首
d$:删至行尾
ndd:删除当前行及其后n-1行
x或X:删除一个字符,x删除光标后的,而X删除光标前的
Ctrl+u:删除输入方式下所输入的文本
搜索及替换命令
pattern:从光标开始处向文件尾搜索pattern
pattern:从光标开始处向文件首搜索pattern
n:在同一方向重复上一次搜索命令
N:在反方向上重复上一次搜索命令
:sp1p2g:将当前行中所有p1均用p2替代
:n1,n2sp1p2g:将第n1至n2行中所有p1均用p2替代
:gp1sp2g:将文件中所有p1均用p2替换
选项设置
all:列出所有选项设置情况
term:设置终端类型
ignorance:在搜索中忽略大小写
list:显示制表位(Ctrl+I)和行尾标志($)
number:显示行号
report:显示由面向行的命令修改过的数目
terse:显示简短的警告信息
warn:在转到别的文件时若没保存当前文件则显示NO write信息
nomagic:允许在搜索模式中,使用前面不带“”的特殊字符
nowrapscan:禁止vi在搜索到达文件两端时,又从另一端开始
mesg:允许vi显示其他用户用write写到自己终端上的信息
最后行方式命令
: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的输出结果放到当前行 。
xsb 发表于2005.11.09 1811 分类 ( OS ) 阅读(751次)  Permanent link  引用 (0)
 re vi使用手册(zt) [回复]
httpwww.5ilinux.comblogarchives000058.html
功能最强在的编辑器——vi
vi 是所有UNIX系统都会提供的屏幕编辑器,它提供了一个视窗设备,通过它可以编辑文件。当然,对UNIX系统略有所知的人,或多或少都觉得vi超级难用,但vi是最基本的编辑器,所以希望读者能好好把它学起来,以后在UNIX世界里必将畅行无阻、游刃有余,因为其他几种文本处理器并非UNIX标准配备。说不定别人的Linux机器没安装joe或pico,如果您不会vi,那您可能就没辄了。
vi的基本概念
基本上vi可分为三种操作状态,分别是命令模式(Command mode)、插入模式(Insert mode)和底线命令模式(Last line mode),各模式的功能区分如下:
1. Comand mode:控制屏幕光标的移动,字符或光标的删除,移动复制某区段及进入Insert mode下,或者到Last line mode。
2. Insert mode:唯有在Insert mode下,才可做文字数据输入,按Esc等可回到Comand mode。
3. Last line mode:将储存文件或离开编辑器,也可设置编辑环境,如寻找字符串、列出行号等。
不过可以把vi简化成两个模式,即是将Last line mode也算入Command mode,把vi分成Command 和Insert mode。
vi的基本操作
?进入vi
在系统提示符号输入vi及文件名称后,即可进入vi全屏幕编辑画面:
$ vi testfile
有一点要特别注意,就是您进入vi之后是处于“Command mode”下,您要切换到Insert mode才能输入文字。初次用vi的用户都会想先用上下左右键移动光标,结果电脑一直叫,把自己气个半死,所以进入vi后,先不要乱动,转换入Insert后再说。
?切换至Insert mode编辑文件
在Command mode下按‘i’、‘a’或‘o’三键就可进入Insert mode。这时候您就可以开始输入文字了。
i 插入,从目前光标所在之处插入所输入的文字。
a 增加,目前光标所在的下一个字开始输入文字。
o 插入新的一行,从行首开始输入文字。
?Insert的切换→Command mode,按Esc键
您目前处于Insert mode,您就只能一直打字。假如您发现打错字了,想用光标键往回移动,将该字删除,就要按ESC键转换回Command mode,再删除文字。
?离开vi及存文件
在Command mode下,可按冒号“:”键入入Last line mode,例如:
w filename (输入“w filename”,将文章存入指定的文件名filename)
wq (输入“wq”,因为进入之时已经指定文件名testfile,所以会写入testfile并离开vi)
q! (输入“q!”,强制离开并放弃编辑的文件)
Command mode功能键列表
在介绍command mode指令的时后,指令后面加上“常用”字眼的功能键,表示比较常用的vi指令,请读者您一定要学会、记住。
(1)I、a、o切换进入Insert mode。[超级常用]
(2)移动光标
vi可以直接用键盘上的光标键来上下左右移动,但正规的vi是用小写英文字母
h、j、k、l,分别控制光标左、下、上、右移一格。
按Ctrl+B:屏幕往后移动一页。[常用]
按Ctrl+F:屏幕往前移动一页。[常用]
按Ctrl+U:屏幕往后移动半页。
按Ctrl+D:屏幕往前移动半页。
按 0 (数字零):移动文章的开头。[常用]
按 G:移动到文章的最后。[常用]
按 w:光标跳到下个word的开头。[常用]
按 e:光标跳到下个word的字尾。
按 b:光标回到上个word的开头。
按 $:移到光标所在行的行尾。[常用]
按 ^:移到该行第一个非空白的字符。
按 0:移到该行的开头位置。[常用]
按 #:移到该行的第#个位置,例:51、121。[常用]
(3)删除文字
x:每按一次删除光标所在位置的后面一个字符。[超常用]
#x:例如,6x 表删除光标所在位置的后面6个字符。[常用]
X:大字的X,每按一次删除光标所在位置的前面一个字符。
#X:例如,20X 表删除光标所在位置的前面20个字符。
dd:删除光标所在行。[超常用]
#dd:例如,6dd表删除从光标所在的该行往下数6行之文字。[常用]
(4)复制
yw:将光标所在处到字尾的字符复制到缓冲区中。
(想在和#x、#X的功能相反)
p:将缓冲区内的字符粘贴到光标所在位置(指令‘yw’与‘p必须搭配使用)。
yy:复制光标所在行。[超常用]
p:复制单行到您想粘贴之处。(指令‘yy’与‘p’必须搭配使用)
#yy:如:6yy表示拷贝从光标所在的该行往下数6行之文字。[常用]
p复制多行到您想粘贴之处。(指令‘#yy’与‘p’必须搭配使用)
“ayy:将复制行放入buffer a, vi提供buffer功能,可将常用的数据存在buffer
“ap:将放在buffer a的数据粘贴。
“b3yy:将三行数据存入buffer b。
“b3p:将存在buffer b的资料粘贴
(5)取代
r 取代光标所在处的字符:[常用]
R:取代字符直到按Esc为止。
(6)复原(undo)上一个指令
u:假如您误操作一个指令,可以马上按u,回复到上一个操作。[超常用]
. .可以重复执行上一次的指令。
(7)更改
cw:更改光标所在处的字到字尾$处。
c#w:例如,c3w代表更改3个字。
(8)跳至指定行
Ctrl+G:列出光标所在行的行号。
#G:例如,15G,表示移动光标至文章的第15行行首。[常用]
Last line mode下指令简介
读者您要使用Last line mode之前,请记得先按Esc键确定您已经处于Command mode下后,再按冒号“:”或“”或“?”三键的其中一键进入Last line mode。
1.列出行号
set nu 输入“set nu”后,会在文章的每一行前面列出行号。
2.跳到文章的某一行
#:井号代表一个数字,在Last line mode提示符号“:”前输入数字,再按Enter就会跳到该行了,如:15[Enter]就会跳到文章的第15行。[常用]
3.寻找字符串
关键字:先按,再输入您想寻找的字,如果第一次找的关键字不是您相尽可能的,可以一直按n会往下寻找到您要的关键字为止。
?关键字:先按?,再输入您想寻找的字,如果第一次找的关键字不是您想要的,可以按n会往前寻找到您要的关键字为止。
4.取代字符串
1,$sstringreplaeg:在last line mode输入“1,$sstringreplaceg”会将全文的string字符串取代为replace字符串,其中1,$s就是指搜寻区间为文章从头至尾的意思,g则是表示全部取代不必确认。
%sstringreplacec:同样会将全文的string字符串取代为replace字符串,和上面指令不同的地方是,%s和1,$s是相同的功能,c则是表示要替代之前必须再次确认是否取代。
1,20sstringreplaceg:将1至20行间的string替代为relpace字符串。
5.存文件
w:在last line mode提示符号“:”前按w即可将文件存起来。[超常用]
#,# w filename:如果您想摘取文章的某一段,存成另一个文件,可用这个指令#代表行号,例如30,50 w nice,将您正在编辑文章的第30~50行存成nice这个文件。
6.离开
q:按q就离开,有时如果无法离开vi,可搭配“!:强置离开vi,如“q!”
qw:一般建议离开时,搭配w一起使用,如此离开时还可存文件。[常用]

 

发表于: 2008-06-16,修改于: 2008-06-16 09:12,已浏览55次,有评论4条 推荐 投诉
       
       


       
网友评论
       
    网友: jjqiao     时间:2008-06-16 09:00:52 IP地址:221.224.126.★
   

vi编辑器 复制文字块



2007-02-11 19:22



常见操作:

      vi a 打开文件a;

      vsplit b将当前窗口垂直分隔成两个,

      并在第二个窗口打开文件b,

      CTRL-W切换回窗口a,

      按V进入可视状态选择要复制的部分,yy

      CTRL-W切换到窗口b,

      找到粘贴位置p,将复制内容粘贴到b。

       复制文字块:

      把光标放在要复制的块前,按ESC,再按v,底下会出现VISUAL字样,

      这时光标处会变成反白显示,按方向键会让所有光标经过处变成选定显示,这时再按y复制入剪切贴板,按p再粘贴到别处。

      你们试试一定可以,可任意复制多少个字节。

      vi中多个文件相互之间的复制、粘贴功能简介! 

      大家在vi编辑中,常常遇到想把文件A里面的一行或多行,复制到B文件里面去

      几种方法:

      1.如果你有多台机器,而且是联网的,你可以用netterm虚拟终端,telnet登陆主机对A文件进行修改、复制,然后打开B文件粘贴过去!

      2.如果是单机,当然要用unix自带的编辑功能呢

        先简单介绍一些vi编辑里的命令:

        (A).yw 将当前字存入无名缓冲区,前面可加"x,表示存入名字为x的有名 

      缓冲区(x为a-z),也可加数字表示存入的字数,以后可用P或p命 

      令取出 

      yy 将当前行存入无名缓冲区,用法参看yw 

         (B).命令如下:a-Z 是缓冲区,也可移出数字1-9指定的删除缓冲区 

      利用命名缓冲区可很好地保存若干文本段,便于以后存取、移动或者重排。这些缓冲区用a到z字母命名!为了访问这些缓冲区中的一个,要使用双引号

      例如:要把一行插入a缓冲区,可键入 "ayy 

      为了把这个文本放回该文件中,键入 "ap 



        (c).m做标志命令:

        m 字母 用字母标记当前行,以后可用 '字母使光标移动到当前行,  (参看'命令)

      列子:1。将a文件中的4行到b文件中

            命令如下:"ay4+ 

                      :ex b (转到b文件中)

                  然后"ap

              2. 将a中多行复制到b文件中

      先在开始处做标志mk 

      然后在末尾用"ay'k (光标自动回到开始处,此时已经把你的内容放到缓冲区了)

      其中a表示缓冲区a 

      然后用ex转义到你的文件B中,然后用"ap命令粘贴就行

      3。如果你文件中有多次要复制粘贴的话,看下面:

      a表示缓冲区a ,你还继续可以使用缓冲b吗 

      缓冲区有a-z和1-9这么多 

      缓冲区就好象windows下的煎切版一样,它有好多个,你可以把你想要的复制进去,然后粘贴,只不过你用"ay时候多换a就是了,如你要复制462行用"ay

      ,复制536行用"by

       

       
    网友: 本站网友     时间:2008-06-16 09:01:21 IP地址:221.224.126.★
   

vi 的复制是这样用:把光标移到要复制的起始行按mb(标识起始行),把光标移到复制的结束行按"ay'b(标识结束行,注意第一个是双引号,每二个是单引号),这时就把要复制的内容复制到缓冲区了,当然缓冲区的字母你可以随便用一个,把光标移到想粘贴的行,或打开要粘贴的文件,用"ap就把内容粘贴过来了。

       

       
    网友: 本站网友     时间:2008-06-16 09:16:38 IP地址:221.224.126.★
   

            Java语言实用技巧:常用VI高级命令集锦



            发布时间:2007.11.06 04:45     来源:赛迪网技术社区    作者:baocl

            VI高级命令集锦







            十多年前就背过vi的批量替换的命令,可就是记不牢。这不,今天又要上网查了。不过,今天查到的命令以前没有见过:在vi界面下使用命令

            :%s#/usr/bin#/bin#g

            可以把文件中所有路径/usr/bin换成/bin。其中“#”是转义字符,表明其后的“/”字符是具有实际意义的字符,不是分隔符。嗯~又学了一招。



            以下是一篇比较全的vi命令集:(感谢jaxy,感谢chinaitlab)

            ------------------------------------------------------------------------



              鉴于大家在使用VI

            的时候有一定的陌生,在这里借花献佛,从兄弟版[SHELL]中整理出以下关于VI编程的高级技巧,希望对大家学习UNIX有所帮助,并希望大家能结合使用HPUX的心得体会对这些经验进行进一步的扩展。

              1.交换两个字符位置

              

              xp

              2.上下两行调换

              ddp

              3.把文件内容反转

              :g/^/m0/ (未通过)

              

              4.上下两行合并

              J

              5.删除所有行

              dG

              6.从当前位置删除到行尾

              d$

              7.从当前位置复制到行尾

              y$ 如果要粘贴到其他地方 p 就可以了

              

              

              由于vi 是建立在 EX 上的 所以 当键入 : 时就来到了 EX 命令状态

              8.

              :ab string strings

              例如 ":ab usa United States of America" ,

              当你在文见里插入 usa 时

              United States of America 就蹦出来了

              9.

              :map keys new_seq

              定义你当前 键盘命令

              10.

              :set [all]

              vi or ex 的编辑状态

              如 显示每行 :set nu

              11.

              在命令状态下,nyy表示拷贝从光标行起的下n行内容,p表示paste,可刚复制的内容粘贴在光标处的

              下面。

              

              12.

              单个字符替换用r,覆盖多个字符用R,用多个字符替换一个字符用s,整行替换用S

              

              13.

              

              :%s/old_word/new_word/g

              这个指令是于在整个文件中替换特定字符串

              

              14.光标控制

              

              k:上移 nk 上移n行

              j:下移 nj 下移n行

              

              

              将光标移到第n行,按下 mk

              将光标移到第m行,按下 "ay'k

              即将第n到m的行存到a寄存器,以此类推,b,c........寄存器等

              

              这样就可以将你常用的需要复用的内容粘贴到不同的寄存器中以备用

              

              

              想粘贴到某处,直接将光标移到某地,按下 ‘ap 即可,以此类推,b,c........寄存器等

              

              在当前屏幕中

              H 跳到第一行

              M 跳到中间一行

              L 跳到最后一行

              

              15.

              表8-2 删除命令

              删除命令操作

              d l 删除当前字符(与x命令功能相同)

              d 0 删除到某一行的开始位置

              d ^ 删除到某一行的第一个字符位置(不包括空格或TA B字符)

              d w 删除到某个单词的结尾位置

              d 3 w 删除到第三个单词的结尾位置

              d b 删除到某个单词的开始位置

              d W 删除到某个以空格作为分隔符的单词的结尾位置

              d B 删除到某个以空格作为分隔符的单词的开始位置

              d 7 B 删除到前面7个以空格作为分隔符的单词的开始位置

              d) 删除到某个语句的结尾位置

              d 4) 删除到第四个语句的结尾位置

              d( 删除到某个语句的开始位置

              d } 删除到某个段落的结尾位置

              d { 删除到某个段落的开始位置

              d 7 { 删除到当前段落起始位置之前的第7个段落位置

              d d 删除当前行

              d /t e x t 删除从文本中出现“ t e x t”中所指定字样的位置,一直向前直到下一个该字样所出现的

              位置(但不包括该字样)之间的内容

              d fc 删除从文本中出现字符“c”的位置,一直向前直到下一个该字符所出现的位置(包括

              该字符)之间的内容

              d tc 删除当前行直到下一个字符“ c”所出现位置之间的内容

              D 删除到某一行的结尾

              d $ 删除到某一行的结尾

              5 d d 删除从当前行所开始的5行内容

              d L 删除直到屏幕上最后一行的内容

              d H 删除直到屏幕上第一行的内容

              d G 删除直到工作缓存区结尾的内容

              d 1 G 删除直到工作缓存区开始的内容

              

              修改命令操作

              c l 更改当前字符

              c w 修改到某个单词的结尾位置

              c 3 w 修改到第三个单词的结尾位置

              c b 修改到某个单词的开始位置

              c W 修改到某个以空格作为分隔符的单词的结尾位置

              c B 修改到某个以空格作为分隔符的单词的开始位置

              c 7 B 修改到前面7个以空格作为分隔符的单词的开始位置

              c 0 修改到某行的结尾位置

              c) 修改到某个语句的结尾位置

              c 4) 修改到第四个语句的结尾位置

              c( 修改到某个语句的开始位置

              c } 修改到某个段落的结尾位置

              c { 修改到某个段落的开始位置

              c 7 { 修改到当前段落起始位置之前的第7个段落位置

              c tc 修改当前行直到下一个字符c所出现位置之间的内容

              C 修改到某一行的结尾

              c c 修改当前行

              5 c c 修改从当前行所开始的5行内容

              

              

              .重复上一次修改!

              

              

              表8-4 替换命令

              替换命令操作

              s 将当前字符替换为一个或多个字符

              S 将当前行替换为一个或多个字符

              5 s 将从当前字符开始的5个字符替换为一个或多个字符

              

              

              vi替换使用规则:

              :g/s1/s/s2/s3/g

              第一个g表示对每一个包括s1的行都进行替换,第二个g表示对每一行包括s1的行所有的s2都用s3替换

              s表示替换,s2是要被替换的字符串,他可以和s1相同(如果相同的话用//代替),s3是替换字符串

              

              

              16.

              

              fx

              往右移动到 x 字符上

              Fx

              往左移动到 x 字符上

              tx

              往右移动到 x 字符前

              Tx

              往左移动到 x 字符后

              (注意:以上四个命令中,其中x是键入的字符)

              ;

              分号,配合 f 和 t 使用,重复一次

              ,

              逗号,配合 f 和 t 使用,反方向重复一次

              

              

              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#

              进行切换

              

              20.

              sco 下VI 要在文本前同样的字符加用

              %s/^/要加的内容/g 要在文本后同样的字符加

              %s/$/要加的内容/g

              

              21.

              如何去掉文本中的 ^M 硬回车?不必用binary传回去再ascii传回来的方式,用shell或者unix语句实现。

              

              cat filename |tr -d '/015' >newfile

              不同的unix系统还存在一些其他不同的命令,如:doscp

              sed 也可以实现这个功能.

              

              dos2unix filename filename2

              反之

              unix2dos filename filename2

              

              在vi 中用:$s/^M//g

              ^是crtl-V crtl-M

              

              

              22.如何在“unix命令行”下将一个文件的某字符串用另一个串换掉

              

              sed 's/string1/string2/gp' file1 > file2

              

              23.将/etc/hosts下所有的地址都ping 2次

              

               1 #/usr/bin/sh

               2 #grad /etc/hosts and ping each address

               3 cat /etc/hosts|grep -v '^#' | while read LINE

               4 do

               5 ADDR=`awk '{print $1}'`

               6 for MACHINE in $ADDR

               7 do

               8 ping $MACHINE -n 2

               9 done

               10 done



       

       
    网友: 本站网友     时间:2008-06-16 09:22:42 IP地址:221.224.126.★
   

LINUX系统下VI命令快捷键集合



 光标控制命令

  命令 光标移动

  h或^h 向左移一个字符

  j或^j或^n 向下移一行

  k或^p 向上移一行

  l或空格 向右移一个字符

  G 移到文件的最后一行

  nG 移到文件的第n行

  w 移到下一个字的开头

  W 移到下一个字的开头,忽略标点符号

  b 移到前一个字的开头

  B 移到前一个字的开头,忽略标点符号

  L 移到屏幕的最后一行

  M 移到屏幕的中间一行

  H 移到屏幕的第一行

  e 移到下一个字的结尾

  E 移到下一个字的结尾,忽略标点符号

  ( 移到句子的开头

  ) 移到句子的结尾

  { 移到段落的开头

  } 移到下一个段落的开头

  0或| 移到当前行的第一列

  n| 移到当前行的第n列

  ^ 移到当前行的第一个非空字符

  $ 移到当前行的最后一个字符

  +或return 移到下一行的第一个字符

  - 移到前一行的第一个非空字符

 在vi中添加文本

  命令 插入动作

  a 在光标后插入文本

  A 在当前行插入文本

  i 在光标前插入文本

  I 在当前行前插入文本

  o 在当前行的下边插入新行

  O 在当前行的上边插入新行

  :r file 读入文件file内容,并插在当前行后

  :nr file 读入文件file内容,并插在第n行后

  escape 回到命令模式

  ^v char 插入时忽略char的指定意义,这是为了插入特殊字符

 在vi中删除文本

  命令 删除操作

  x 删除光标处的字符,可以在x前加上需要删除的字符数目

  nx 从当前光标处往后删除n个字符

  X 删除光标前的字符,可以在X前加上需要删除的字符数目

  nX 从当前光标处往前删除n个字符

  dw 删至下一个字的开头

  ndw 从当前光标处往后删除n个字

  dG 删除行,直到文件结束

  dd 删除整行

  ndd 从当前行开始往后删除

  db 删除光标前面的字

  ndb 从当前行开始往前删除n字

  :n,md 从第m行开始往前删除n行

  d或d$ 从光标处删除到行尾

  dcursor_command 删除至光标命令处,如dG将从当产胆行删除至文件的末尾

  ^h或backspace 插入时,删除前面的字符

  ^w 插入时,删除前面的字

 修改vi文本

  每个命令前面的数字表示该命令重复的次数

  命令 替换操作

  rchar 用char替换当前字符

  R text escape 用text替换当前字符直到换下Esc键

  stext escape 用text代替当前字符

  S或cctext escape 用text代替整行

  cwtext escape 将当前字改为text

  Ctext escape 将当前行余下的改为text

  cG escape 修改至文件的末尾

  ccursor_cmd text escape 从当前位置处到光标命令位置处都改为text

 在vi中查找与替换

  命令 查找与替换操作

  /text 在文件中向前查找text

  ?text 在文件中向后查找text

  n 在同一方向重复查找

  N 在相反方向重复查找

  ftext 在当前行向前查找text

  Ftext 在当前行向后查找text

  ttext 在当前行向前查找text,并将光标定位在text的第一个字符

  Ttext 在当前行向后查找text,并将光标定位在text的第一个字符

  :set ic 查找时忽略大小写

  :set noic 查找时对大小写敏感

  :s/oldtext/newtext 用newtext替换oldtext

  :m,ns/oldtext/newtext 在m行通过n,用newtext替换oldtext

  & 重复最后的:s命令

  :g/text1/s/text2/text3 查找包含text1的行,用text3替换text2

  :g/text/command 在所有包含text的行运行command所表示的命令

  :v/text/command 在所有不包含text的行运行command所表示的命令

 在vi中复制文本

  命令 复制操作

  yy 将当前行的内容放入临时缓冲区

  nyy 将n行的内容放入临时缓冲区

  p 将临时缓冲区中的文本放入光标后

  P 将临时缓冲区中的文本放入光标前

  "(a-z)nyy 复制n行放入名字为圆括号内的可命名缓冲区,省略n表示当前行

  "(a-z)ndd 删除n行放入名字为圆括号内的可命名缓冲区,省略n表示当前行

  "(a-z)p 将名字为圆括号的可命名缓冲区的内容放入当前行后

  "(a-z)P 将名字为圆括号的可命名缓冲区的内容放入当前行前

 在vi中撤消与重复

  命令 撤消操作

  u 撤消最后一次修改

  U 撤消当前行的所有修改

  . 重复最后一次修改

  , 以相反的方向重复前面的f、F、t或T查找命令

  ; 重复前面的f、F、t或T查找命令

  "np 取回最后第n次的删除(缓冲区中存有一定次数的删除内容,一般为9)

  n 重复前面的/或?查找命令

  N 以相反方向重复前面的/或?命令

 保存文本和退出vi

  命令 保存和/或退出操作

  :w 保存文件但不退出vi

  :w file 将修改保存在file中但不退出vi

  :wq或ZZ或:x 保存文件并退出vi

  :q! 不保存文件,退出vi

  :e! 放弃所有修改,从上次保存文件开始再编辑

 vi中的选项

  选项 作用

  :set all 打印所有选项

  :set nooption 关闭option选项

  :set nu 每行前打印行号

  :set showmode 显示是输入模式还是替换模式

  :set noic 查找时忽略大小写

  :set list 显示制表符(^I)和行尾符号

  :set ts=8 为文本输入设置tab stops

  :set window=n 设置文本窗口显示n行

 vi的状态

  选项 作用

  :.= 打印当前行的行号

  := 打印文件中的行数

  ^g 显示文件名、当前的行号、文件的总行数和文件位置的百分比

  :l 使用字母"l"来显示许多的特殊字符,如制表符和换行符

 在文本中定位段落和放置标记

  选项 作用

  { 在第一列插入{来定义一个段落

  [[ 回到段落的开头处

  ]] 向前移到下一个段落的开头处

  m(a-z) 用一个字母来标记当前位置,如用mz表示标记z

  '(a-z) 将光标移动到指定的标记,如用'z表示移动到z

 在vi中连接行

  选项 作用

  J 将下一行连接到当前行的末尾

  nJ 连接后面n行

 光标放置与屏幕调整

  选项 作用

  H 将光标移动到屏幕的顶行

  nH 将光标移动到屏幕顶行下的第n行

  M 将光标移动到屏幕的中间

  L 将光标移动到屏幕的底行

  nL 将光标移动到屏幕底行上的第n行

  ^e(ctrl+e) 将屏幕上滚一行

  ^y 将屏幕下滚一行

  ^u 将屏幕上滚半页

  ^d 将屏幕下滚半页

  ^b 将屏幕上滚一页

  ^f 将屏幕下滚一页

  ^l 重绘屏幕

  z-return 将当前行置为屏幕的顶行

  nz-return 将当前行下的第n行置为屏幕的顶行

  z. 将当前行置为屏幕的中央

  nz. 将当前行上的第n行置为屏幕的中央

  z- 将当前行置为屏幕的底行

  nz- 将当前行上的第n行置为屏幕的底行

 vi中的shell转义命令

  选项 作用

  :!command 执行shell的command命令,如:!ls

  :!! 执行前一个shell命令

  :r!command 读取command命令的输入并插入,如:r!ls会先执行ls,然后读入内容

  :w!command 将当前已编辑文件作为command命令的标准输入并执行command命令,如:w!grep all

  :cd directory 将当前工作目录更改为directory所表示的目录

  :sh 将启动一个子shell,使用^d(ctrl+d)返回vi

  :so file 在shell程序file中读入和执行命令

 vi中的宏与缩写

  (避免使用控制键和符号,不要使用字符K、V、g、q、v、*、=和功能键)

  选项 作用

  :map key command_seq 定义一个键来运行command_seq,如:map e ea,无论什么时候都可以e移到一个字的末尾来追加文本

  :map 在状态行显示所有已定义的宏

  :umap key 删除该键的宏

  :ab string1 string2

定义一个缩写,使得当插入string1时,用string2替换string1。当要插入文本时,键入string1然后按Esc键,系统就插入了string2

  :ab 显示所有缩写

  :una string 取消string的缩写

 在vi中缩进文本

  选项 作用

  ^i(ctrl+i)或tab 插入文本时,插入移动的宽度,移动宽度是事先定义好的

  :set ai 打开自动缩进

  :set sw=n 将移动宽度设置为n个字符

  n<< 使n行都向左移动一个宽度

  n>> 使n行都向右移动一个宽度,例如3>>就将接下来的三行每行都向右移动一个移动宽度

  1.编辑模式: 插入/替换 (按INSERT键切换)

  2.[ESC] 指令模式

  3.输入模式 将在指令模式下输入 a

  新增(a,A)

  a:从光标所在位置后面开始新增资料,光标后的资料随新增资料向后移动。

  A:从光标所在列最后面的地方开始新增资料。

  插入(i,I)

  i:从光标所在位置前面开始插入资料,光标后的资料随新增资料向后移动。

  I:从光标所在列的第一个非空白字元前面开始插入资料。

  开始(o,O)

  o:在光标所在列下新增一列并进入输入模式。

  O:在光标所在列上方新增一列并进入输入模式。

  4.存盘/退出

  [ESC] :wq //存盘退出

  :w! //存盘继续

  :q //退出 (源文件未被编辑过可用)

  :q! //强制退出

  5.删除与改修

  [ESC] x //删除光标所在字符

  dd //删除光标所在列。

  r //修改光标所在字元,r后接着要修正的字符。

  R //进入取替换状态。

  s //删除光标所在字元,并进入输入模式。

  S //删除光标所在的列,并进入输入模式。

  6.恢复

  [ESC] u //可以恢复被删除的文字。

  U //可以恢复光标所在列的所有改变。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值