使用Vi、Vim或GVim作为集成开发环境(IDE)

49
我在工作中强制使用VS2008来完成我的大部分项目,但每当需要编辑一些文本文件时,我会使用Vim。现在我知道有插件等工具可以让Vim像一个IDE一样工作,所以我想知道是否有人实际上将其用作IDE?请注意:在vim.org的官方功能请求列表上,IDE功能是第一大功能请求。

6
我在将生锈的叉子刺进我的腿上之间使用VIM作为集成开发环境。 - skaffman
28
请有人从斯卡夫曼的膝盖上移开那些餐具。 - seth
让我感到困惑的是,vim 缺少一些非常基本的功能,比如正确缩进我的换行行。在他们解决这个问题之前,我怀疑他们会提供任何集成开发环境。 - puk
@puk:尝试使用set showbreak=...或类似的变体。 - Greg Nisbet
1
@GregoryNisbet 我相信VIM已经更新了,使得单词换行符遵循行缩进。 - puk
11个回答

52

Vim 是一款神奇的软件,但因其年代久远,也相当混乱。 Vi 发布于1976年,Vim 发布于1991年。例如,Vim 提供了很多不同的文本补全方式,从简单的关键字到其 "omni" 补全系统。除此之外,一些插件选择使用内置的功能,而另一些则完全替换它。希望以下建议能为您带来启示。

使用Vim的IDE

您可以尝试使用 Vim 的这个新补丁,它允许将 Vim 作为编辑器嵌入到 Visual Studio 中:

Vundle

首先,为 Vim 安装 Vundle 插件管理器插件!它非常好用,可以轻松管理 Vim 插件。 它可以处理安装、更新和卸载。

例如,您的 .vimrc 文件现在只需包含:

" === Plugins! ===
Plugin 'junegunn/fzf'
Plugin 'scrooloose/nerdtree'
Plugin 'w0rp/ale'
...

执行 PluginUpdate 命令可以安装或更新插件。

Vim-IDE 插件

以下 Vim 脚本使 Vim 更具 IDE 感觉。请记住,Vim 内置了大量功能,因此在加载 20 个插件之前,请花时间学习这些功能(这是一个持续的过程)。

对我来说最有影响力的插件是fzfALE。你会想要安装fzfripgrep

导航:

  • FZF - 最喜欢的插件,强大的文件系统导航和文本搜索
  • Nerd Tree - 文件系统导航
  • Command-T - 按文件名搜索项目以打开,建议使用 FZF 代替
  • CtrlP - Command-T 的替代方案,模糊文件和缓冲区搜索。通常较慢,但不需要编译
  • Tag Bar - 按函数代码导航
  • 书签 - Vim 书签(我的插件:))

文本自动完成:

我个人认为代码补全过于繁琐,只依赖 Vim 的内置 CTRL-N 文本补全功能。你可以自行选择,但记住 CTRL-N! Vim 的内置补全系统还包括不同的补全模式,例如使用 CTRL-X CTRL-F 的文件名补全或“omni补全”,后者尝试通过 CTRL-X CTRL-O 提供特定于文件类型的上下文相关补全。Omni补全需要文件类型特定的插件,例如针对 Golang 的 vim-go 包支持它。

格式化:

太棒了:

  • ALE - 许多语言的实时语法检查,支持 Vim 8 的新功能,例如异步作业以确保它在运行时不会冻结 Vim。
  • fugitive - 在 Vim 中使用 Git,查看差异、责任...等等
  • gitgutter - 实时查看与 Git 提交的版本不同的文件差异
  • Airline - 更易于阅读的状态行,提供更有用的信息
  • Gundo - 将vim撤消历史记录可视化为树状结构(我最喜欢的插件,请确保在Vim中启用持久性撤消)

配色方案:

Vim分发版

与其自己进行设置和配置,您可以使用以下项目来快速使用更像IDE的Vim。下面的两个项目包含我上面提到的许多插件:

