vim与gvim技巧6.docx

上传人:b****7 文档编号:10418152 上传时间:2023-02-11 格式:DOCX 页数:18 大小:34.72KB
下载 相关 举报
vim与gvim技巧6.docx_第1页
第1页 / 共18页
vim与gvim技巧6.docx_第2页
第2页 / 共18页
vim与gvim技巧6.docx_第3页
第3页 / 共18页
vim与gvim技巧6.docx_第4页
第4页 / 共18页
vim与gvim技巧6.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

vim与gvim技巧6.docx

《vim与gvim技巧6.docx》由会员分享,可在线阅读,更多相关《vim与gvim技巧6.docx(18页珍藏版)》请在冰豆网上搜索。

vim与gvim技巧6.docx

vim与gvim技巧6

vim与gvim技巧]vim&gvim技巧大全(6)

yy复制游标所在行整行。

或大写一个Y。

   2yy或y2y复制两行。

ㄟ,请举一反三好不好!

:

-)

   y^复制至行首,或y0。

不含游标所在处字元。

   y$复制至行尾。

含游标所在处字元。

   yw复制一个word。

   y2w复制两个字。

   yG复制至档尾。

   y1G复制至档首。

   p小写p代表贴至游标后(下)。

   P大写P代表贴至游标前(上)。

    整行的复制,按p或P时是插入式的贴在下(上)一行。

   非整行的复制则是贴在游标所在处之后(前)。

"ayy将本行文字复制到a缓冲区

    a可为26个英文字母中的一个,如果是小写的话,原先的

   内容会被清掉,如果是大写的话是append的作用,会把内

   容附加到原先内容之后。

"是Enter键隔壁的那一个同上符号(dittomarks)。

"ap将a缓冲区的内容贴上。

    缓冲区的术语在vim称为registers,vim扩充了相当多的

   功能,有兴趣深入的朋友请:

hregisters。

您用d、c、s、

   x、y等指令改变或删除的内容都是放在registers中的。

   例如:

您用dd删除的一行,也是可以使用p来贴上的。

   要是在缓冲区的内容都可以使用p来贴上,不是一定要y起

   来的内容才能用p。

因此您认为p是paste也可以,认为是

   put可能较正确。

5"ayy复制五行内容至a缓冲区。

   5"Ayy再复制五行附在a内容之后,现在a中有十行内容了!

    ㄟ!

不要我一直用a您就认为只有a可以用喔。

26个英文

   字母都可以的,交叉运用下,您会发觉vi(m)肚量不小。

问题来了!

忘记谁是谁的时候怎么办?

:

reg(冒号命令)就

   会列出所有registers的代号及内容。

您现在就试著按看看

   咦!

怎么还有数目字、特殊符号的缓冲区,原来您刚刚删除

   (复制)的内容就预设放在"这个缓冲区,然后依序是

   0,1,2,...9。

也就是说您按p不加什么的话,是取出"缓

   冲区的内容的。

%指的是目前编辑的档案,#指的是前一次

   编辑的档案。

还有其它的呀!

因为没什么重要,就请

   :

hregisters吧!

registers有个"s"结尾,不要搞错了,

  而且Tab的补全键vim也支援的,也就是说您键入:

hregi

   再按Tab键,vim就会帮您补全,按了Tab后发现不是您要

   的,那就继续按,总会出现您要的。

:

-)

Tab补全的功能,elvis也有,但叫出registers列表的命令

   则没有,您得自行记忆在您的脑袋瓜子里。

而且elvis的补全

   能力并没vim强。

天大的指令

   .这是什么?

ㄚ,是英文句点啦!

没错,就是英文句点。

什么意思?

重复前次的编辑动作。

这个指令太高明了,只要是编辑动作(移动游标不算,冒号命令也不算)都可以按英文句点来重复,要重复几次都可以。

例如:

您按了yy,然后按p就会复制、贴上一整行,如果要重复这个动作的话,就可以按.,也可以把游标移到其它地方后再按。

其它dd,dw,r,cw等编辑指令都可以这样来重复。

如果您要重复做某些编辑动作时,千万千万一定要想到有这么一个英文句点重复指令。

ㄚ,拜托啦!

您一定要常用这个指令。

