vi大全

news/2024/11/30 12:36:44/
交换两个字符位置
ddp
上下两行调换
J
上下两行合并
dG
删除所有行
d$
从当前位置删除到行尾
y$
从当前位置复制到行尾, 如果要粘贴到其他地方 p 就可以了

:ab string strings
例如 ":ab usa United States of America" ,
当你在文见里插入 usa 时
United States of America 就蹦出来了
:g/^/m0
把文件内容反转
:map keys new_seq
定义你当前 键盘命令
:set [all]
vi or ex 的编辑状态
如 显示每行 :set nu
:X
然后系统会提示输入密码, 输入密码后存盘退出, 保存后就加密了
下次编辑时使用vi -x filename, 系统会提示你输入密码

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

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

:%s/old_word/new_word/g
这个指令是于在整个文件中替换特定字符串

将光标移到第n行,按下 mk
将光标移到第m行,按下 "ay'k
即将第n到m的行存到a寄存器,以此类推,b,c........寄存器等

不好意思,补充一下,想粘贴到某处,直接将光标移到某地,按下 ‘ap 即可

删除命令操作
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行内容

替换命令操作
s 将当前字符替换为一个或多个字符
S 将当前行替换为一个或多个字符
5 s 将从当前字符开始的5个字符替换为一个或多个字符