我建议您不要使用它们。如果您花时间自己配置vim并逐个安装插件以充分了解每个插件,您将学到更多。

Vim插件指南

VimAwesome可以是浏览Vim插件、查找有用且常见的插件的好地方。

Vim补丁程序

除了这些脚本,您可能还想查看一些Vim的补丁程序。我没有使用过它们,所以不确定它们的质量,但它们中的大多数看起来非常有前途。您可以在此处查看所有补丁程序here,使vim更像IDE的那些是:

  • Code Check - 实时代码检查(注意:现在更好的选择是Syntastic)。
  • Clewn - 允许使用GDB在Vim中调试和逐步执行代码。

安装这些脚本和补丁后,您应该会拥有与Visual Studio或Eclipse功能非常接近的Vim。


ViVim看起来非常有趣 :) - Nippysaurus
你推荐 Syntastic 而不是 Code Check,但你也推荐了 Ale,它比 Syntastic 更好,我认为你不想混合使用两者。Ale 是异步的,并且还实现了语言服务器协议,这变得越来越重要。最近 Sourcegraph 也在谈论它,我最近接触到了 ReasonML,它利用了 LSP。 - icc97
这些天,Ale 可能比 Syntastic 更好的选择。 - dedObed
@dedObed 这些天,coc.nvim 或许比 Ale 更好的选择 ;) - icc97

16

您还可以选择使用一个名为 viemu 的插件来实现相反的功能。该插件可在VS IDE中提供vi模式,使得同事在您的系统上协作更加容易。


2
+1 ViEmu是我见过的最好的Visual Studio vi插件。 - Andy White
还有一个随 GVIM 一起提供的 VS 插件,但它会在自己的窗口中启动编辑器,并不像 viemu 那样与 VS 编辑器进行实际集成。 - Nippysaurus
2
Viemu比GVIM稍微少了一点vi的感觉;当我需要进行大量编辑时,我会使用“外部命令”启动GVIM。 - xtofl
1
请注意,MonoDevelop包含一个相当完整的Vi模式。而且它开始在Windows上运行。 - Dykam

7

我并不是想挑起争端,但我希望能为你省去一些麻烦。这也是我在 #vim 中回答所有类似问题的答案。

Vim 并不是一个 IDE,它只是一个编辑器。它从来没有被设计成一个 IDE,任何试图让它符合这个目标的尝试都只会给你带来问题。虽然有一些插件试图为 Vim 提供类似于 IDE 的感觉,但它们往往非常糟糕。

然而,我建议你使用一些插件来增强 Vim 的功能,这可能会满足你的需求。

  • taglist - 用于按函数/方法/类导航代码的好工具
  • NERDTree - 一个非常棒的文件系统导航插件

8
微软Windows不是图像编辑器,但它提供了接口,允许您编写图像编辑应用程序。这与VIM(或VI)提供脚本界面类似,允许您更改应用程序的行为方式。我知道你的意思...它不能像可行的IDE替代品那样进行脚本化,这没关系:) 我的意思是只要它能将文件分组到项目类型结构中,我想它可以被称为IDE:) - Nippysaurus
7
标签列表、项目管理和调试器是旧版本的集成开发环境(IDE)。Eclipse只是ctags+vim+插件的Java实现。我真的看不出有什么区别。 - Elazar Leibovich
我认为 Vim 的一个优点是你可以按照自己的需求来使用它。如果你想将其作为一个严格的轻量级编辑器,那么你完全可以这样做。然而,如果你想要一些 IDE 的额外功能,你也可以安装许多插件。虽然我同意有些插件试图复制所有 IDE 的功能,但是像 fzf 和 ripgrep 这样的工具却提供了非常强大的代码搜索功能。NERDTree 实际上是我认为做得过多的插件之一 - 你可以使用 vim-vinegar + fzf 这些更轻量级的插件。 - icc97

