linux工作技能第一发:vi

不知道为啥,为啥排版这么丑呢。
ok,说起第一次接触linux,大学上操作系统课,实训课也不知道为啥就成了在linux下写hello world了,还记得是red hat,觉得界面还挺漂亮,哈,那时候已经久闻vi这东西了,老师也没说我们用啥编码,我跟一个朋友也不知道怎么就乱找一通,也不知道怎么就敲了个vim出来,这啥呀,打字都打不出来,问老师,老师道,要进入insert模式呀,然后我就按了一下"insert"键,哟呵,老师真牛逼,果然能输入了,噼里啪啦的输了一大堆无脑的程序段子,老师啊,怎么编译运行啊,这下可好,老师说先保存退出,教我按:qw,按了老半天,"老师,不行呀",老师道"不可能呀",跑来给我们亮了两下神操作,牛,还真退出去了,不过代码没了,今天想想那老师果然够牛的,:wq都能记反来,我们成了受害者呀。就这样,第一次给vi虐了,不玩了,没意思。
此后,也看过网上亮出的vi功能图,整个键盘密密麻麻啥玩意儿啊,老子不待见,装逼才玩vi呢,虽然老子爱装逼,也不带这么装的。后面也有各种大神说什么emacs牛逼,我觉得肯定也是装逼的,要不然那么复杂,还不如用记事本呢。
若干年后,我发现我错了,在vs配着va用了一些时月,我发现虽然功能也的确够强大,在各种文档游走还是挺舒畅的,但总是觉得缺点啥,比如我要跳到本行行末,最土的方法就是右手向右移动放在方向键吧,一格一格按,有时候还真累啊,后来先进了,知道了End键,效率提升了许多啊,但总觉得人越来越懒,手不愿动,这个问题苦恼了挺久的,自从某天看见某大神的神操作,我发现我弱爆了,原来vi是这样用的~~~好了,废话不多说,还是把最近到处学来的懒操作记录一番吧。

1、光标移动
除了传统的方向键,vi让你右手不用移动便能移动光标,更别说使用鼠标,linux压根鼠标也没用嘛。
h,j,k,l分别代表着←,↓,↑,→。就习惯这样的操作,愚笨的我稍费了些神,一不小心就移错了。这几个键就是为了懒人准备的。
除了上面几个基本安静,vi的移动操作确实够丰富了,普通模式的0直接移动光标到了行首,^移动到行首第一个非空字符,跟正则表达式一样呢,相对应的行尾呢,熟悉正则表达式的朋友肯定知道是$了,那行尾第一个非空字符呢,经我多方查找, g_便是了,其实呢自己也能凑出来首先移动到行尾,然后再回退一个单词,再到单词尾就大功告成了,也就是$be,其实$ge也是可以的。看自己记得住哪个吧。反正可以不用依赖鼠标,也不用大幅度移动娇贵的手了。事实上,我用了那么久的va,也不知道有没有这样的操作呢。
好了,其实上面那些功能已经很吸引我了,但人是贪婪的,当我只想移动一个单词或几个单词时候,重复的敲h,l?nonono,先按个数字再按会有惊喜,哇塞,居然这么神奇,当时我觉得真吊啊,但后来,哎,这单词几个字母我数不过来呀,老毛病又犯了,ok,程序员都懒,设计者已经把你能懒的地方都想到了,可见他才是真的懒啊。w,W,我把他当做是word的第一个字母来记得,但w,W的区别自己一时半会还是没记明白,因为大部分时间基本效果一样呀,hello-world,光标在h那儿,按一下w,发现vi把-也当一个单词了,假设按W了,他没把-当回事儿,有点明白了,我的理解就是w就是程序员儿用的,他面向的是大多数程序语言中变量命名规范,数字,_,字母。这三个货组成并连在一块儿我当成一个单词,这时候w,W没差别,假设有其他字符乱入,不好意思都是按单词处理,W这货就只认空格儿,上面的例子改成hello_world的话就不一样了,他左右都是一个单词。有向前了,肯定有向后了,b,B,对了。。back嘛,向后移动一个单词,大小写区别和w,W一样咯。 要移动多个单词,前头说的数字加指令,好用的打紧啊。
跟单词有关的指令还有一个e,E,移动到当前光标所在单词的词尾,上面$be,$ge都用到了e兄啊。大小写,你懂的。
要上下移动,数字加j,k就好了,移动到文件头部,输入一个超大的数字,999999k,果然到了,999999j,一下就到了文件尾部,查看日志经常跳到文件尾部看错误的呀。我真的是太聪明了。哈哈哈,直到有一天,我认识到了自己简直就是个2b。
gg直接跳文件头,G直接跳文件尾,简直羞死人了。
还有什么移动没,绝逼有,只是我记不起来了,记起来了或者学了再来补吧。毕竟指令多入牛毛,上面的也够我应付平时工作了。
2、插入
从普通模式进入插入模式,从大学的那位大牛老师教的insert进入外,还有i,I,a,A,o,O。
都是好用的打紧的指令啊,i使用率算是最高吧,当前光标位置进入插入模式,a呢,是当前光标位置后面一个字符进入插入模式,相当于l向右移动了一格再按了个i,这个a用的也挺多的。
I,A这两家伙比较靠谱,使用率高,因为他们既移动了又进入了插入模式。相当于用了上面移动的招式再按下了一个i或者a。
比如我要对某一样加注释,I//就好了,方便省事呀。比起^i//爽吧。。要在行末添加东西的情况不少吧,按一个A,"已经开始了么?不,已经结束了,哈哈"。
3、删除
backspace,可以在插入模式用,还有许多可以在普通模式下。
x与del用法差不多,删除后面的字符,3x删3个,4x删4个,那么问题来了,我要删整行咋办,好办,dd轻松搞定,那我要删除一个单词怎么办,也好办dw呀,delete word,一试,果然能删,不过删的是光标位置到下一个单词开头位置,哦哟,跟w应的是b,db一下试试,哦哟,果然,删到了单词头部,留了个尾巴,很长时间,为了能删除当前单词,我的操作是,b dw,然后再i,继续编写,当时也没想那么多,觉得还凑合。久而久之,我想肯定有方法,果不其然,方法来了,删除光标位置的单词方法就是,在dw中间加一个单词,i或者a。这两个指令和之前的插入指令没啥关系,但用途非常大啊。可以和n多指令结合,简直是道美味佳肴啊。
i到底是啥的缩写我也不知道,我个人理解是in,本人小学英语水瓶,在什么什么里就这么记了,a呢就死记成了all,丢人丢人,全部的意思。diw,daw都删除了光标所在整个单词,但是有区别,假设单词后面是空格的话,diw不会删除后面的空格的,daw则比较强势,把空格也全部删除了。
d$是删除到行尾,d^删除到行首,dG删除到文件末,dgg删除到文件头,各种指令组合。秒啊。
 还有个指令,就是修改,也可以归纳到删除里嘛,比较人家真的把东西给删了,而且他是删完直接进入插入模式,犹如行云流水。把上头的指令改改就能用了,把d全部改成c,好用好用,还剩了个进入插入模式的步骤。
 哟西,来讲讲a,i其他地方的用法。在代码中,经常要修改(),[],"",‘‘,{}这些配对符号中的内容吧,比如你要修改某个函数参数列表,比如fun(int a,int b),你要改成其他参数,只要光标在()范围内,好办,di)就直接删除()内的内容了,不过还是在普通模式,按下i,就可以修改了,哎呀。何不如直接ci)呢,直接开始修改,快人一步,你还可以vi),v是选择开始指令,()内的内容还在,但都反白了,这时候你可以x删除,或者y复制。其他的括号啊,引号啊,以此类推。