vi替换使用规则:
:g/s1/s/s2/s3/g
第一个g表示对每一个包括s1的行都进行替换,第二个g表示对每一行包括s1的行所有的s2都用s3替换
s表示替换,s2是要被替换的字符串,他可以和s1相同(如果相同的话用//代替),s3是替换字符串

fx
往右移动到 x 字符上
Fx
往左移动到 x 字符上
tx
往右移动到 x 字符前
Tx
往左移动到 x 字符后
(注意:以上四个命令中,其中x是键入的字符)
;
分号,配合 f 和 t 使用,重复一次
,
逗号,配合 f 和 t 使用,反方向重复一次

建议谁把 :set all 出来的参数及其用法说明一下。注意注明UNIX平台,我发现几个平台下有些差异。

加密码我在8 上(bsh) 实验成功 所以大家最好还是加上 环境!!

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 的环境选项 , 以上均测试过

怎么没有介绍标记的,做标记对那种大的程序文件阅读十分有帮助。
建议大家使用。

标记文本
  mchar   用字母char标记当前光标的位置
  `char   移至char所标记处
  'char   移至char标记所在行的开头处
  "     移至当前行上一次所在位置(在光标移动之后)――一个双引号
  ''    移至当前行上第一次所在位置的行的开头处(在光标移动之后)――两个单引号

.重复上一次修改!

大家都说了这么多了,我也来说两句
在当前屏幕中
H 跳到第一行
M 跳到中间一行
L 跳到最后一行

同时vi多个文件时,CTRL-SHIFT-6回到上一个文件,在本次vi的文件和上次vi的文件之间切换。其实就是一些文档写的 ^^
但是我发现一个BUG:在用CTRL-SHIFT-6切换到上一个文件后,用:args查看多文件vi状态时,屏幕底部仍然显示目前vi的是刚才的文件。
(在HP-UX,Solaris,AIX上通过)

还是使用
:e#
切换比较好,呵呵

%s/^/要加的内容/g 要在文本后同样的字符加
%s/$/要加的内容/g vi的使用确实太多,大家多多总结交流!!!

追加到缓冲区
对于已经有内容的缓冲区,可以继续追加内容在其后面,例如:
"Ad4w 删除光标后4个字,并附加到缓冲区a
"Ay) 取样从光标到文件尾的内容,并附加到缓冲区a
"K3yy 取样从光标所在行起的3行内容,并附加到缓冲区k

注意:在追加缓冲区的命令中,原缓冲区的名字一定要大写,才能将内容追加进去,否则是覆盖原缓冲区的内容。追加内容在原缓冲区末尾另起一行。

清理掉DOS文本中的^M可以在:1,$s/^M//g,其中^M是CTRL+V, CTRL+M。


删除从当前行开始到最后一行的所有内容
:.,$d
在:命令行模式下,首先可以确定命令的范围
.表示当前行;数字表示行号,如1表示第一行,2表示第二行;$表示最后一行
范围用,分隔
然后用命令
d表示删除,y表示复制......大家都知道的

最后说一句,%表示全文
:%d
是删除全文

给“南非蜘蛛”补充一下,hehe
在:命令行模式下,首先可以确定命令的范围
.表示当前行;数字表示行号,如1表示第一行,2表示第二行;$表示最后一行
范围用,分隔
...


慎用:$d

:$d 只是删除最后一行嘛,用错了还不算最坏的结果,呵呵

请教aix,ksh下:
一行>=2048个字符时,无法显示,怎么办?


在vi中好像应该没有什么办法了,这是vi的Program Limits中的Maximum Line Length限制。试一试用UltraEdit读读看吧

有的环境不能用uedit
可以折行吗?

折行
:set wrapmargin=4

下面引用由bjchenxu在 2002/09/05 09:07am 发表的内容:
折行
:set wrapmargin=4


怎么解释?结果如何?

不行呀
A line cannot be longer than 2048 characters.

我的只能解决显示问题,如果说vi里不能存放这么多字符,就比较麻烦了
另外问一句,2048个字符已经够长了,为什么要放更多的,没准我们可以从源头上解决问题

老外的程序的log文件,有些行就这么长,以至于影响了后面行的显示;
more,pg等可以折行

我还是不会用:X加密,能不能说的详细一点,:X后,提示输入key:然后呢?mark what 后输入什么呢,下次如何在打开呢?more 可以正常看吗?
xiexie!

你使用的什么平台的UNIX呢?我从来没有见到mark what出现过啊
more是不能正常看的,用vi -x filename,然后输入密码就可以了

好像再另存不了不加密的了

用 :wq 或者 :wq! 另存

请高手指点迷精:vi中如何在每行的倒数第二个字符处插入一个字符??

把Tab全部换成回车,应该怎么作啊?
:1,$ s/ /
/g
不行

^M (Ctrl+V+M)就是回车。

vi加密不同的unix可能不同.
俺在HP-UX下,用X加密的文件只输key(密钥).
vi -C 文件名,便会要求输入密钥,如正确,便打开了.

littletiger的意思是不是这样:
以HP-UX为例
1、加密
vi file
:X
(Are you sure?(y/n)[n]:)回答y
输入密码回车以后再保存,就加密成功了
2、解密
vi -C file 或者 vi -x file
在 Key: 后面输入密码进入file
:X
(Are you sure?(y/n)[n]:)回答y
直接回车以后再用 wq 或者 wq! 保存,就把file解密成功了

:set number
显示行号

:g/$/s// ABC/g
:g/^/s//def /g
在文本每行的头和尾添加字符串.

用vi进行coding时的使用技巧:
用ctags命令对当前目录下的c源程序扫描,生成tags文件
$ ctags *.c
这样,在vi里通过命令
:ta fun_name
就可以直接打开函数fun_name所在的文件,并将光标置于函数开头


:n,n1 d
n和n1都是行数, d是删除这些行 .表示当前的行。
: n
n是行数,直接转到n行。
: r 文件名
把文件添加到当前的文件中
:n,n1 w 文件名
把从n行到n1行写道另外一个文件中


查找:
在一个单词上用*,就向下查找此单词,#是向上
用/查找hello,就不会查找到hello_world(用此替换也很好用)

替换:
如有一文件,内容为:
aa
bb
cc
dd
用:%s/.*/printf("& is :%d
",&)/
文件内容为变为:
printf("aa is :%d
",aa)
printf("bb is :%d
",bb)
printf("cc is :%d
",cc)
printf("dd is :%d
",dd)
&为查找到的内容
用:~为重复上一次替换

用系统命令编辑:
如有一文件,内容为:
333
222
334
444
111
553
554
233
运行命令:%!sort 文件内容为:
111
222
233
333
334
444
553
554
用此方法可以使用许多系统命令进行编辑,大家可以灵活运用

其他特殊用法:
用q: 看一看有什么
用? 可以编辑你用过的命令
程序中在一个调用函数(如:printf)上用K,可以直接调出printf的帮助

ctrl+f向下翻页,ctrl+b向上翻页(对于telnet上去的时候比较有用)


1. vi中设置tab键的空格数:
:set ts=4
:set sw=4
将此两句话加到当前用户目录的文件.vimrc中,这样当前用户用vi的时候就会启动该设置

2.拷贝:
将第2行到第9行的字copy到第11行
:2,9 co 10
将第2行到第9行的字move到第11行
:2,9 m 10

3.设置行号:
:se nu
取消行号:
:se nonu

4.当前行与下一行换位置:ddp

5.当前字与后面的字换位置:xp


用vi替换文件中的字符串

  在vi界面下使用命令
  :%s#/usr/bin#/bin#g
  可以把文件中所有路径/usr/bin换成/bin。也可以使用命令:
  :%s/usr/bin/bin/g
  其中“”是转义字符,表明其后的“/”字符是具有实际意义的字符,不是分隔符。


请问 vi 中的删除缓冲区是怎么回事?

看到有一个资料说到:
“vi还有有编号的删除缓冲区。撤消命令只能恢复上一次的删除,当且仅当这个删除是最后一次操作。但是,vi可以把最近9次删除的内容都放入9个编号从1到9的缓冲区内。最近一次删除保存在缓冲区1,次近的在缓冲区2,依此类推。例如,"2p可以放置第二个删除缓冲区中的内容。”
但是我没有操作成功,请教各位。


既然是vi的问题,我义不容辞

准备文件test
1
2
3
4
5

将光标定位在5上,连按5次dd
然后键入
"5p
"4p
"3p
"2p
"1p
看看发生了什么

明白了?


要注意"

谢谢你们的解释!
再问,是否只有删除的整行可以保存在删除缓冲区中?比如删除的字符呢?

字符也可以,用整行只是为了让你好学
自己试试吧,找葫芦画瓢吧

wo 我照呢说得作的 可是恢复的是5个1 啊 怎么回事 (solaris8)

比如在一行中连按5次dw,会将5个词依次放入1~5的寄存器中吗?我没有试验成功,总提示寄存器为空。

[这个贴子最后由goodboy在 2002/08/22 09:29am 编辑]

bjchenxu,能否把VI使用高级技巧的方法给大家讲一讲呀:)
很多的,比如:怎么一个文件中的几行保存到另外一个文件中了,
或者把另外一个文件的插入到指定内容的行后面了或者我在vi中拷贝
A文件的某5行(Esc下5yy拷贝),然后再:e b文件,怎么把A文件的5行拷过来?
然后又怎么回到原先的A文件中?


高级技巧太多太多,建议大家找本版valentine斑竹要书看,呵呵
你说的几个问题我先回答一下:
1. 将一个文件中的几行保存到另外一个文件中了
1.1 $vi file1
1.2 :3,5 y a
1.3 :e file2
1.4 "ap

2. 将另外一个文件插入到指定内容的行后面
2.1 $vi file1
2.2 :/regularexpress/ r file2

3. 两个文件的切换和拷贝
3.1 $vi file1 file2
3.2 :3,5 y a
3.3 :e#
3.4 "ap
3.5 :e#

在vim里面查看man页面

在进入vim后按“:”号,输入
source $VIMRUNTIME/ftplugin/man.vim
然后再按“:”号,输入
nmap K :Man
然后在vim里面输入你要的命令,在这个命令上按K,就可以看到经vim处理过后的man页。

用vi在整个文件的各行或某几行的行首或行尾加一些字符串

  $vi file
  :3,$s/^/some string 在文件的第一行至最后一行的行首插入“some string”。
  :%s/$/some string/g 在整个文件每一行的行尾添加“some string”。
  :%s/string1/string2/g 在整个文件中替换“string1”成“string2”。
  :3,7s/string1/string2/ 仅替换文件中的第3行到第7行中的“string1”成“string2”。
  注意: 其中s为substitute,%表示所有行,g表示global。

用vi删除大段的内容

  首先利用编辑命令“vi file”打开文件, 然后将光标移到要删除的行处按Ctrl+G显示行
号,再到结尾处再按Ctrl+G,显示文件结尾的行号。
  例如:
  :23,1045d
  假定2次得到的行号为23和1045,则把这期间的内容全删除, 也可以在要删除的开始行和
结束行中用ma、mb命令标记,然后利用“:'a,'bd”命令删除。

用vi实现“另存为”功能
  $vi file
  :w /tmp/1
  保存所做的所有修改,也可以将其中的某一部分修改保存到临时文件。
  如果仅仅把第20~59行之间的内容存盘成文件/tmp/1,我们可以键入如下命令:
  :20,59w /tmp/1

用vi在一个新文件中读其他文件的内容
  $vi file
  :r /etc/passwd 在打开的文件file中光标所在处读入/etc/passwd
  :%s/:.*//g 删除/etc/passwd中用户名后面的从冒号开始直到行尾的所有部分。
  您也可以在指定的行号后读入文件内容,例如使用命令:
  :3r /etc/passwd
  从新文件的第3行开始读入 /etc/passwd的所有内容。
  我们还可以使用以下方法删掉文件中所有的空行及以#开始的注释行。
  $cat squid.conf.default | grep -v '^$' | grep -v '^#'

用vi拷贝一个文件中的文本并粘贴到另一个文件中
  $vi file1 file2
  然后在vi界面下:
  yy <-在文件1的光标处拷贝所在行
  :n <-切换到文件2 (n=next)
  p <-在文件2的光标所在处粘贴所拷贝的行
  :n <-切换回文件1

使用vim对被编辑文件加密
  在VIM当中要对所编辑的文件进行简单加密,可以在命令行模式下键入“:X”(无括号,
只有冒号和X)然后在提示“Enter the encrypt key”时输入口令字串就可以加密了。但是别
忘了要保存哦!保存的时候会发现在屏幕底部有“[crypted]”这样的字样。 下次打开该加密
文件会要求您输入口令字串,这个总该记得的吧?

设置vim自动显示行号
  在每个用户的主目录下,都有一个 vi 的配置文件".vimrc"或".exrc", 用户可以编辑它,
使这些设置在每次启动 vi 时,都有效。
  例如,加入如下设置行:
set nu 显示行号
set nonu 不显示行号
set ic 查找时不考虑大小写
set noic 查找时考虑大小写

在vi里搜索关键字

  当你用vi打开一个文件后,因为文件太长,如何才能找到你所要查找的关键字呢?在vi里
可没有菜单-〉查找,不过没关系,你在命令模式下敲斜杆(/)这时在状态栏(也就是屏幕左下
角)就出现了 “/”然后输入你要查找的关键字敲回车就可以了。
  如果你要继续查找此关键字,敲字符n就可以继续查找了。值得注意的是“/”是向下查找,
而“?”是向上查找,而在键盘定义上“?”刚好是“/”的上档符。

用彩色的vi写程序

  修改$HOME中的.vimrc,把color值设为true
  把环境变量VIMRUNTIME设成vim的路径名
  例:/usr/share/vim
  在vi中键入
  :syntax on回车
  :so $VIMRUNTIME/syntax/java.vim回车(现在版本的vi支持无数程序语法色彩档,都在
syntax/下,看一眼吧:))
  如果不喜欢所用的xterm背景色,可以用xterm -bg LightBlue(或其他喜欢的颜色)启动,
或者修改.Xresouce的xterm background项。
  vi -o xxx.java xxxx.java

vi

例如:Esc键在vi中输入ctrl+v与Esc为^[
请问Delete键在vi中如何输入?

d
空一行

[Ctrl+V][Del]

输这个键有什么用啊

输不进去

我想在shll里自动telnet到另一台机器终止.profile(自动运行了程序)执行,好执行我在shll中的一些命令。

输不进去

这种情况是因为DEL在您的终端上被定义成某个中断键,中断是被操作系统
优先处理的。
使用stty -a 可以显示出DEL被哪个中断所用。
以下是两种解决方法:
1。使用“stty 中断名 新的中断键”形式改变中断键设置,然后调用vi,再使用ctrl+V的方法。如:stty intr ^E;vi
2。使用一个shell脚本myvi:stty raw ;vi $*;stty -raw
调用myvi
还有一种变通的解决方法,DEL键的ascii码应该是^?,0x7f,

http://www.ppmy.cn/news/212653.html

相关文章

中国移动归属地区号大全

北京市 010上海市 021天津市 022重庆市 023香港 852澳门 853河北省 邯郸市 0310 石家庄 0311 保定市 0312 张家口 0313 承德市 0314 唐山市 0315 廊坊市 0316 沧州市 0317 衡水市 0318 邢台市 0319 秦皇岛 0335浙江省 衢州市 0570 杭州市 0571 湖州市 0572 嘉兴市 0573 宁波市 …

vi 大全

vi大全2004-04-23 15:18 pm作者&#xff1a;作者来自&#xff1a;无名vi大全xp 交换两个字符位置 ddp 上下两行调换 J 上下两行合并 dG 删除所有行 d$ 从当前位置删除到行尾 y$ 从当前位置复制到行尾, 如果要粘贴到其他地方 p 就可以了 :ab string strings 例如 ":ab usa …

硬件防火墙品牌排名

硬件防火墙品牌排名&#xff1a; Juniper 华为赛门铁克 思科 H3C 天融信 山石网科 飞塔 联想网御 NETGEAR 启明星辰热门防火墙排名&#xff1a; Juniper SSG-140-SH 华为赛门铁克USG2210 CISCO ASA5510-K8 H3C SecPath U200-CS-AC 天融信NGFW4000-UF(TG-5130) Hillstone SG-…

联瑞Bypass网卡:筑牢网络安全“防火墙”

防火墙作为应用在两个或更多网络之间的网络安全设备&#xff0c;对网络封包分析判断是否存在威胁&#xff0c;并进行处理&#xff0c;对网络安全的重要性不言而喻。没有防火墙&#xff0c;网络安全将失去一大助力&#xff0c;甚至网络信息将遭受更密集的网络攻击。在实际应用中…

2007年世界顶级防火墙排名

2007年世界顶级防火墙排名 排名的官方网站: http://personal-firewall-software-review.toptenreviews.com/ 第一名 ZoneAlarm Pro &#xff08;Zone Labs公司出品的网络防火墙&#xff09; ZoneAlarm Pro 是一款优秀的网络防火墙软件&#xff0c;使用很简单&#xff0c;界面易…

下一代防火墙供应商对比

下一代防火墙供应商对比 2011年03月15日00:00 来源&#xff1a; TechTarget中国 作者&#xff1a;Scott Sidel 编辑&#xff1a; 王冠 评论&#xff1a; 0条 本文Tag&#xff1a; 防火墙 网络安全 安全 下一代防火墙产品的供应商有很多&#xff0c;但是他们一直都在为谁的技术最…

企业固态和普通民用固态 及intel企业固态命名规则

本文旨在根据个人固态购买经验写一篇文章帮助大家挑选固态&#xff0c;若资金充足当然还是推荐购买全新固态而非大船固态。本文也绝非软文&#xff0c;这里只讲型号不讲购买店家。本人也是一名工科在读博士生&#xff0c;平时科研外的爱好也就是捣鼓一下数码产品、四处溜达及摄…

「网络安全」2020年十大最佳开源防火墙保护您的企业网络

开源防火墙最出名的地方是通过过滤入站和出站流量来保护网络不受威胁&#xff0c;并确保网络安全。 每当我们谈到开源防火墙时&#xff0c;首先映入我们脑海的是“完全免费”。“不过&#xff0c;让我来解释一下&#xff0c;开源这个词是指在许可下发布的软件&#xff0c;它允许…