• RSS订阅
  • 交换链接
  • 首页

Jeffrey’s Blog

Web&P2P系统架构及优化


vi技巧收集

May 24th, 2006

zwo4_vi.gif

 

 

vi_png.jpg

网上看到的,感觉不错。
附:其它技巧
1. %s#/usr/bin#/bin#g(把/usr/bin换成/bin)

QUOTE:

Vi的替换命令:
:ranges/pat1/pat2/g
其中
: 这是Vi的命令执行界面。
range 是命令执行范围的指定,可以使用百分号(%)表示所有行,使用点(.)表示当前行,使用美元符号($)表示最后一行。你还可以使用行号,例如10,20表示第10到20行,.,$表示当前行到最后一行,.+2,$-5表示当前行后两行直到全文的倒数第五行,等等。
s 表示其后是一个替换命令。
pat1 这是要查找的一个正则表达式
pat2 这是希望把匹配串变成的模式的正则表达式
g 可选标志,带这个标志表示替换将针对行中每个匹配的串进行,否则则只替换行中第一个匹配串。

进入vi的命令

进入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:(注意是数字零)光标移至当前行首

$:光标移至当前行尾 屏幕翻滚类命令

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:在反方向上重复上一次搜索命令

:s/p1/p2/g将当前行中所有p1均用p2替代

:n1,n2s/p1/p2/g将第n1至n2行中所有p1均用p2替代

:g/p1/s//p2/g将文件中所有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的输出结果放到当前行

寄存器操作

“?nyy:将当前行及其下n行的内容保存到寄存器?中,其中?为一个字母,n为一个数字

“?nyw:将当前行及其下n个字保存到寄存器?中,其中?为一个字母,n为一个数字

“?nyl:将当前行及其下n个字符保存到寄存器?中,其中?为一个字母,n为一个数字

“?p:取出寄存器?中的内容并将其放到光标位置处。这里?可以是一个字母,也可以是一个数字 ndd:将当前行及其下共n行文本删除,并将所删内容放到1号删除寄存器中。

set命令

显示行号 :set number

将文件设为只读 :set readonly

使vi在“:n”和“:!”命令之前都自动保存文件 :set autowrite

显示用户处在什么模式下 :set showmode

:set noshowmode就是关闭此显示。

vi环境变量还有很多。了解它们,将给用户使用vi带来更多方便。用户可以通过vi的联机帮助查到对应的环境变量的详细作用。

vi 技巧

1)用指定快捷键如ctrl+j输入#注释符
在”:”提示符下,使用定义快捷键的命令map,然后同时按下ctrl+v,然后再按下ctrl+j,再输入空格,再输入要定义的命令,命令是按”i”键后输入”#”,再输入”esc”键. :map ^B i#<ESC>

2)定义输入快捷方式,如输入max会自动显示为max@zhangjianfeng.com
在”:”提示符下,使用命令ab, :ab max max@zhangjianfeng.com

vi ~/.vimrc #快捷键对应的文件,如果把这个文件拷到其它主机上,也可使用定义的快捷键

3).给文件加密
在命令行状态:下,执行命令X,然后输入密码即可,ps:一般脚本加密码后无法自动执行了

++在vi中搜索了一个单词,该单词以高亮显示,看起来很不舒服,怎么能将它去掉
在vi的命令模式下输入:nohlsearch就可以了。另外可以在~/.vimrc中写上下面的语句就会有高亮显示:
set hlsearch
加上下面的语句就不会有高亮显示:
set nohlsearch

vi其它技巧整理:

1、交换两个字符位置xp;
上下两行调换ddp;
上下两行合并 J;
从当前位置复制到行尾y$
如果要粘贴到其他地方 p 就可以了
删除所有行 dG
从当前位置删除到行尾d$

2、:X
保存后就加密了
:X
然后系统会提示输入密码
输入密码后存盘退出

下次编辑时请使用
vi -x filename
系统会提示你输入密码,呵呵
例:以HP-UX为例
a、加密
vi file
:X
(Are you sure?(y/n)[n]:)回答y
输入密码回车以后再保存,就加密成功了
b、解密
vi -C file 或者 vi -x file
在 Key: 后面输入密码进入file
:X
(Are you sure?(y/n)[n]:)回答y
直接回车以后再用 wq 或者 wq! 保存,就把file解密成功了
顺便提一下:加密后的脚本不能被解释执行!
c、:X(uppcase X)
key:……
后用wq!存盘,不能用:x,否则加密失效
打开时:
vi -x file
key: …..

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

