文大神有没有用emacs和vim谁更人性化或者vim来写小说的

无所不能的vim-vim到底能做什么 | Vimer的程序世界
& 无所不能的vim-vim到底能做什么
其实很早就想写这篇文章了,虽然晚上介绍vim的文章很多,本博也已经就vim的使用写了70多篇博文,但是由于历史的原因,还有很多人对vim能做什么存在误解,包括:
vim对中文支持不好
vim适合临时编辑文本,对IDE的支持不好
vim的内嵌脚本语言不够强大,不像emacs的lisp那样无所不能
我不知道提出这些论断的人是因为不了不了解vim的现状,还是是对vim心存偏见。本博在写vim相关文章的时候,一直坚持只谈技术的原则,不会涉及到与其他编辑器尤其是emacs的任何比较,然而最近在看了某些博文之后,觉得为了不让某些已经过时的观点给初学者选择编辑器时造成困扰,写下这篇文章十分必要。
OK,我们正式开始,在文章的末尾,相信大家都会明白上面的几个观点是否正确。
一.普通人的编辑利器
之所以第一点就提到这个,是因为”文字处理”当然是一个编辑器最基本的功能,而能把编辑的体验发挥到极致的也恐怕只有vim而已了。
这一节,也会参考对vim的使用心得,相信用户的感受是最好的证明。
用户再也不用去网上辛苦的下载D版了!
2.提高输入速度
这个相信也没有什么好争论的,纯键盘操作的速度是鼠标无法比拟的,虽然会带来一定的学习成本,但是相信还是值得的。
3.完美支持中文,并支持多种文件编码
很多编辑器会有处理多字节编码的问题,而vim完美解决了这一点。(如果你的vim没解决,请参考)
4.文本笔记管理
这要归功于vim的一款插件:voom,详情可以参考善用佳软的这篇博文–
二.程序员的编辑利器
如果你是一名程序员,那就千万不要错过vim,它真的为程序员提供了太多贴心的功能。
1.支持几乎所有语言类型
不夸张的说,vim真的是将这一点做到了极致,只要是大家知道的语言,大到c++,python,小到bash,sql,vim全部都默认支持了这些语言的语法高亮,自动缩进,等等。一个编辑器搞定所有源码编写,不用为每门语言学习他的编辑器,降低学习成本,何乐而不为?
2.支持各种语言的代码自动补全和智能提示
3.快速查找函数定义功能及显示函数列表功能
vim+tags+taglist即可轻松实现上面的功能,功能上完全可以替代si或者vs.详见:,
4.支持类似textmate的代码片段功能
我目前使用的是,当然提供这种功能的插件可不只这一个,你可以有更多选择~
5.集成编译调试功能,快速定位编译错误
vim提供了quickfix的功能,可以集成gcc,g++,java,c#,python,php等各种语言的错误定位功能,极大提高了代码编译调试时的错误定位。参见:
如果发现vim有bug,那么大可以自己去研究代码修复~
在linux,windows,mac等多平台都有相应的版本,不用担心跨平台开发的问题!
8.支持插件,无限扩展自己想要的功能
vim本身有自己的脚本语言,如果你真的不想再多学一门语言,那也不是什么大事,gvim7.3已经默认编译支持了python,ruby,lua,perl等等脚本语言,用你喜欢的脚本语言开发去吧!(我爱python!),与emacs的lisp相比,vim自身的脚本语言确实有所欠缺,但是python较之lisp也算是旗鼓相当了吧
三.vim骨灰级玩家的超级终端
这是我几个月来一直试图总结的结论,也是vim发展至今我认为颠覆性的一个大特性。
其实在我现在看来,vim更像是一个超级终端,vim已经支持用python,lua,perl,ruby等多种脚本语言进行脚本编写,只要你愿意,你可以用脚本语言实现任何你想要的功能,然后通过vim展示出来。
简单来说,即vim替你实现了一个通用的界面,而你只需要编写你的逻辑代码,而展现到屏幕这一层,就调用vim的接口,由vim来完成就可以了~
这就是我所说的超级终端的定义,如果还是不能理解,那我们就用实例来说明吧!
1.,提供在vim中查看、发布、修改、删除博客的功能
2.,提供在vim查看、发布、修改、删除twitter的功能
3.,用vim打造你的个人wiki~
4.,在vim中看糗事百科(本博编写)
5.,提供日历的功能,并且可以记笔记
6.,用vim来发邮件,参见:
OK,到此为止就结束啦~对照文章开头的那些所谓vim的不足,是否有了新的认识呢?
然而其实vim所能做的远不止这么点,只要你肯去发掘,你会发现vim真的远超乎你的想象!
您可能也喜欢:
由于公司业务需要,花两周时间实现了一个小型的支付系统,麻雀虽小五脏俱全,各种必须的模块如账户加锁,事务性保证,流水对帐等都是有完整实现的,整个开发...
用php有两个月了,说实话用惯了django,再用php开发真的有点郁闷,简单列一下,并非批评,仅为入门的同学少走弯路:
取不到post的数据
当url为如下...
公司还是不推荐用python,只好屈服使用php,不过用python习惯了,真是发现有些地方不适应,今天写了一段代码,语法检查怎么都通不过,特地放在这里,希望有朋...也谈 VIM/EMACS
Vim VS Emacs 的论战似乎从来就没有停息过。他们分别以vimer和emacser自称。偏执地坚持只用这两种编辑器的人虽然彼此不服对方,但有一点却是这两者共同的特征,那就是只以自己为尊。
然而我写此文的目的并不是支持或是反对某一方。我两种编辑器都用过好几年,也没有特别的偏好。我想就自己的经验谈谈新手是否需要学习vim或是emacs。就我自己的经验来说:
1) vim/emacs都是可以脚本化的编辑器。从可编程性上来看,emacs内置的elisp语言(lisp的一个变种)是较为完整的编程语言,比vim的来得强大得多。然而我个人对lisp这种古老的语言不是很喜欢。它太烦琐艰涩,而且非常小众,因此我极少愿意去修改elisp写的东西。Vim的 脚本语言本来就只是为了配置vim而设计的,因此更简洁直接,容易编写,缺点就是语言的完整性远不如lisp这样的正宗编程语言。
2) Vim/Emacs都是通用的编辑器,自身是不带任何针对某个专业领域的支持的。然而通过插件来扩展,我们几乎可以得到无限的功能。我不得不强调的是, &通过扩展&往往看上去很美好,实际上并不好用。因为一些复杂的功能,如智能感知,需要大量的专业的编程工作,如解析语法树,根据上下文来推断变量类型, 智能的修改建议等。这些复杂的高级的功能需要成千上万的代码,远不是几行简单的lisp或是vim脚本就能搞定的事情。这些专业的需要,如果需要用户去自 己配置的话,编写配置文件的功能量几乎等同于重写一个IDE了。虽然目前vim/emacs的爱好者们集中力量一起开发了不少有用的插件,但这些插件的功 能和专业的IDE比起来,我只能说是不敢恭维。比如java开发的eclipse,我就没有在emacs中找到能和其相提并论的&配置&插件。因此,如果 专业领域内有强大的IDE的话,我推荐使用这些专业的IDE,它们往往比vim/emasc在专业领域内要强上几条街。
3) 在编程时,我个人比较注重智能感知和代码重构,这两个功能能大大提高编程效率,而且是目前IDE里普遍做得不够好的地方。vim和emacs都有相应的插 件或多或少地实现这些功能,可惜都不如专业的IDE来得强大。比如复杂的代码经常无法识别出来(STL和带有模板的C++代码常有此问题),补全的速度非 常非常慢,智能性不够(比如不能从上下文进行推断然后把最有可能的选项放在最前面)等等。debug方面也是很重要的。vim/emacs在debug上 做得非常差,完全没有专业的IDE来得便捷。我认为debug时直观和方便是非常重要的,那种操作烦琐,界面抽像的debuger,到底是你在debug 程序,还是程序在debug你呢?& 就我自己来说,我觉得C++的debuger目前还缺点gui方面的更强大一点的功能,比如像DDD那样能plot出一个数组的。我个人因为经常要debug一些数值算法的程序,所以能不能直观地观察到某个变量的变化曲线很重要,但只有matlab这样的环境才提供debug时plot的功能。
4) 我自己目前用emacs还是挺多的,基本不用VIM。我用emacs是因为我需要写latex,而emacs下有个叫auctex的插件用来写latex是所有可用的工具中最方便强大的。搞不懂为啥没人开发强大的开源latex编辑器。
5) 那么,精通VIM/Emacs 是通往高手的必经之路么?
我想这个问题很复杂,很难回答。难点在于,你怎么定义&高手&。如果你认为&高手&就是打字飞快,能用最少的按键实现文本的编辑,哦,那精通vim/emacs确实是必经之路了;如果你要成为在纯字符界面下也能自如地编程的人(比如要远程到一个没有GUI的server上修改代码的),那vim应该是非常好的选择;如果你要成为一个不管啥语言啥任务都只用一种编辑器的人,那么vim/emacs是你的必经之路; 当然还有很多没有列举的情况下,你也需要学习使用vim/emacs。因此我建议在你决定是否需要学习vim/emacs之前,先想想你要成为什么样的 &高手&,要用vim/emacs做什么,你能从中得到什么好处。不要人云亦云,觉得那些大牛们用vim/emacs,你也跟着去学。就我个人来看,除了 写latex之外,我是不需要使用vim/emacs的。java/C++的编程我使用eclipse和netbeans,matlab自带的编辑器就很 好用了。如果要我把精力浪费在深入vim/emacs的使用上,我宁可把这些宝贵的时间花在研究算法和理论研究上。
6) 我精通vim/emacs,就能成为高手么?
同样的,先定义&高手&是什么。如果你说的是使用vim/emasc的高手,那么恭喜你,你精通之后就是这方面的高手了。如果你说的是编程方面的高 手,那么对不起,我想光是精通这个对你没啥帮助,算法和相关方面的理论知识应该是更重要的;如果你想成为其它方面的高手,那我就只能祝君好运了。一句话, 虽然XXX之父用的是vim/emacs,但就算你用了vim/emacs,也不见得就能成为XXX之父。成为XXX之父,用不用vim/emasc是无关紧要的,他的专业知 识上的水平才是最重要的。
摘自 xiangduilun的博客465被浏览102805分享邀请回答pick 4aad920 f
pick 322877a f
pick 34dacff f
pick f1c9311 f
pick 8cca93d f
pick 497c2c9 f
pick b2d6921 f
pick cafe1d4 f
pick 9b70e6c f
pick 5c3747b f
除此之外,vim 的矩形编辑也非常犀利。比如上面的示例,也可以在矩形编辑下,选中第二到第十行的 pick,删除,然后 I 插入 squash,继而退出 insert mode 即可。而 emacs 没有输入上的 mode 差别,所以需要依赖复杂的快捷键来实现强大的编辑功能,正如上图所示。emacs 插件想象力更加丰富,有「伪装成编辑器的操作系统」之称。插件的 major mode 和 minor mode 的设计很出彩,对一个文件,只有一个 major mode,但是可以有多个 minor mode,这样一个文件一个主插件,多个附加插件,可以实现很多有趣的效果。在 vim 中,是通过set filetype=python或者在filetype.vim文件中自定义来决定 vim 使用哪种语法渲染,其他比如自动补全这样的插件通过判断filetype来实现相关功能,并没有 mode 一说,针对同一种文件类型的插件可以非常分散。而在 emacs 中,如果我们选中pythonA-mode作为.py文件的 major mode,那么pythonB-mode就不会起作用,除非它上 minor mode。这有利于大而优秀的特定 major mode 脱颖而出,同时使用多个 minor mode 提供通用编辑功能。有很多人试图将 vim/emacs 打造成 IDE,也有一些比较著名的配置。比如,对于 vim,比较优秀的 IDE 配置有 ,, (这个并不著名但我很喜欢,我的配置也是从这个开始的)等。emacs 有, 和我现在在用的 。如果有兴趣,可以去这些项目主页看一看,然后选择一个尝试一下。为了实现类似 IDE 的功能,这些配置通常包括了项目结构列表,文件结构列表,自动跳转,自动提示和补全,插件管理,语法检查,版本控制等插件。如果上面每个配置项目你都过了一遍,会发现大家要做的事情其实是差不多的。对于 vim 的话,可以看下这个 ,其实最受欢迎的插件也大概是这些,对着 vimawesone 你也能拼起来一个很优秀的配置。项目结构浏览插件对于编辑器而言,这个插件的功能通常都比较简陋,一般只能浏览和导航文件,加上简单的文件操作(增删改复制)。不像 IDE,提供的功能非常多,多到右键弹出功能列表的时候都会卡顿(没错,我并没有说 JetBrains 家的 IDE)。vim 中比较优秀的是 ,emacs 下是 ,其实就是仿的 nerdtree。对于 vim/emacs 用户而言,不会通过在文件树中点击来跳转,使用此类插件其实仅仅是为了浏览项目结构,所以往往不会做的功能特别强大。快速定位得益于 sublime text 的 go to anywhere 思想,ctrlp 几乎成为了现代编辑器的标配功能。所谓 go to anywhere,就是通过一个快捷键(一般是 ctrl+p)能够通过模糊查找快速到达项目中的任意文件、类、方法。毫无疑问,在编辑器中,这个功能 sublime 做的最好。在 sublime 中,ctrlp 会弹出一个输入框,直接输入,会查找文件,先输入@,则会查找方法,先输入:,则会跳到这一行。而且还支持组合查找。其实 JetBrains 系 IDE 的 go to anywhere 功能更加强大,可以同时搜索文件、类、方法、IDE 动作。代价就是性能太差—每次??都会卡顿,所以只好使用?+O查找文件,查找到文件之后再查找方法,或跳转到具体行。这意味着,在这一方面,更强大的 IDE,反而比编辑器更不方便。这倒不是因为它是 IDE,而是软件设计的一个问题—哪些功能应该合在一起,哪些功能应该分开。vim 下的 go to anywhere 插件名字就叫 ,仅仅实现了查找文件功能,需要通过来扩展功能,比如查找 vim 命令的 。而且,不知是不是技术限制,其搜索精确度还是无法和 sublime 相比。不仅如此,搜索速度也不够好,借助插件
,速度还是可以接受的。这一切搭配好之后,ctrlp 还是可以用得很好的。(PS: 提供了一种新型的文件编辑管理方式,使用 go 写了模糊查询,并没有使用过,感兴趣的可以尝试下)emacs 下的 go to anywhere 插件有好几个,spacemacs 默认使用的是 。使用感觉和 vim 的 ctrlp 很像,中规中矩。通过
扩展实现对 emacs 内置命令的模糊查询。总而言之,在这一功能上,vim/emacs 的实现比较分散,消耗过多认知资源,sublime 实现的最好,JetBrains 则过于集中。补全和跳转自动补全和跳转,这两个功能就是 IDE 的强项了。IDE 解析语法树,可以实现相当精准的补全和跳转,然而编辑器基于字符串匹配,效果就要大打折扣了。当然了,我说的是静态语言 。对于动态语言,即使是 IDE,也总有力所不及的地方,编辑器开一个进程实时解析也能实现不错的效果。二者的差别没那么明显。对于静态语言,编辑器竟也有和 IDE 相抗的野心:,也就是 eclipse+vim(当然也有 emacs 插件),在后台开一个 eclipse 进程,然后在 vim 中利用 eclipse 来做补全和跳转。对于这种将 vim/emacs 打造成 IDE 的尝试,有的人很热衷,有的人则很反对。热衷的抱着一股热忱,相信经过自己的打造,vim/emacs 的使用体验可以不输 IDE,甚至在很多细节要优秀得多。反对的人认为无论如何编辑器的自动补全和跳转都无法达到 IDE 的精度,何必徒劳。嘛,其实都有道理,看你是什么样的性格咯。但是学习这两个编辑器还是非常有好处的。就像一开始说的,很多编辑器、IDE 都提供 vim 插件,学会了 vim 可以一套快捷键吃遍天。另外,bash 默认是 emacs 模式,所以熟悉 emacs 还可以提高 bash 下的效率。比如 emacs 的 和 就可以部分用在 bash 上。最常用的是这几个。在具体的项目上,当然还是 JetBrains 家的 IDE 更好用,尤其是静态语言。而动态语言,选自己比较喜欢的就好了。(然而 JetBrains 家的调试工具太好用已经离不开了?)7512 条评论分享收藏感谢收起452 条评论分享收藏感谢收起问题对人有帮助,内容完整,我也想知道答案
问题没有实际价值,缺少关键内容,没有改进余地
体验是否比eclipse差很多呢?用emacs写java体验也不会好么:(
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
这个问题你去问 100 个 vimer(我指的是真正懂 vim 的玩家,不是普通使用者),估计 99 个都会告诉你:“可以,但并不适合。”(这是普适的答案,你应该相信)
但总会有那么一个百里挑一的 genius 会做出 99% 的人做不出的事情来,比如说这位:
那么他做到的事情能完美代替 Intellij IDEA 或 eclipse 吗?答案是:不能——不过这要看对谁而言,对少数人来说,他们并不依赖那些 IDE 有的,但是 vim 没有并且很难去实现的东西(或者说实现的代价有点不值得),所以他们依然可以用 vim 写 Java 并且写得比很多人都快都好。话说回来,IDE 用成精的人也不会比 vim 慢,更不要说现在 IDE 都可以实现大部分的 vim 编辑模式——但 vim 有一些好处是 IDE 永远也无法企及的,轻、快、服务器几乎标配、远程连接立即可用……你精通 IDE 也许只能干好一件事,你精通 vim 鬼知道你都能干些什么!
那么问题来了:你是这类人吗?以上答案 Emacs 基本适用,在改造无限接近 IDE 这件事情上,Emacs 还能做得更极致一些。
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
曾经有一年时间做 Java Swing 开发,尝试过 2 个月时间脱离 IDE 转投 VIM 。其实答案和楼上一样,也和大部分人一样:可以,但并不适合。该折腾的插件,都折腾了,NerdTree、AutoComplete、Supertab、Snippets……或许是本人对 VIM 的理解还不够深入,也或许是各种其它原因,但还是有以下几个方面不方便:1. 文件切换不方便:虽然有 NerdTree,但在各种文件之间切换仍然不方便。不过可以用鼠标,但是用鼠标的话,还要 VIM 干嘛。2. 代码提示不方便:Java 的第三方 Jar 包出了名的多,虽然手动更改了 AutoComplete 代码,能让其提示 Jar 中的函数,但经常抽风提示不出来。即使提示,也没有方法注释、方法签名(无论哪一款 IDE 都会有方法注释和方法签名的吧),熟悉的方法还好,如果遇到第一次用的 Jar ,只能乖乖查官方 API 了。3. import 需要手动:用惯了 Eclipse 的一定知道,Ctrl + O,IDE 能自动帮助导入需要的包,如果有多个相同名称的 Java 类,还会提示。这一方面 VIM 暂时还没有这方面的插件(当然,如果有高人在,相信一定能开发出这样一款插件)。每次写完代码,编译时,都会出现大堆大堆的提示没有 import 。然后手动写 import 也是非常耗时的事情。4. 新建文件不方便:IDE 中,会根据选择的新建文件不同,根据不同的模版生成不同的文件。但是在 VIM 中,新建文件就是一空白文本文件,所有代码都要自己填写完整。 J2SE 项目还好,如果是 Web 项目,各种痛苦会等着你。5. 覆盖方法不方便:IDE 能够提示哪些方法可以覆盖,VIM 只能凭经验或者查询 API 了。
其实还有很多问题,只有折腾过的才知道。后来还是因为效率实在低下,又回到 IDE,不过好在现在的 IDE 都有 VIM 插件。在真正开始 VIM 工作之前,本人可是花了 2 周时间来调试和折腾 VIM 插件。只能说,其中的坑实在很多,慎入。
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
你说的这些问题都不是问题,在我的配置中,这些问题完全可以解决,而且解决方案比IDE里面效果要好;
推荐一篇关于使用vim开发java程序的文章:
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
别折腾了,推荐eclipse和JetBrains。
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
可以,前提是Vunble那套东西你要玩的转
利益相关:重度vim使用者
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
可以,光写代码完全不成问题。只要你牛B到不需要调试功能。在牛B的VIM配置,能搞出IDE的调试环境吗?
同步到新浪微博
分享到微博?
关闭理由:
删除理由:
忽略理由:
推广(招聘、广告、SEO 等)方面的内容
与已有问题重复(请编辑该提问指向已有相同问题)
答非所问,不符合答题要求
宜作评论而非答案
带有人身攻击、辱骂、仇恨等违反条款的内容
无法获得确切结果的问题
非开发直接相关的问题
非技术提问的讨论型问题
其他原因(请补充说明)
我要该,理由是:
在 SegmentFault,解决技术问题
每个月,我们帮助 1000 万的开发者解决各种各样的技术问题。并助力他们在技术能力、职业生涯、影响力上获得提升。
一线的工程师、著名开源项目的作者们,都在这里:
获取验证码
已有账号?311被浏览107115分享邀请回答336 条评论分享收藏感谢收起632 条评论分享收藏感谢收起}

我要回帖

更多关于 emacs vim 比较 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信