疑难杂症

   那mouse中键的剪贴功能还有吗?

当然还有,不管在console或Xterminal中都照用不误。

当然在windows下的话就不能用了,可以用Shift-Insert来代替。

Ctrl-v在vim中另有作用,在windows下就不必去麻烦它了。

   ㄟ,我从netscape用mousecopy东东过来的时候,常常都搞得天下大乱耶!

要设成:

setpaste,预设是map至F9键的,您要copy之前先按一下F9,copy完后再按一次F9来回复。

这是vim的扩充功能,elvis没有。

那在elvis怎么办?

只好:

setnoai了。

在GUI的版本应不会有这种情形。

    set的功能先不必去理它,往后会有一个单元专门讨论。

朋友!

您睡著了吗?

不要被吓到了,您只要开个档案,亲自操作一下就能心领神会。

那用mouse不是更方便吗?

不见得,yyp来复制贴上一整行比较快,还是用mouse来拉比较快?

您可以试看看。

   寻找/替换

   搜寻、替换的功能几乎是每个编辑器必备的功能,那在vi(m)中有没有特殊的地方呢?

当然有,您忘了,vi(m)是个性十足的编辑器。

最特殊的地方是和规则表示式(regularexpression,简称regexp)结合在一起。

简单的说她是一种pattern的表示法,在执行动作,如寻找或替换,就会依据这个pattern去找,所有符合pattern的地方就会执行您所下的动作。

在这个单元里不讨论regexp,会另立一个单元来探讨,以免搞得头昏脑胀。

目前就暂不使用regexp,您要找什么就直接键入什么就对了。

寻找

   /在c-mode的情形下,按/就会在左下角出现一个/,然后键入您要寻找的字串,按个Enter就会开始找。

   ?

和/相同,只是/是向前(下)找,?

则是向后(上)找。

   n继续寻找。

   N继续寻找(反向)。

   更方便的寻找操作(vim才有)

   *寻找游标所在处之word(要完全符合)。

   #同上,但*是向前(下)找,#则是向后(上)找。

   g*同*,但部份符合即可。

   g#同#,但部份符合即可。

    n,N之继续寻找键仍适用。

替换(substitute)

   :

[range]s/pattern/string/[c,e,g,i]

range指的是范围,1,7指从第一行至第七行,1,$指从第一行至最后一行,也就是整篇文章,也可以%代表。

    还记得吗?

%是目前编辑的文章,#是前一次编辑的文章。

   pattern就是要被替换掉的字串,可以用regexp来表示。

string将pattern由string所取代。

cconfirm,每次替换前会询问。

e不显示error。

gglobe,不询问,整行替换。

iignore不分大小写。

    g大概都是要加的,否则只会替换每一行的第一个符合字串。

   可以合起来用,如cgi,表示不分大小写,整行替换,替换前

   要询问是否替换。

   [实例]:

%s/Edwin/Edward/g

   这样整编文章的Edwin就会替换成Edward。

更进阶的寻找、替换的例子在说明regexp的时候还会再详述。

目前只知道最基本的用法就可以了!

其实光这样就非常好用了。

:

-)

书签功能

   这又是vi(m)的一个秘密武器,简单的说,您可以在文章中的某处做个记号(marks),然后跑到其它地方去编辑,在呼叫这个mark时又会回到原处。

妙吧!

mxx代表26个小写英文字母,这样游标所在处就会被mark。

   `x回到书签原设定位置。

    `是backwardquote,就是Tab键上面那一个。

'x回到书签设定行行首。

    '是forwardquote,是Enter键隔壁那一个。

vim对于书签的扩充功能

   小写字母只作用于单一档案内。

   大写字母可作用于编辑中之各档案间。

   数目字可作用于前次编辑的十个档案。

    数目字的用法比较特殊,'0是回到前一次编辑档案中离开

   前的最后位置,'1则是回到前二次编辑档案的最后位置,

   依此类推。

您不必使用m来标示,vim会自动记忆。

   很玄吧!

其实这是viminfo的功能,您要认真追究的话,

   请:

hviminfo-file-marks。

viminfo关掉,就没这个功能了!

所谓前次指的是前次启动的vim。

:

marks得知目前所有书签的列表。