7

6
如果您使用Linux,可以尝试Pida。您可以将Vim或Emacs嵌入其中。文件浏览器、项目结构和控制台等多种集成功能使Vim看起来像Eclipse。在我看来,这是将Vim用作IDE的简便方式。

谷歌 SVN 存储库中的代码已经过时,网站似乎也是如此。维基百科指出最新稳定版发布于2010年 :( - nuala
@nuala,情况变得更糟了,以前可以使用的“apt install pida”现在已经无法使用了,应用程序网站也已经关闭。应用程序网站也已经关闭。 - icc97

3

VIM作为IDE对C和C++有一流的支持。你甚至可以使用clewn和gdb进行可视化调试。对于其他语言,你需要进行一些调整和摆弄,结果可能不如你所愿。值得尝试一个小时,看看效果如何。

我认为emacs在更多语言上做得更好作为IDE。


2

ExVim其实非常好,它是不同vim插件的编译集合。 - UnixShadow

1

有时候我会在Kate中使用Vim作为IDE,以替代在Vim中打开多个难以切换的标签页。

否则,我会坚持使用普通的Vim。

KDE for Windows可以让你在Windows中安装Kate。


1

我独自使用 Vim - 它具有一些基本的自动完成功能,可以通过^X然后各种选项(^P用于关键字,^O用于omnicomplete(适用于在Web文件中切换HTML、CSS等))。

它还可以通过:!(编译器或其他命令)启动命令。

与基本开发相当简单、无痛的集成,无需工作区或类似的东西 - 如果需要,可以使用文件设置的模型行。

编辑:就模块而言,通常有模块将相关脚本语言嵌入到Vim环境内或旁边 - 我不知道是否有类似的.NET框架模块。


0

这些评论也很大程度上取决于它们所写的年份。因此,以下是我对2018年Vim作为IDE的想法。

语言服务器协议变得越来越重要,Sourcegraph通过他们的总体计划使其流行起来。

这就是ALE(异步Linting引擎)如此重要的主要原因,因为它实现了LSP。因此,它还提供跳转到定义、代码完成和悬停信息。我只是开始使用它进行linting,还没有深入研究其他功能,但我认为它有巨大的潜力,可以提供从IDE中期望的许多功能。

但基本上,Tim Pope + FZF + Ripgrep + ALE提供的所有通用功能都将为您提供非常强大的编辑器。

坦白地说,一个“Everything Tim Pope”编辑器是你可以拥有的最好的Vim IDE起点之一(我甚至专门为此创建了vim-tim)。

唯一与David Terei的优秀答案稍有不同的地方:

安装IDE插件时要小心,它们很容易影响Vim的性能。

与其他IDE相比的潜在优势

值得注意的是,Vim允许您在设置代码库时具有很大的灵活性。许多IDE仅适用于项目级别,而您可以创建跨越许多Git存储库的父文件夹,FZF和Ripgrep非常强大,它们将消耗巨大的代码库,并且在跨它们进行搜索时几乎不会减速。使用Ctags,您可以在存储库边界上建立索引。这实际上填补了Sourcegraph智能编辑器清单中的一些不常见的要点(我认为Vim能够满足大多数当前IDE所做的除此之外的所有要点):

  • 您的跳转到定义是否跨存储库边界工作?

  • 您是否可以在一个地方搜索所有代码和依赖项?

使用 Vim 的缓冲区可让您打开数百个缓冲区,而不会使界面混乱或降低性能。键入:b some-buffer-text,然后按 Tab 键可轻松自动完成缓冲区名称。我还使用以下行从另一个答案中获取,它允许列出所有缓冲区并打印缓冲区命令,以便您可以通过其编号快速切换到另一个:

nnoremap <leader>bb :buffers<cr>:b<space>

Tim Pope最近开发了一个新的数据库dadbod插件,它可以让你拥有类似于Microsoft的数据库管理工具的功能。


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