`
nnwq
  • 浏览: 203580 次
社区版块
存档分类
最新评论

我心中的vi 编辑神器

阅读更多

    使用vi 开发软件,已经快三年多了,在三年期间,有辛酸,有痛楚,有纠结,更有收获。在这之前,也有使用过vi编辑器,那个时候,只用了vi的几个基本的命令,如yy,dd之类的。更多的时候,是项目要上线了,到linux上修改配置文件,偶尔用一用。

    还记得2010年的时候,我在客户那边用java开发一套管理系统,编译器当然是用的明星级的eclipse。到了项目上线的时候,我的老大,要到线上部署环境,他之前对linux系统不熟悉,在linux上修改一些配置文件颇为费劲,然后就问,谁会使用vi,我当时就说,我会使用vi。老大让我在linux服务器上修改了一些文件,感觉还不错,于是就把我带着,到客户的机房参观了一下,让我熟悉一下环境及机器的配置,说以后项目上线这些事情,叫我一并参加,我当时还挺高兴的,觉得这次vi为我挣取到了一次很重要的机会。在这次项目上线中,我把vi的基本操作又熟悉了一遍,觉得自己长进不了。

    到2011年的时候,我有幸遇到我人生中的一个贵人,是他让我彻底改变了我对vi的认知。记得那是2011年的一个夏天,上面的领导叫我开发一个工作流的项目,并给我安排了一个产品经理。因为是小项目,所以项目组就两个人,我一个,还有一个是那个产品经理。我负责编码,那个产品经理负责做设计,验收等工作。当时那位王经理看了我的程序及使用的开发工具后就说,你可以尝试使用vi开发java,我当时听了后非常的震惊,vi还可以写代码吗?我印象中的vi就是用来修改配置文件等等。我当时难以相信他说的话。从这以后,我陆续发现有其它的同事使用vi来开发软件,最让我震惊的是,公司里有几个在国外大公司,如google,hp,oracle呆过的大牛,一直都是用vi开发软件的,我发现他们可以用vi编写各种语言的code,如c/c++,java,go,python等等。我当时就感觉,这么牛的人,都在使用vi,说明这个编辑器真有它的好处,于是我试着用它来写代码,我尝试用vi写了一些简单的代码,发现使用它太痛苦了,就我掌握的一些vi命令,很难完成代码的编写工作,于是我放弃了。继续使用eclipse作为开发工具。有一次,那王经理叫我演示一下我写的代码,因为使用eclipse开发,如果演示的话,一般会直接在eclipse中启动java虚拟机,然后在下面的console窗口查看输出,你懂的。王经理就说,我建议你做成命令行的形式,这些大家都可以使用。我当时就说,eclipse下开发的java代码,不方便做成命令行的形式,我们一般都是直接在eclipse下调试的。他笑了笑说,如果一个不懂java的人来使用你开发的东西,你说叫他如何使用。于是他帮我把代码修改了一下,引入了一些包,做成了以命令行的方式启动的形式。在这个期间,这位王经理直接用vi编辑了我的代码,三两下就修改完了。我当时就问他,vi不是用来修改配置文件的吗?难道也可以用来开发代码?他笑了笑说,你们现在使用的eclipse,我们从来都不用,eclipse这个IDE太笨重,又不方便,经常使用,让人的思维变得迟钝,让人变懒。最好用的工具,就是70,80年代,那些大牛开发出来的编辑器,那才是真正程序员的编辑器。你如果经常使用vi写code,你就会觉得你对代码的理解变得更深刻,你对计算机的理解会更深刻。他最后还说了一句,你用eclipe编的代码,在vi下查看,非常的乱,代码整洁,就是你的脸面,以后一定要注意。听了他了话之后,对我的触动非常的大,我又联想到公司的世界级的程序员都使用vi编辑器,让我觉得,我必须得用vi来开发。不过,我当时心里还有是疑问的,为什么说使用eclipse会让我变笨,变懒,而用vi,让人对代码理解得更深刻。于是我在网上搜索了大量关于使用vi的心得,都没有找到我想要的东西,大部分人使用vi都是把它配置成IDE,让它有提示的功能。

    过了一段时间,我开发的工作流已经接近尾声了,我也被调到其它的项目组开发其它的项目去了,和这位王经理,接触没有原来那么多了。在空闲的时候,我还在网上搜索使用vi的好处。终于有一天,我和同事们聊起了vi编辑器的事情,其中的一位同事就说,在我来之前,公司的老板曾经要求所有的软件工程师,必须得使用vi开发软件,当时公司全民学习vi,场面是相当的壮观。推行了一个月不到,员工是怨声载道,都说vi的开发效率低,门槛太高了。听了这些话之后,我为之一惊,心想,老板曾经是雅虎的架构师,连他都这么说,这次我得必须学习用vi写code了,我们几个同事还说,我们大家一起学习vi.于是,我和几位同事天天作分享vi的使用等心得。我用vi写了几天的code之后,发现虽然慢点,但对vi的使用已经入门了。使用vi三个月后,我基本上可以用vi写任何的代码了。

   我学习vi的心理路线上非常曲折的,自己曾经的纠结,迷茫,让我走了不少的弯路。我下面就来谈谈使用vi开发的一些好处。我重点从两个方面来阐述。一方面是使用vi编写代码方便的地方,另一方面是从使用vi之后,对代码,对计算机的理解上来说。

   vi编辑器的方便之处

    1. vi的快捷键,有好几百个,如果能熟悉运用,基本上可以手不离键盘。我今天在这里不讲vi的快捷键,但是我要提醒大家的话,在使用vi的时候,一定记得要使用j,k,l,h这四个键来移动。我看到许多使用vi的人,还用的方向键来移动光标的。为什么要使用j,k,l,h这四个键呢,大家来想想,我们的手指是离这四个键近呢,还是离方向键近呢。基于这一点,我就觉得vi专门为程序员设计的编辑器,想想这些vi的发明人,想得是多么的周到。说到这里,有人就要问了,那为什么在vi中,从编辑状态,切换到命令状态,为什么是esc键呢,esc键离我们的手指太远了,不方便。对于这个问题,我要说的是,在70年代,键盘和我们现在使用的键盘不一样,那个时候的esc键,在我们现在键盘的tab键的位置,出于使用习惯的考虑,使用esc键还一直延用至今。

  2. 使用vi,你的两手,可以不用离开键盘,就可以完成代码的编辑及编译。非常的方便。我们可以和eclipse对比一下。我们在使用eclipse的时候,虽然它也有快捷键,但是,它的快捷键,没有vi的强大,所以,大部分时候,我们得借助鼠标来完成代码的编辑工作, 于是,我们可以观察使用eclipse程序员,基本上是右手一会在键盘上,一会在鼠标上,右手在键盘和鼠标上来回移动切换,光凭这一点,它就已经输给了vi编辑器了。

   3.你可以用vi编辑器开发各种语言,如java,python,c/c++,bash shell,go,js,等等,这样,你就省了为了使用某种语言,去费心找开发工具的烦恼了。vi可以通吃。有人又要说了,eclipse也可以啊,它不光可以开发java,还可以开发c/c++,python呢。是的,eclipse的确可以开发其它的语言,大家如果用过eclipse开发过c/c++,python的话,大家都明白,eclipse对java的支持是最好的。不过话又说回来,对于一些新的语言,如go语言,eclipse目前有对应的插件支持吗?

   4. vi属于GNU家庭的成员,它继承了unix的设计哲学,并将unix设计哲学发扬光大。它只做一件事,并把它做到最好。我们想想eclipse这些IDE,论编辑功能,没有vi强大,轮构建功能,没有ant,maven强大。eclipse是什么都做,什么都没有做到最好。

vi 隐藏背后的力量  对代码,对计算机体系的理解

   在我使用vi的过程中,除了使用方便之外,让我对代码,对整个计算机的体系理解得更深刻

   1. 我在使用vi时,不配置它的代码自动提示的功能,代码自动提示功能,使用eclipse及vc++的人,应该非常的熟悉,代码提示给我们带来方便的同时,也让我们失去了许多的东西。有人说,没有代码提示功能,就没有办法开发代码了。代码提示,从某种层面上来说,让我们变笨了,过了依赖提示,让我们太被动。如果没有代码提示功能,当我们遇到一个陌生的API,我们就得去查看docs,在看docs的同时,你有可能还关心一下其它的API,这样方面知识的积累,根据我的经验,文档最多看三遍之后,API的参数及返回值,你已经烂熟于心了。因为你记得了这个API,你在开发的时候,当你想设计其它的API时,你就会去借鉴之前java中大牛设计的API的参数及结构。久而久之,你也成了大牛了。当你感慨大牛设计的API的精妙时,你就会去看看这个API的源代码,有一些想深入理解,学习的冲动。这种状态非常适合我们去代码的理解,知识的积累。我们想一想,我们在上学年代,特别是学习语文的时候,老师会叫我们找一些美文背诵,这样你在写作时,就会借鉴大家的文笔,自然你的文章就会写得好。我们学习程序道理也一样啊,当我们心里有了足够的大牛的代码时,我们也成了大牛了。

  2. 使用vi,非常适合学习新的编程语言。就拿我最新学习python来说,我因为我熟悉vi,就可以直接用vi来编写python的代码,轻车熟路,如果你不熟悉的话,你可能第一件事是找一个合适的编辑器,然后配置一堆的环境,这样非常的浪费时间,如果我们配置成功了还好说,如果配置失败了,非常的影响我们的学习热情。当我们学习一些新事物时,如果没有在每一时间内上手,以后再来学习的话,可能性就比较小了。我开始用vi写python,不懂的APi太多了,我去查阅文档,顺便积累一些API。这种学习方式,让我在短时间内学会了python的使用。

  3. 使用vi,许多东西都不是现成的,都要自己去理解代码的一些细节,这些细节可能在IDE中被隐藏掉了,对于一个程序员来说,理解了许多细节,让你对OS,对其它的软件设计了如指撑,这样提高就非常的快了。

5
8
分享到:
评论
22 楼 troyconder 2013-11-22  
我天天用vim 但是我还是离不开eclipse 生活不能只有编程 vim不是IDE 当你把它变成IDE的时候应该用IDE 而不是VIM ,以前的人使用VIM 是因为他们没有IDE 没有图形界面,在当时VIM和其他编辑器的区别,相当于eclipse和记事本的区别,跟是不是大神没有关系,而那些人现在不用IDE是因为他们的习惯。效率的社会做有效率的事,不要为了浪费时间而浪费时间。
21 楼 shangql 2013-11-21  
兰州烧饼啊!! 集成开发环境能够出现,就是有市场,有需求,既然出现就是有道理的出现,不然大家都用记事本吧,这个比vi功能还少呢,大家就可以自创语言了。
20 楼 s929498110 2013-11-21  
呵呵,你在vi上面加上各种高级IDE所拥有的高级功能,然后沾沾自喜的说:IDE弱爆了,vi才是神器。

古有东施皱眉效西施,今有博主吹vi效大神。

我只想问:博主你知道大神为什么是大神么? 把vi和大神绑定,犹如把邋遢和艺术家绑定一样幼稚可笑。

工具、语言都是浮云。
19 楼 xpf7622 2013-11-21  
   我总觉得如果你一辈子写代码,用这个还行。
   另外java,python, php,js各种函数,你都能记下来么? 如果都能记下来,我觉得这个人不用搞开发了,去搞高端科研算了。
   我曾经找一个能有代码提示的小编辑器,notepad++只能提示第一层。要是能提示整个代码
,我就坚持用它写Java.
  
18 楼 mistbow 2013-11-21  
id.alex 写道
只举一个例子
一个贫血的 Entity ,有 10+ 个属性时,
get/set 方法. 难道也要一个个用 vi 敲上去么?

试过用做一些 jse, socket 程序还行.
写 web 程序... 饶了我吧...
:cry:


可以自己写个插件
17 楼 henghengdh 2013-11-21  
这种贴也能上首页,iteye的编辑不会是也只用vi吧。
还记得无意中看到的一句话:人跟动物的区别就在于人会使用工具。
16 楼 parthenon 2013-11-21  
虽然我也喜欢vi,但我觉得用vi写java程序简直就是自虐。当有几十个人同时往项目里提交代码的时候,你怎么能记住别人写的方法叫什么名字?Java世界里的方法名一个比一个长
你用vi去维护一个之前你没有参与过的项目试试看:cry:
我同意@firewalls的意见,在IDE里使用模拟vi的插件。
15 楼 popopop 2013-11-21  
你用eclipe编的代码,在vi下查看,非常的乱,代码整洁

这个你举个栗子我看看?
14 楼 firewalls 2013-11-21  
eclipse装个vi插件,vrapper很好用。
13 楼 yds3300376yd 2013-11-21  
white_crucifix 写道
其实我挺理解楼主的想法,因为我有也有过相似的历程。大体上同意,不过有几点分歧:

我其实不赞成用vim写java。1.创建目录 2.import 3.方法名
这三点其实是java和其他语言差别非常大的地方,我们可以用vi来写perl,写python,写node,甚至写erlang,因为这些语言不像java要com.dir1.dir2.dir3,因为IDE的优化使得这可以像是一个目录,而不是4个目录。第二是import,java的import要比其他语言都要长,其根本原因还是java得目录嵌套特点。第三方法名,如果你看一下其他语言,包括c语言,你会发现很大一部分方法名都是单词缩写,短,好记,编码迅速,而java呢,大部分都是full name,java为什么要用System.out.println来做输出语句,而不像c的printf,像ruby的puts,像erlang的io:format,当然有人会因此吐槽java,不过我更相信这是java更语义化的表达。
    事实上,我们在指责IDE的时候,我们并不了解IDE创造出来的初衷。IDE,真的不是为傻子而创造出来的,IDE的出现是为了满足大规模工业化编程的需要。IDE并不是让不会写代码的人也能写代码,而是让会写代码的人写的更快。
    vi,我也很喜欢vi,很多时候我们说vi好,并不完全指的vi本身好,而是指的整个终端环境(linux环境),不像windows,linux下是很容易写脚本的,无论是shell,还是perl,甚至python,简短,调用cli更方便。我们开发过程中会遇到一大堆零零散散的事情,这时候一个优秀的脚本,能让你一个回车尽享人生繁华。无论download,还是compile,还是deploy,或者中途需要改个名,切个字符串,只要你愿意,你可以写任何程度的脚本,这一点,在IDE里的确做不到,IDE本身有一定程度的自动化集成,但,不能再高了。
    另外,很多人得意的hjkl,虽说是有道理的,但是特别有趣的是,这一点却是世间少有的结果导致原因的历史事件。因为vi创造者当时用的机器是ADM-3A terminal,而这个设备的上下左右是和hjkl合在一起的,说其根本原因的确是因为键盘  不  够  宽 =,.=

    最后,回答一下前面有的朋友的疑惑,不用ide怎么来编译。事实上,我觉得如果真不用IDE来写java,基本都要用到ant或者maven,当然也可以是gradle等等,这些都是编译部署工具,配置好以后,都是一键的。而且在linux上,ctrl R搜索一下历史命令,然后一个回车,就开始跑了,这的确要比在IDE上鼠标去点某个图标甚至菜单来的爽快(甚至像我这种喜欢给编辑窗口留最大区域的人每次要把最小化的tool窗口打开再点击里面的功能……虽然尽量用快捷键了,但是有的快捷键是基于特定窗口的,比如Intellij的Maven……,每次要点都很蛋疼)

多谢,受教了~
12 楼 spiniper 2013-11-21  
用vi 高端,大气,上档次,看上去专业,让那些不懂计算机的佩服的五体投地。

其实这种东西,看习惯的,VI确实是开发神器,它将键盘运用到极致了,但是这个玩意的诞生可以说也是一种无奈,毕竟90年代前,是木有鼠标的。
作为一个个人,用vi能够从某种方面提高技术,以及开发效率,不过作为团队和公司,vi应该是不提倡的,他入门太高,培训员工成本太高,且需要掌握的技术太高,作为一个大公司,可能有这样的资金投入,但对于绝大多数小公司而言,eclipse才是归宿。入门级别的毕业生就可以使用,能够容易快速的迭代开发代码,用vi就走远了。
11 楼 id.alex 2013-11-20  
只举一个例子
一个贫血的 Entity ,有 10+ 个属性时,
get/set 方法. 难道也要一个个用 vi 敲上去么?

试过用做一些 jse, socket 程序还行.
写 web 程序... 饶了我吧...
:cry:
10 楼 white_crucifix 2013-11-20  
其实我挺理解楼主的想法,因为我有也有过相似的历程。大体上同意,不过有几点分歧:

我其实不赞成用vim写java。1.创建目录 2.import 3.方法名
这三点其实是java和其他语言差别非常大的地方,我们可以用vi来写perl,写python,写node,甚至写erlang,因为这些语言不像java要com.dir1.dir2.dir3,因为IDE的优化使得这可以像是一个目录,而不是4个目录。第二是import,java的import要比其他语言都要长,其根本原因还是java得目录嵌套特点。第三方法名,如果你看一下其他语言,包括c语言,你会发现很大一部分方法名都是单词缩写,短,好记,编码迅速,而java呢,大部分都是full name,java为什么要用System.out.println来做输出语句,而不像c的printf,像ruby的puts,像erlang的io:format,当然有人会因此吐槽java,不过我更相信这是java更语义化的表达。
    事实上,我们在指责IDE的时候,我们并不了解IDE创造出来的初衷。IDE,真的不是为傻子而创造出来的,IDE的出现是为了满足大规模工业化编程的需要。IDE并不是让不会写代码的人也能写代码,而是让会写代码的人写的更快。
    vi,我也很喜欢vi,很多时候我们说vi好,并不完全指的vi本身好,而是指的整个终端环境(linux环境),不像windows,linux下是很容易写脚本的,无论是shell,还是perl,甚至python,简短,调用cli更方便。我们开发过程中会遇到一大堆零零散散的事情,这时候一个优秀的脚本,能让你一个回车尽享人生繁华。无论download,还是compile,还是deploy,或者中途需要改个名,切个字符串,只要你愿意,你可以写任何程度的脚本,这一点,在IDE里的确做不到,IDE本身有一定程度的自动化集成,但,不能再高了。
    另外,很多人得意的hjkl,虽说是有道理的,但是特别有趣的是,这一点却是世间少有的结果导致原因的历史事件。因为vi创造者当时用的机器是ADM-3A terminal,而这个设备的上下左右是和hjkl合在一起的,说其根本原因的确是因为键盘  不  够  宽 =,.=

    最后,回答一下前面有的朋友的疑惑,不用ide怎么来编译。事实上,我觉得如果真不用IDE来写java,基本都要用到ant或者maven,当然也可以是gradle等等,这些都是编译部署工具,配置好以后,都是一键的。而且在linux上,ctrl R搜索一下历史命令,然后一个回车,就开始跑了,这的确要比在IDE上鼠标去点某个图标甚至菜单来的爽快(甚至像我这种喜欢给编辑窗口留最大区域的人每次要把最小化的tool窗口打开再点击里面的功能……虽然尽量用快捷键了,但是有的快捷键是基于特定窗口的,比如Intellij的Maven……,每次要点都很蛋疼)
9 楼 aa87963014 2013-11-20  
说得再好也不过是文本编辑器这一类里面的东西
8 楼 stephansun 2013-11-20  
luoyu-ds 写道
我只说一句,vi它再强大也只是一个文本编辑器....
论到效率问题,eclipse完胜它,不喜欢代码不全,可以禁用,没必要这样黑吧
你是因为进公司受到了影响,确实是先入为主,就跟你喜欢一女的一样,当你喜欢上她,觉得其他的都不漂亮。

+1
7 楼 luoyu-ds 2013-11-20  
我只说一句,vi它再强大也只是一个文本编辑器....
论到效率问题,eclipse完胜它,不喜欢代码不全,可以禁用,没必要这样黑吧
你是因为进公司受到了影响,确实是先入为主,就跟你喜欢一女的一样,当你喜欢上她,觉得其他的都不漂亮。
6 楼 superpeter 2013-11-20  
我觉得使用vi或其他编辑器的最大原因是完全可定制,可以按照自己的偏好来定制一个开发环境,而IDE这类工具,则都是遵循既定的模式来开发。另外,编辑器一般比IDE小,占用资源也小,速度快,Linux/Unix基本都自带vi,这也是它流行的原因。我就特别希望有一个IDE,跟编辑器一样小巧,关键功能都有,做秀功能尽可能不要就行了。
5 楼 superpeter 2013-11-20  
你在文中讲的使用vi的理由,我觉得都不是应该使用vi的理由,大部分编辑器都能做到这些,使用IDE也可以达到这样的目的。你在文中讲到使用效率时,列举vi可以手不离键盘,这一点大部分编辑器都可以实现,IDE加上一些插件也能实现。IDE有自动提示功能,这一点效率应该比vi高,这时,你又说自动提示会使人变傻。我觉得你有点vi是神器这样先入为主的观念。
我始终认为,每一种操作方式都有自己的效率最高之处,某些地方使用鼠标就是比使用键盘效率高。要混合使用多种方式才是最高效的,只使用一种方式,绝不可能最高效。
4 楼 songbgi 2013-11-20  
对于大项目来说

怎么处理那些jar包
3 楼 yds3300376yd 2013-11-20  
我有个问题,用VI编辑器的话,是不是写完了要手动编译呢?那如果做一个工程或者一个项目,要怎么编译呀,还有,那么多的文件夹都要自己建哦~~~

相关推荐

Global site tag (gtag.js) - Google Analytics