4、单个字符替换用r;
覆盖多个字符用R;
用多个字符替换一个字符用s;
整行替换用S;
:%s/old_word/new_word/g;
这个指令是于在整个文件中替换特定字符串 ;

5、H 跳到第一行
M 跳到中间一行
L 跳到最后一行
将光标移到第n行,按下 mk
将光标移到第m行,按下 “ay’k
即将第n到m的行存到a寄存器,以此类推,b,c……..寄存器等
想粘贴到某处,直接将光标移到某地,按下 ‘ap 即可

6、删除命令
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 删除直到工作缓存区开始的内容

7、修改操作
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行内容
折行
:set wrapmargin=4

:set number 加行号!

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

8、替换操作
s 将当前字符替换为一个或多个字符
S 将当前行替换为一个或多个字符
5 s 将从当前字符开始的5个字符替换为一个或多个字符
注:vi替换使用规则:
:g/s1/s/s2/s3/g
第一个g表示对每一个包括s1的行都进行替换,第二个g表示对每一行包括s1的行所有的s2都用s3替换
s表示替换,s2是要被替换的字符串,他可以和s1相同(如果相同的话用//代替),s3是替换字符串

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

10、
标记文本
mchar   用字母char标记当前光标的位置
`char   移至char所标记处
‘char   移至char标记所在行的开头处
“     移至当前行上一次所在位置(在光标移动之后)――一个双引号
”    移至当前行上第一次所在位置的行的开头处(在光标移动之后)――两个单引号
ctrl+f向下翻页,ctrl+b向上翻页(对于telnet上去的时候比较有用)
shift+4到本行末尾,shift+6到本行开头

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

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

12、在:命令行模式下,首先可以确定命令的范围
.表示当前行;数字表示行号,如1表示第一行,2表示第二行;$表示最后一行
范围用,分隔
然后用命令
d表示删除,y表示复制……大家都知道的
最后说一句,%表示全文
:%d
是删除全文

13、恢复前几次操作应用什么命令呀? :em52:

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

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

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

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

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

这些是我比较常用的,并且我觉的很有用的命令,敬请指教。

16、、:n1,n2w filename (把行N1-N2之间内容写入新文件FILENAME)
:.=(显示光标所在行的行号)
u(恢复上一次的操作)
:!(shell-command 执行SHELL命令的操作)
:n (直接把光标定义到N行)
:line1,line2mline3: 将line1–line2之间的内容移到line3下 相当于word的剪贴
:line1,line2tline3:将line1–line2之间的内容copyline3下,相当于word的粘贴

17、由于vi 是建立在 EX 上的 所以 当键入 : 时就来到了 EX 命令状态
:ab string strings
例如 “:ab usa United States of America” ,
当你在文件里插入 usa 时
United States of America 就蹦出来了
:map keys new_seq
定义你当前 键盘命令
:set [all]
vi or ex 的编辑状态
如 显示每行 :set nu

18、
3、把文件内容反转:g/^/m0/ ——〉这个m0怎么解析 呢 ?

valentine 解释:
xp和ddp 应该理解为删除一个字符(x)和删除一行(dd),然后在p(paste),这样便不需记新命令了.
把文件内容反转 (按行反转)
:g/^/m0/ 应该是 :g/^/m0 无最后的/
m–>move
0–>line No 1
试想,从第1行开始,每一行依次放在文件的开头处,会有什么结果???

##一些环境配置

set nocp
该命令指定让 VIM 工作在不兼容模式下, 如果使用”:set cp”命令打开了兼容模式开关的话, VIM 将尽可能地模仿 vi 的操作模式.推荐大家使用VIM 的不兼容模式, 可以在你的 .vimrc 中的第一行写上: “set nocp”

set ru
该命令打开 VIM 的状态栏标尺, 能即时显示当前光标所在位置在文件中的行号、列号, 以及对应的整个文件的百分比

set hls
搜索时高亮显示被找到的文本

set is
搜索时在未完全输入完毕要检索的文本时就开始检索。

syntax on
打开关键字上色

set encoding=cp936
设置当前字符编码为简体中文。 这里还有一段能够自动判断文件的 encoding,
自动选择合适的编码的 .vimrc 代码, 感兴趣的话可以放到自己的配置文件中使用:
” Encoding settings
if has(”multi_byte”)
” Set fileencoding priority
if getfsize(expand(”%”)) > 0
set fileencodings=ucs-bom,utf-8,cp936,big5,euc-jp,euc-kr,latin1
else
set fileencodings=cp936,big5,euc-jp,euc-kr,latin1
endif

” CJK environment detection and corresponding setting
if v:lang =~ “^zh_CN”
” Use cp936 to support GBK, euc-cn == gb2312
set encoding=cp936
set termencoding=cp936
set fileencoding=cp936
elseif v:lang =~ “^zh_TW”
” cp950, big5 or euc-tw
” Are they equal to each other?
set encoding=big5
set termencoding=big5
set fileencoding=big5
elseif v:lang =~ “^ko”
” Copied from someone’s dotfile, untested
set encoding=euc-kr
set termencoding=euc-kr
set fileencoding=euc-kr
elseif v:lang =~ “^ja_JP”
” Copied from someone’s dotfile, unteste
set encoding=euc-jp
set termencoding=euc-jp
set fileencoding=euc-jp
endif
” Detect UTF-8 locale, and replace CJK setting if needed
if v:lang =~ “utf8$” || v:lang =~ “UTF-8$”
set encoding=utf-8
set termencoding=utf-8
set fileencoding=utf-8
endif
else
echoerr “Sorry, this version of (g)vim was not compiled with multi_byte”
endif

set sw=4
自动缩进的时候, 缩进尺寸为 4 个空格.

set ts=4
Tab 宽度为 4 个字符。

set et
编辑时将所有 Tab 替换为空格。

set sm
显示括号配对情况。 打开这个选项后, 当输入后括号 (包括小括号、中括号、大括号)
的时候, 光标会跳回前括号片刻, 然后跳回来, 以此显示括号的配对情况。

colorscheme darkblue(blue,shine….)
配色方案

++vim小技巧
fx 往右移动到 x 字符上 #Fx为向左, 其中x为键入的字符,下同
tx 往右移动到 x 字符前 #Tx为向左
;分号,配合 f 和 t 使用,重复一次
,逗号,配合 f 和 t 使用,反方向重复一次
H 跳到第一行 M 跳到中间一行 L 跳到最后一行
:%!sort 排序
:set list/:set nolist:显示/隐藏不可见字符;
Ctrl+g 显示行相关信息
u(恢复上一次的操作)
:s/^.*$/==>&<==/在行的首尾分别加上==>和<==
vi +/pattern filename:打开文件,并将光标置于第一个与pattern匹配的串处
do:删至行首
Ctrl+u:删除输入方式下所输入的文本 搜索及替换命令
:1,2 co 3 将1行到2行之间的内容拷贝到第3行下
:1,2 m 3 将1行到2行之间的内容移至到第3行下
:nohlsearch 不高亮搜索结果, set hlsearch 高亮搜索结果
:set is 搜索时在未完全输入完毕要检索的文本时就开始检索。
syntax on/off 打开/关闭关键字上色
set sm 显示括号配对情况

++在文件尾读入另一个文件中内容
:$r  filename

Last modified at: Tuesday, June 17th, 2008 04:04:19 pm
Trackback URL: http://blog.zhangjianfeng.com/article/319/trackback

给本文打分: 1 Star2 Stars3 Stars4 Stars5 Stars (1 votes)
Loading ... Loading ...
Tags: vi, vim, 技巧
2006/05/24 | 阅读全文 | 系统管理 | Email This Post | Print This Post | 1,341 views |
收藏到网摘: Del.icio.us Google书签 Digg Live Bookmark Technorati Furl Yahoo书签 Facebook 百度搜藏 新浪ViVi 365Key网摘 天极网摘 和讯网摘 博拉网 POCO网摘 添加到饭否 QQ书签 Digbuzz我挖网

Related Post

  • Tuesday, June 17th, 2008 -- 不错的vi-vim键盘图(中英文双版)
  • Thursday, August 10th, 2006 -- vim for windows
  • Friday, April 21st, 2006 -- windows部分技巧收集
  • Friday, March 31st, 2006 -- linux tips 技巧笔记

3 Responses to “vi技巧收集”


Leave a Reply

  • :em04:
  • :em18:
  • :em17:
  • :em10:
  • :em01:
  • :em05:
  • :em15:
  • :em07:
  • :em03:
  • :em13:
  • :em09:
  • :em12:
  • :em11:
  • :em06:
  • :em16:
  • :em14:
  • :em02:
  • :em08:

« crontab应用详解
使用.htaccess保护目录 »

    最新文章

    • Subversion的用户自助修改口令实现(linux测试通过)
    • SLES10-SP1+Apache-2.0.63+SVN-1.4.6安装配置笔记
    • [音乐欣赏]A place nearby
    • 不错的firefox插件---鼠标手势mouse gestures
    • 一些相克食品
    • oracle一次数据迁移笔记
    • 不错的vi-vim键盘图(中英文双版)
    • xen安装及配置笔记
    • Multiple network cards and bridges in Xen[zz]
    • 从LiveJournal后台发展看大规模网站性能优化方法[zz]

    评分最高文章

      • 今天下载的一个CHM文件,打开时右边的内容看不到,提示“该页无法显示”。
      • linux日志服务器配置笔记
      • Legato networker学习笔记(杂)
      • linux tips 技巧笔记
      • [BT下载]2006韩剧-葡萄园的那小伙儿
      • 我家的金吉拉
      • 卡巴斯基病毒库离线更新方法
      • 忽悠姐妹花主题曲下载
      • 轻轻松松把 Apache 配置安全
      • 北京IDC机房介绍

    随机文章:

    • 一个gvim配置文件,用于gvim显示中文文件乱码。
    • awk的学习
    • apache的一些设定
    • 北京大中、国美、苏宁以及永乐电器城的相关资料
    • 由于域控制器时间不正确导致的几个问题,并解决..
    • linuxdos(Explore2fs),一个windows系统下查看linux文件的工具
    • 最新消息:@live.cn和@live.com邮箱注册方法
    • [单菜谱]皮蛋瘦肉粥[图文]
    • 从LiveJournal后台发展看大规模网站性能优化方法[zz]
    • [06.01.04][

    最新评论

    • very good :em02: ,I like very much !!...
    • :em03: :em13: :em15: :em07...
    • 北京电信通有四个机房1惠普机房 2中...
    • :em04: :em18: :em17...
    • 结婚的好日子啊8月10...
    • c2950-1-1(config)# snmp-server trap-source FastEt...
    • :em16: :em16: :em16: :em16: :em16: :em16: :...
    • :em01: :em07: :em04: :em17: :em10: :em18: :...
    • 我是天称座 :em14: :em15: :em03: :em02: :...
    • [...] 前面一段:1.3.6.1.4.1. 可以查看这...


    邮件订阅  
  • Categories

    • 个人日志 (15)
    • 休闲娱乐 (79)
    • 应用服务 (86)
    • 影音娱乐 (10)
    • 电脑网络 (78)
    • 站点日志 (19)
    • 系统管理 (242)
    • 英语学习 (15)
    • 衣食住行 (41)
    • 资料共享 (28)
  • 工具网址

    • 天气预报
    • 常用电话
    • 疾病查询
    • 在线翻译
    • Alexa排名查询
    • IP信息查询
    • 邮箱图标生成
    • 我的Firefox插件
  • 友情链接

    • linuxの飘扬
    • winter的平凡生活
    • 伤感星星的天空
    • 回忆未来[张宴]
    • 存储部落
    • 扶凯Blog
    • 沐宇春风
    • 爱MySQL中文网
    • 狗.车.志
    • 非礼勿视
  • Tags

    • 下载 优化 使用 免费 北京 升级 学习 学习笔记 安装 工具 技巧 日志 最新 服务器 笔记 英语学习 菜谱 视频 解决 调优 软件 运程 配置 配置文件 食物 2007 apache blog dreamhost freebsd Legato linux mysql networker oracle php RAID5 RedHat sendmail shell squid suse Ubuntu windows wordpress

Jeffrey's Blog is powered by WordPress 2.3.1 and Unnamed 1.22
Entries (RSS) and Comments (RSS) Admin 京ICP备06038449号

Podcast Powered by podPress (v8.8)