vi命令及删除命令精典

来源:互联网 发布:杭州 酒吧 知乎 编辑:程序博客网 时间:2024/06/11 18:53
从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 /target/replacement/ 查找当前行上目标字符串的第1个实例并删除,然后用字符串replacement替换。只修改当前行上的第1个目标实例 
:g /target/s//replacement/ 查找所有行上目标字符串的第1个实例并删除,然后用字符串replacement替换。修改所有行上目标的第1个实例 
:#,# s/target/replacement/ 在指定的行上进行替换。例如,:7,37 s/march/walk/将查找第7~37行之间的所有文本行,并用字符串walk替换每行中的第1个目标字符串march。所有指定行上的第1个目标字符串修改 
:#,# s/target/replacement/g 在指定的行上进行全局替换。例如,:1,$ s/fun/joyful/g 将在第1行到文件最后一行之间查找目标字符串fun的所有实例并删除,然后用字符串joyful替换。指定行上的目标字符串的所有实例都被修改 
:g /target/s/replacement 查找所有行上目标字符串的第1个实例并删除,然后用字符串replacement替换。所有行上的第1个目标都被修改 
:#,# target/s/replacement/ 在指定的行上进行替换,例如,:7,37 march/s/walk命令在第7~37行之间每个文本行上查找目标字符串的第1个实例并删除,然后用字符串walk替换。所有指定行上的第1个目标字符串都被修改 
:#,# target/s/replacement/g 在指定的行上进行全局替换。例如,:1,$ fun/s/joyful/g将在第1行到文件最后一行之间查找目标字符串fun的所有实例并删除,然后用字符串joyful替换。指定行上的所有目标字符串都被修改 
编辑工具:映射,缩写和标记 
m# 用字母标记当前行。例如,ma命令表示用a标记当前行。即使移动了标记行,它仍然标记为a,可以用a来定位该行 
'# 定位标记行。例如,命令'a将光标移到标记a的行。命令'a,$d将删除从标记行到文件末尾之间的所有行 
:map # command string 在命令模式中输入#时,将其作为一个命令串。例如,:map #o#!/bin/ksh产生一个新的命令模式指令,您输入#时,它被解释为:o打开个新行,并添加文本#!/bin/ksh到文件中。为了在命令中包含回车和其他控制字符,可以在它们的前面用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将文件的缓冲区副本(修改版本)保存到一个新文件 
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删除精典 删除操作 
:%s/r//g 删除DOS方式的回车^M 
:%s= *$== 删除行尾空白 
:%s/^(.*)n1/1$/ 删除重复行 
:%s/^.{-}pdf/new.pdf/ 只是删除第一个pdf 
:%s/// 又是删除多行注释(咦?为什么要说「又」呢?) 
:g/s*^$/d 删除所有空行 :这个好用有没有人用过还有其他的方法吗?(本博按:删除无字符行应用:g/^$/d 删除有一些空格的行应用 :g/^\s*$/d 表示以空格开头(\s)若干个的行)
:g!/^dd/d 删除不含字符串'dd'的行 
:v/^dd/d 同上 (译释:v == g!,就是不匹配!) 
:g/str1/,/str2/d 删除所有第一个含str1到第一个含str2之间的行 
:v/./.,/./-1join 压缩空行 
:g/^$/,/./-j 压缩空行 
ndw 或 ndW 删除光标处开始及其后的 n-1 个字符。 
d0 删至行首。 
d$ 删至行尾。 
ndd 删除当前行及其后 n-1 行。 
x 或 X 删除一个字符。 
Ctrl+u 删除输入方式下所输入的文本。 
^R 恢复u的操作 
J 把下一行合并到当前行尾 
V 选择一行 
^V 按下^V后即可进行矩形的选择了 
aw 选择单词 
iw 内部单词(无空格) 
as 选择句子 
is 选择句子(无空格) 
ap 选择段落 
ip 选择段落(无空格) 
D 删除到行尾 
x,y 删除与复制包含高亮区 
dl 删除当前字符(与x命令功能相同) 
d0 删除到某一行的开始位置 
d^ 删除到某一行的第一个字符位置(不包括空格或TAB字符) 
dw 删除到某个单词的结尾位置 
d3w 删除到第三个单词的结尾位置 
db 删除到某个单词的开始位置 
dW 删除到某个以空格作为分隔符的单词的结尾位置 
dB 删除到某个以空格作为分隔符的单词的开始位置 
d7B 删除到前面7个以空格作为分隔符的单词的开始位置 
d) 删除到某个语句的结尾位置 
d4) 删除到第四个语句的结尾位置 
d( 删除到某个语句的开始位置 
d) 删除到某个段落的结尾位置 
d{ 删除到某个段落的开始位置 
d7{ 删除到当前段落起始位置之前的第7个段落位置 
dd 删除当前行 
d/text 删除从文本中出现“text”中所指定字样的位置, 
一直向前直到下一个该字样所出现的位置(但不包括该字样)之间的内容 
dfc 删除从文本中出现字符“c”的位置,一直向前直到下一个该字符所出现的位置(包括该字符)之间的内容 
dtc 删除当前行直到下一个字符“c”所出现位置之间的内容 
D 删除到某一行的结尾 
d$ 删除到某一行的结尾 
5dd 删除从当前行所开始的5行内容 
dL 删除直到屏幕上最后一行的内容 
dH 删除直到屏幕上第一行的内容 
dG 删除直到工作缓存区结尾的内容 
d1G 删除直到工作缓存区开始的内容  



本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u1/46451/showart_1183825.html
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 插的花蔫了怎么办 紫睡莲的茎软了怎么办 家养的荷花烂叶怎么办 家养的荷花叶老是枯萎怎么办 新买的绣球蔫了怎么办 绣球花被太阳晒阉了怎么办 羊肉香精放多了怎么办 被飞机防腐剂弄到皮肤怎么办 狗吃了脱氧保鲜剂呕吐怎么办 小孩误吃试纸了保鲜剂怎么办 狗狗把保鲜剂吃了怎么办 小孩吃了防潮珠怎么办 狗吃了防潮剂怎么办 洋桔梗有点烂根怎么办 变色球花枯萎了怎么办 桔梗花叶子蔫了怎么办 洋桔梗头垂下来怎么办 洋桔梗花容易折断怎么办 眼睛被火炮炸伤了怎么办 逆水寒包裹满了怎么办 逆水寒包裹里满了怎么办 grim soul包裹满了怎么办 剑三包裹满了怎么办 电脑开机后都是英文怎么办 欠员工工资仲裁老板不到庭怎么办 乔丹拖鞋鞋底硬怎么办 公牛插座电阻烧了怎么办 公牛led灯太刺眼怎么办 公牛插座usb坏了怎么办 墙壁上开关坏了怎么办 刑事二审判决后不服的怎么办 空调外机空间小怎么办 离婚判决生效书丢了怎么办 法院判决离婚对方上诉怎么办 法院判决离婚上诉中级法院怎么办 刑诉中二审发现一审事实错误怎么办 法院判决过了执行期怎么办 刑事犯罪判决后法院未执行怎么办 法院起诉对方不签字怎么办 法院判离婚对方不要签字怎么办 老人不能到法院签字怎么办