叫档、存档、紧急回复

   ㄟ,是不是在灌水呀!

怎么开个档也成一个单元?

那您就错了,在vi(m)里叫档的花样可多了,而且又可以多档编辑,各编辑中的档案还可以互通讯息,这里面学问可大著呢!

vim就更骚包了,也学人家档案可以加密,虽说是噱头,但也还满好用的。

    vim+档名

   这样开档后,游标会落在档案最后一行的行尾,在档案屁屁后干什么呢?

方便您可以继续编辑嘛!

   vim+n档名

   游标会落在第n行的行首。

   vim+/string档名

   还记得吗?

/就是寻找指令,这样进入档案后游标就会落在第一个找到的string上,还可以按n继续找string喔!

哦,string还可以使用regexp来表示喔。

   多档编辑

   多档编辑会有两种情形,一种是在进入vim前所用的参数就是多个档(这种情形称为argumentlist)。

另一种情形是进入vim后另外再开其它的档(称为bufferlist)。

不过都可以统称为buffer。

:

n编辑下一个档案。

   :

2n编辑下二个档案。

   :

N编辑前一个档案。

    注意,这种用法只能用于argumentlist的情形。

:

e档名这是在进入vim后,在不离开vim的情形下再开其它档案。

只要您要编辑的档案是在目前目录,Tab补全键还是可以使用。

   :

e#或Ctrl-^编辑前一个档案,用于两档互相编辑时相当好用。

    这种用法不管是argumentlist或bufferlist档案间皆可使用。

还记得吗?

#代表的是前一次编辑的档案。

:

files或:

buffers或:

ls会列出目前buffer中的所有档案。

    在elvis中可使用:

b来叫出buffers。

在buffers中,减号-表示这个buffer并未载入,不过,

   不必担心,载入相当快速的。

加号+表示这个buffer

   已经修改过了。

:

bnbuffernext。

   :

blbufferlast。

    以上两个指令elvis不适用。

:

b档名或编号移至该档。

    在:

ls中就会出示各档案的编号,这个编号在未离开vim前是不会变的。

   这个指令elvis也是可以使用。

当然:

e#编号也是可以的,这样的用法则是所有viclone都通用了。

如果您是使用vim的GUI,那就在功能表上就会有Buffers这个选项,

   可以很容易的知道及移动各buffer间。

:

bd(elete)

   buffer在未离开vim前是不会移除的,可使用这个指令移除。

其实移除她干什么呢?

vim是您在叫用时才会载入的,因此这些buffers并不是像cache一般要占记忆体的。

   :

e!

档名

   这样也是会开档,但会放弃目前编辑档案的改变,否则如果档案已有变动,vim预设是不让您随便离开的。

:

e!

后不接什么的话,代表舍弃一切修改,重新载入编辑中档案。

   :

f或Ctrl-g

   显示目前编辑的档名、是否经过修改及目前游标所在之位置。

   :

f档名

   改变编辑中的档名。

(file)

   :

r档名

   在游标所在处插入一个档案内容。

(read)

   :

35r档名

   将档案插入至35行之后。

   gf

   这是vim的特殊叫档法,会叫出游标所在处的word为名的档案,当然,这个档案要在目前目录内,否则会开新档案。

   哦!

好像有点给他复杂,主要原因是偶文笔不好啦!

不过您何不选个顺手的来用就可以了,选定了,以后就是使用他,这样就不会那么复杂了。

:

-)

   离开

   :

q如本文有修改而没存档,会警告,且无法离开。

(quit)

   :

q!

舍弃所有修改,强迫离开。

   :

wq存档后离开。

纵使档案未曾修改也是会再存一次档。

   :

x也是存档后离开,但如果档案没有修改,则不会做存档的动作。

   ZZ和:

x完全一样,随您高兴用哪一个。

   :

w档名另存他档。

不加档名就是写入原档。

(write)

    :

q及:

q!

是对目前编辑中的档案作用,如果多档编辑的情形

   并不会离开vim,这时可下:

qa或:

qa!

来整个离开vim。

   a就是all的意思。

vim的加密功能

   vim-x[档名]

   这样进入vim后会要求输入密码。

以后加密过的档案由vim开启时会自动要求输入密码。