a的话呢就是连括号一起操作,要删一起删要选一起选,all嘛。
 多层嵌套的括号((a+b)*c),这样的情况,假设你光标在+上,怎么游刃有余的操作里层或者是外层括号内容呢,比如此时要选择(a+b)*c,不用说肯定要用的i,但仅仅用vi)此时只会选择a+b,那有啥方法呢,要告诉他要操作两层,v2i),试试看,果然,v2a),整个结构全部选上了,好神奇。

a,i就是一对好帮手,帮助我做了很多以前做不到的事。

4、复制,粘贴

y是复制,p是粘贴,y复制我不知道诶,p的话应该是paste吧。

经常要做复制,在vs中之前复制一行一直都是光标位置啥都不管,ctrl+c,一行复制下来,还复制了个换行符,挺方便的,vi提供的操作更简单,一个手指操作,yy,复制一行,2yy,复制光标所在位置开始的2行,又完胜了vs+va啊。

再来跟a,i兄弟搭配,yaw可以复制当前光标所在单词以及单词后的空格,yiw也复制单词,但不包括后面的空格就是了。

东西复制好了,在哪儿粘贴好呢,这可头疼了,当初第一次老会复制错位置,p的话会把复制好的东西粘贴在光标所在行的下一行,P的话会把复制好的东西粘贴在光标所在行的上一行。

5、区域选择

上面介绍过了,就是v了,按下v,然后上下左右可以选择区域,任意的移动指令都能起作用,不管是按单词选择还是按行选择。

按V的话则是只能操作上下移动了,因为他是以行为单位。

vim中按下ctrl+v,可以进行特地区域选择,很好玩,在vs中,一直是通过alt+鼠标来框选的,这里提醒一下,linux的话ctrl+c没问题,假设是windows下的gvim,因为和粘贴冲突了,他取而代之的指令是ctrl+q,在vs中使用viemu插件就纳闷了很久。强迫症的孩子伤不起啊。

6、撤销,重做

就是基本每个软件都有的undo和redo

在vs里用习惯了ctrl+z和ctrl+y,vi中undo的指令是u,redo是ctrl+r。不用赘述了。

7、杂七杂八的

什么:wq :w :q :q! :sp xxx  在windows下基本用不到。。脑袋目前就想到这么多,这些对于日常工作足够用了,那够写一本书的vi手册,我还是不看了。哈哈,好啦,睡觉吧


本文出自 “Sai” 博客,请务必保留此出处http://saicom.blog.51cto.com/4355280/1612545

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。