开发人员在Windows操作系统上是否真的使用vim来编写Java代码?

8

...或者说vi/vim只在非Windows操作系统上开发时使用吗?

如果不是这样,那么vim提供了哪些现代IDE(如Eclipse)没有的功能?为什么在Windows工作站上进行Java开发或某些编译语言开发时会选择使用vim而不是Eclipse(或IntelliJ、Websphere或其他功能丰富的IDE)?请注意,我指的是Java开发和某种程度上的编译语言开发,而不是shell脚本或其他形式的脚本。


3
不需要投票关闭,我认为这是一个有趣的问题,目前为止,回答得很好。 - SyntaxT3rr0r
1
@Webinator:虽然与编程无关,但可能更适合在这里发布:http://bit.ly/ProgrammersQA -- http://programmers.stackexchange.com/ - OscarRyz
当你想要编写一个“Hello World”程序时。 - irreputable
这不是对问题的回答,那么为什么不尽可能地兼顾呢?三个主要的 Java IDE 都有一个插件,可以提供 VI 键绑定。如果你真的坚决使用 gvim 本身,那就看看 eclim。 - whaley
Oscar,"developers" 和 "Java" 哪一部分与编程无关了? - Manius
这并不是主观的,只是根据情况而复杂。或许有争议,但我还没有看到过任何一次争吵。为什么要关闭? - Manius
8个回答

21

Java是一门非常复杂的语言,我想不出一个人能够记住JDK中甚至内置类的所有方法参数和返回类型。由于Java可以通过JavaDoc注释实现自我文档化,并将其转换为手动页面翻阅似乎没有意义,因为你可以使用像Eclipse这样的IDE来调用特定方法或类的文档。

简而言之,在使用(g)Vim时,除非你使用了某些扩展,否则你大部分时间都是盲目操作,必须在头脑中弄清楚大部分逻辑(或者,你正在使用screen(1),并在另一个终端上打开man页面)。

我非常喜欢Vim,但对于像Java这样更大、更依赖库的语言,我不会使用除Eclipse之外的任何东西。我的一个朋友曾经推测,如果没有智能IDE,Java开发几乎是不可能的,我完全同意。


1
或者,回答OP标题中的问题:“Windows不友好开发者;只需看看COM。” - amphetamachine
我一半的人生都在Windows上开发,从未涉及过任何与COM相关的事情。并不是说这不可怕(我看到别人处理过),但即使我们同意Windows不是面向开发者友好的,它对于大多数用户来说仍然是用户友好的,而开发者也是用户。 - Manius
1
不是那么沉重:http://www.vim.org/scripts/script.php?script_id=1785 - idbrii
这篇文章有点旧了,但这可能是一种解决方案。不确定。https://github.com/liangxianzhe/oh-my-vim - theoden8
1
eclim项目(eclim.org)旨在将Eclipse的最有用的功能暴露给vim(在Java、C++等方面),可以创建Eclipse项目,构建和运行它们,进行适当的代码完成,管理导入语句,显示JavaDocs,显示无效语法(如vim插件Syntastic),帮助重构代码,自动格式化等。此外,针对GitHub的fugitive vim插件也可能比Eclipse更好。Eclim不是完美的(例如,尚没有C++文档),但它足以使(特别是Java)开发变得合理。 - mellow-yellow
我在Intellij中使用Ideavim插件,最好的两个世界(Intellij惊人的智能感知、调试器、文件树等与vim的基本动词和运动支持)。我还在ideavim中设置了easymotion和quickscope。 - theprogrammer

8
当你已经习惯了一个强大的“文本编辑器”,无论是vim还是Emacs(这里不进行争论),使用默认提供的各种IDE所提供的“次级”文本编辑器可能会非常困难。
我做的很简单:有时候我确实需要在我的.java源文件中执行一些在Emacs下可以快速完成的操作。那么我该怎么办呢?我从我的IDE切换到Emacs(只需按一个快捷键,在另一个虚拟桌面上),完成我的工作,然后切换回IntelliJ IDEA(我的Java IDE选择)。
问题在于,正如amphetachine指出的那样:仅使用vim或Emacs进行Java开发感觉像生活在石器时代。
在最好的情况下,我的IDE中心的“文本编辑器”将是Emacs(或vim),并且具备所有优秀的Java IDE所具备的闪亮的实时错误/警告、代码补全、代码遍历等功能。
附注:这里是我询问如何始终同步.java(或其他文件)在Emacs和IntelliJ IDEA之间的+7赞成票和+4收藏的问题链接:Emacs: Often switching between Emacs and my IDE's editor, how to automatically 'synch' the files?

你需要做什么特定的功能,无法在集成开发环境中完成? - Manius
1
@Crusader:在vim中构建正则表达式很容易(使用incsearch,在启用正则表达式时Eclipse会禁用它)。选择文本排序也很快(或将选择传递给任何命令行过滤器,如sort、grep或comm)。还有Vim宏。 - idbrii
@Crusader:久违的评论...基本上,如果你问Emacs有什么优势,IntelliJ或Eclipse没有的话,那就是你从来没有真正使用过Emacs ;) 说真的。 - SyntaxT3rr0r
pydave的回答是我听到的少数几个现代IDE缺乏具体功能的实例之一,但是,也许只是我的特定需求,我并不关心诸如对选定文本进行排序或使用grep或宏之类的事情。重构、“查找所有引用”、包资源管理器、代码生成、集成调试器等功能(我可以继续列举)太强大和高效了,不能没有。 - Manius
@Crusader:我觉得你很难接受我的工作方式,实际上我确实能够兼顾两者的优点。我有说过我不使用IDE吗?当然没有。我也会重构、查找所有引用、包浏览等等。但是当我需要一个真正的编辑器来执行高级操作时,只需按一下快捷键,我的源文件就会在Emacs中打开。我确实能够兼顾两者的优点。千万不要试图让它听起来像我没有使用IntelliJ IDEA(顺便说一句,无论你使用哪个IDE,除非你使用的恰好是IntelliJ,否则它都拥有你的IDE)。 - SyntaxT3rr0r