否则无法开启。

其它的编辑器当然是无法开启的。

进入vim编辑档案中,临时想加密,可用:

X指令。

    小心!

vim一开档就会有个.档名.swp这个档,是为了紧急回复用的,

   一般是在您所开档案的所在目录,这是个隐藏档,ls要有-a参数才看得到,

   您加密的功能并没有作用在这个swp档,因此root还是知道您在

   写些什么关于他的坏话的。

:

-)当然啦!

山不转,路转,路不转,人转,

   您也是可以把swap的功能关掉的:

setnoswf就行了!

但如果您编辑的是

   大档案,则不建议您把swap关掉,这样会很吃记忆体的。

elvis的话,其暂存档是统一集中存放在/var/tmp/*.ses,

   权限是档案所有者始能读写。

vim的早期版本,其*.swp

   档是依原档案的权限来设定的,最近的版本则从善如流,

   已经改成档案所有人始能读写,就是-rw-------啦!

   紧急回复

   vim-r档名,或进入vim后,下:

recover档名,来回复。

大家来学VIM(三)

   各种标示方法及视窗操作

   这个单元多了一种模式,那便是visualmode(以下简称v-mode)v-mode下的反白区(反黑区?

^_^)在本文就统一称为标示区,不知各位是否有更好的中文名称?

ㄟㄟㄟ,视窗操作和标示有什么关系?

为什么摆在这里说明?

ㄚ,是因为这两个单元内容都不多,没地方摆,所以就将凑在一起的啦!

乱点鸳鸯谱就请各位见谅。

标示指令

   v小写v这是属于字元标示(charactervisual),按下v后您就可以移动游标,游标走过的地方就会标示起来。

再按一次v就会结束v-mode。

您用mouse拉出的标示区也是属于这类的标示。

   V大写V这是行标示(linevisual),按下V后会整行标示起来(包括空白的部分),您移动上下键,会标示多行。

mouse连按三次左钮,也是属于此类的标示。

再按一次V就会结束v-mode。

    mouse按两次左钮是标示一个word。

Ctrl-v这是方块标示(blockvisual),可纵向标示矩形区域。

再按一次Ctrl-v就会结束v-mode。

    结束v-mode的方式亦可使用Esc键,或一使用Ctrl-c。

   windows系统下Ctrl-v是复制键,可以使用Ctrl-Q来替代。

 d删除标示区内容。

   y复制标示区内容。

    ㄟ…是要先标示好才按的。

"ay还能不能用呢?

当然可以,

   这样就会把标示区内容存于a缓冲区中。

可以用"ap来贴上。

Shift->标示区内容向右移一个Tab。

   Shift-

   可设成dark或light,这是两种不同的highlight颜色设定,详见$VIMRUNTIME/syntax/synload.vim。

不过您要更动颜色的设定,最好是设在~/.vimrc或~/.gvimrc中,原始档最好不要去动她。

    ㄟㄟㄟ,你从没提过$VIMRUNTIME好不好!

其实这是最近版本的vim

   为了不至安装新版本时把旧版本的一些设定或macro档干掉,

   所以$VIMRUNTIME就是$VIM/vimxx,xx就是版本号码啦!

   例如您使用的是vim5.6版,那么就是$VIM/vim56。

backup(bk)

   是否要backupfile。

预设不打开。

   writebackup(wb)

   在写入档案前先备份一份,和backup的作用不尽相同,请:

hbackup-table。

预设是打开的,所以您如果不要backup,那要关掉的是这个项目,而不是backup。

但请先检查一下您编译时是不是有编译进去,请:

ver。

   backupdir(bdir)

   设定存放backupfile的目录。

预设在所编辑的档案之所在目录。

   binary(bin)

   设在编辑二进位档状态,这是防止存二进位档时把EOL也写进二进位档,那就会悔不当初,如果是图档将会无法再观看,如果是可执行档就无法执行了!

因此预设是off。

    elvis会自动判断是否为二进位档,而且会分成左右两半,左半部会以16进位的方式显示,

   右半部则是以ASCII的方式来显示。

browsedir(bsdir)

   浏览档案的目录,GUI版本始有。

预设是上一次浏览的目录。

就是GUI版本功能表上的[File]->[Open]会打开的目录。

   cindent(cin)

   写C时很好用,indent比一般敏感,专为C程序码而设。

预设off。

编辑C/C++code时会自动打开。

   cmdheight(ch)

   状态列的行数,预设一行,建议设成两行。

   compatible(cp)

   设为和原始vi相容的状态,vim的扩充功能会被抑制。

预设off。

   confirm(cf)

   各种确认动作。

预设off。

   directory(dir)swap档存放的目录。

前面单元已有说明。

   fileformat(ff)

   这是写入档案时置放EOL(endofline)的形式

   dos是以0D0A来断行。

   unix是以0A来断行。

   mac是以0D来断行。

   预设以各系统平台而定,在Linux当然是unix形式。

   fileformats(ffs)

   可指定多个,会依载入的档案形式来调整ff。

例如:

setffs=unix,dosff=unix则预设为unix格式,但如读入的是dos格式的档案,会自动调整为dos格式,这样存档时就会以dos格式存档(状态列会显示)。

此时如要改成unix格式,可setff=unix然后存档就会转成unix格式,反之亦然。

   注:

如果不这样设,也就是您不管ff或ffs都设成unix,那读入dos格式的档案时在每行尾会出现^M这个字元(就是0D啦!

)这时纵使:

setff=unix也来不及了!

只好:

%s/^M//g来消去这个^M。

ㄟ,还记得怎么替换吗?

就是把^M换成没有啦!

而且^M怎么打出来的还记得吧!

翻一翻前面的单元吧!

   Hey,你怎么知道是0D呀!

好吧!

告诉您一个密秘,您把游标移到^M那个位置,然后按ga在状态列就会显示10,16,8进位的值。

其它的字元也是可以如此显示。

a就是ascii的意思。

但这是vim的扩充功能,elvis没有。

   elvis纵使载入dos格式的档案,也是会自动把^M隐藏起来。

   ignorecase(ic)

   寻找时不分大小写,这对中文会造成困扰。

预设off。

   incsearch(is)

   加强式寻找功能,在键入patern时会立即反应移动至目前键入之patern上。

预设off。

   hlsearch(hls)

   寻找时,符合字串会反白表示。

预设off。

如果您是使用vim的预设的vimrc档的话,会设在F8键来切换。

   textwidth(tw)

   是一种wordwrap的功能,从左起算之固定每行的最大字元宽度。

超过此宽度就会自动折行,这可是真的折行,也就是说在折行处会插入EOL。

预设是0,也就是没有wordwrap的功能。

   wrapmargin(wm)

   和textwidth作用相同,只是是从右视窗边向左算起要几个字元起折行。

预设是0。

textwidth与wrapmargin的功能目前并不适用于中文,打中文还是您自行按Enter吧!

   wrap

   这也是折行功能,可是只是萤幕效果的折行,实际上并没有插入EOL。

   wrapscan(ws)这和折行没有关系,是指寻找时,找至档尾时,是否要从档首继续找。

预设是要。

   paste

   这是防止在做剪贴时位置会不正确,前面单元已有说明。

   ruler(ru)

   会在状态列显示游标所在处之行列状态,预设不打开,但建议打开。

最右边之代号的意义如下:

   Top档案第一行在萤幕可见范围。

   Bot档案最后一行在萤幕可见范围。

   All档案首尾皆在一个萤幕范围内。

   如非以上三种情形,则会显示相对百分比位置。

   statusline(stl)

   状态列显示的格式,使用预设就可以了,如果您想骚包一下的话,那就请您:

hstl。

   shiftwidth(sw)

   指由>>移动整行内容时,一次移动的字元宽度,一般是使用Tab的值,但可由这个设定来改变。

   tabstop(ts)

   一个Tab键宽度。

预设是8个字元宽度。

最好不要随便改,以免您写的东西由其它编辑器来阅读时造成困扰,为解决这个问题,vim有一种softtabstop的机制,在下一节会详细说明。

   showcmd(sc)

   在状态列显示目前所执行的指令。

   showmode(smd)

   在状态列显示目前的模式,例如是Insertmode或是Visualmode。

当然平常的normalmode(commondmode)是不显示的。

   viusalbell(vb)

  

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 军事

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1