4

vim允许通过Telnet或SSH进行远程、轻量级客户端访问,而Eclipse则不行。你能做的最多就是远程桌面,这可能会不方便且速度较慢。此外,vim已经开发了很多年,有些人已经非常习惯这个环境。vim也非常快速,并通过众多按键命令使代码更易于控制,如果你是专家的话 :)

可以通过vim使用Eclipse的功能(参见Eclim -- http://eclim.org/),但这仍在开发中,可能不稳定或难以设置。

如果您在本地使用Eclipse,则可以获得非常快速的UI和许多强大的重构工具。然而,有些人喜欢简单的方式 :)


我在远程UNIX上使用VNC进行开发已经五年了,我发现使用它要比vi更好。不过,对于像/etc/hosts这样的随机文件的编辑,我仍然使用vi。我用过IntelliJ、Netbeans和Eclipse,但因为它更容易编辑和重构代码,所以我只会使用IntelliJ。 - Peter Lawrey
我不明白为什么有人需要远程访问源代码而不是本地构建(利用集成的源代码版本控制等优势),然后进行FTP或其他部署流程?(除非他们直接在生产服务器上进行小的更改或其他疯狂的行为,但这应该不常见。) - Manius
@Crusader:我猜有时候你需要在程序将要运行的确切环境中开发。 - Denis Tulskiy
@tulskiy:这种情况听起来像是出了什么问题,比如没有专门的开发/测试/生产环境之类的。你可以从运行任何东西的工作站自动部署到任何想要的环境,我想不出有什么问题。我觉得使用增强型IDE(如Eclipse)会更加高效。也许通过vi类似的功能做一些不常见的事情会更容易,但如果它只在1%的时间内有帮助,并且具有陡峭的学习/记忆曲线,那么我认为时间最好花在其他地方。 - Manius
1
@Crusader:"我想不出任何问题。"虽然这可能不是tulskiy的情况,但如果你正在编写主机程序或其他需要交叉编译的东西,你可能会在远程机器上进行编译,并且在目标平台上编译可能会更快。 - idbrii

2

vi编辑器通常被*nix用户在命令行环境中使用,例如如果连接到Unix/Linux系统的唯一选项是通过telnet/ssh客户端。

如果您的客户机/桌面是Linux,例如Genome或KDE等,则始终会选择类似Eclipse的环境,这些环境提供了丰富的功能,例如创建和管理项目、连接代码存储库、轻松浏览多个文件和调试等。

但是,我知道一些vi或emacs的铁杆粉丝,仍然不可避免地会为所有实际用途使用vi或emacs。

vi或emacs是非常丰富的编程工具。您可以使用基于键组合的命令进行几乎任何导航和编辑。但是它们有点难以熟悉,即使您是专家,根据我的经验,在多个文件和大型项目上工作也很困难。

但是在Windows机器上使用vi非常罕见,如果有人这样做,我无法想象背后的原因。


我在一家公司工作,其中有一半的程序员使用gvim来编辑他们的代码,然后再使用Visual Studio进行调试。只需按下一个按键就能在两者之间切换。 - dash-tom-bang
但是为什么呢?这就是我要问的问题。是哪些特性或功能特别激发了这个想法?(另外,VS并不是Java,所以有点离题,但仍然是一个有趣的问题。) - Manius

2

请参考这个问题的答案:

尽管Vim有众多插件,但它无法与现代IDE的语言感知重构和编码能力媲美。

当你处理大型项目时,强大的编辑器是远远不够的。你需要能够浏览数百个类,找到所有用法、覆盖等内容。你需要能够轻松地重构代码。IntelliJ IDEA和Netbeans具有丰富的功能和快捷键,专门针对Java开发。Vim是一个很好的工具,但Java更适合使用IDE,并且你应该利用这一点。


你需要能够浏览数百个类,找到所有用法、覆盖和其他内容。你需要能够轻松地重构你的代码。所有这些都可以通过Linux中的bash完成。 - Zack Macomber

2

我曾是一个忠实的vim用户,但现在已经转换到Eclipse。

Eclipse有两个vi插件/键绑定。一个是免费的,另一个是商业化的。我更喜欢商业化的插件:对某些事情来说更有效。

Eclipse可以做许多gvim无法做到的事情(或使它们更容易)。

编译/调试/运行。
设置构建环境。
Javadocs、代码自动补全等。 重构、源代码控制插件、代码组织。
项目设置等。与其他开发人员共享项目很容易。许多FOSS Java项目都有Eclipse文件,便于快速设置。

只是举几个例子。


1

下载 Windows 版的 gvim,它看起来与 Linux 版本完全相同。


1
Vim还可以为多种编程语言进行语法高亮。这个功能加上键盘快捷键,使得它比启动Eclipse并转到相关文件更适合用于进行小的代码更改。

Eclipse 启动时间可能会太长,但是在做出这样的更改后,我总是想要检查源代码控制,所以大多数情况下我愿意多等几秒钟。 (不确定 Vim 是否与 SVN 集成) - Manius

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接