使用Vi,Vim或GVim作为IDE

时间:2009-06-23 07:00:33

标签: vim ide

我被迫在工作中使用VS2008作为我的大部分项目,但每当奇数文本文件需要编辑时我都会使用Vim。

现在我知道有些插件可以使VIM像IDE一样工作,所以我想知道是否有人真的将它用作IDE?

编辑:

对于那些认为您代表群众说Vim不应该用作IDE的人,请考虑IDE功能是official feature request list on vim.org上的头号功能请求。

11 个答案:

答案 0 :(得分:47)

Vim是一款令人惊叹的软件,但由于它的年龄相当混乱。 Vi于1976年发布,Vim于1991年发布。例如,Vim提供了很多不同的文本完成方式,从简单的关键字到“omni”完成系统。最重要的是,一些插件选择使用内置功能,而其他插件只是批量替换它。希望以下建议可以帮助您入门。

带Vim的IDE

您可能想要为Vim尝试这个新的补丁,它允许在Visual Studio中使用Vim作为编辑器:

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 - 按功能进行代码导航
  • Bookmarking - vim的书签(我自己的插件:))

文字完成情况:

我个人认为代码完成太多,只依赖于Vim内置的CTRL-N文本完成功能,但请记住CTRL-N! Vim的内置完成系统超出了这个范围,具有不同的完成模式,例如文件名完成CTRL-X CTRL-F或“omni-completion”,它试图通过CTRL-X CTRL-O提供文件类型特定的上下文相关完成。 Omni-completion需要特定于文件类型的插件,Golang的vim-go包支持它。

<强>格式:

  • tabular - 轻松对齐文字
  • vim-surround - 快速包围一些文字(即括号,标签......)

太棒了:

  • ALE - 对多种语言进行实时语法检查,支持Vim 8的新功能,例如异步作业,以确保它在运行时不会冻结Vim。
  • fugitive - 在vim,diffs,blame ......等内容。
  • gitgutter - 来自git的文件
  • 的实时差异
  • YankRing - 轻松访问以前复制或删除的文本对象

更好的GUI:

  • Airline - 使用更有用的信息更容易阅读状态行
  • Gundo - 将vim撤消历史视为树(我最喜欢的,确保你在Vim中启用持久撤消)

配色方案:

Vim发行

您可以使用以下项目快速使用像Vim这样的IDE,而不是自己完成设置和配置。下面的两个项目包括我上面提到的许多插件:

我建议你不要使用它们。如果你花时间自己配置vim并在交错的过程中安装插件来学习每一个插件,你会学到更多。

Vim插件指南

VimAwesome可以成为浏览Vim插件并找到有用且受欢迎的插件的好地方。

Vim Patches

除了这些脚本之外,您可能还想查看Vim的以下一些补丁。我没有使用它们所以不确定质量,但大多数看起来很有前景。您可以查看所有补丁here,那些使vim更像IDE的补丁:

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

安装了这些脚本和补丁后,你应该在Vim中使用与Visual Studio或Eclipse相近的功能。

答案 1 :(得分:15)

您也可以反过来使用名为viemu的插件。这个在VS IDE中为您提供vi-mode,这使同事更容易在您的系统上共同驱动。

答案 2 :(得分:7)

Taglist是一个很棒的插件 - 没有它就离开家。

您也可以set up tab completion

如果支持您的语言,

Omnicompletion会很棒。

而且VIM tip 1439有一个IDE-enification技巧。

答案 3 :(得分:6)

我不是试图对这种反应感到煽动,但我想为你省一些头痛。这是我给#vim中提出类似问题的所有人的答案。

Vim不是IDE。这是一个编辑。它从来没有打算成为一个IDE,任何使它符合这一点的尝试只会给你带来问题。有些插件试图为Vim提供类似IDE的感觉,但这些很糟糕。

另一方面,我会推荐一些插件来帮助您从Vim获得一些扩展功能。这些可能适合您的需求。

  • taglist - 非常适合按功能/方法/类
  • 导航代码
  • NERDTree - 一个精彩的文件系统导航插件

答案 4 :(得分:6)

如果您使用Linux,请尝试Pida。您可以将Vim或Emacs嵌入其中。许多集成,如文件浏览器,项目结构和控制台,使Vim看起来像Eclipse。恕我直言,这是一种将Vim用作IDE的简单方法。

答案 5 :(得分:3)

VIM作为IDE提供对C和C ++的一流支持。你甚至有一个带有clewn和gdb的可视化调试器。其他语言,你将不得不做一些调整和摆弄,结果可能达不到你想要的。值得尝试一个小时,看看它如何。

我得到的印象是,emacs可以更好地用作更多语言的IDE。

答案 6 :(得分:2)

http://code.google.com/p/exvim中尝试exVim 该项目使vim成为多语言开发的IDE。

答案 7 :(得分:1)

我有时会在Kate内使用Vim作为IDE,否则我会在Vim中打开几个标签,这很难改变。

另外,我坚持普通的普通Vim。

KDE for Windows将允许您在Windows中安装Kate。

答案 8 :(得分:1)

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

它还能够通过以下方式启动命令:!(编译器或其他命令)。

与基本开发相当简单,无痛的集成,无需工作空间或类似工具 - 如果需要,还可以进行文件设置模型。

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

答案 9 :(得分:0)

我看着O.T.今天遇到了gvide。 Android NDK的东西 - vim的长期用户,在eclipse中使用了eclim,但坦率地说我的vim环境是用于编写代码而不是开发代码。阅读不同的曲目以使vim成为一个开发环境非常有趣,并且gvide有一些引人注目的东西 -

http://www.crystax.net/en/gvide

答案 10 :(得分:0)

这些注释还完全取决于编写年份。因此,这就是我对于将Vim作为2018年的IDE的想法。

Language Server Protocol的重要性不断提高,Sourcegraph已通过其master plan进行了普及。

这是ALE (Asynchronous Linting Engine)之所以如此重要的主要原因,因为Go-to-definition, code completion and hover information实现了LSP。因此它也提供vim-tim。我只是刚刚开始将它用于棉绒并且没有深入研究其他功能,但是我认为它具有提供IDE期望的许多功能的巨大希望。

但是,Tim Pope + FZF + Ripgrep + ALE的几乎所有通用内容都将为您提供功能强大的编辑器。

坦率地说,“ Everything Tim Pope”编辑器是Vim IDE最好的起点之一(我什至为此创建了David Terei's excellent answer)。

我唯一与Obsession有所不同的地方:

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

相对于其他IDE的潜在好处

值得注意的是,Vim允许您灵活地设置代码库。在许多IDE仅在项目级别上工作的地方,您可以在许多Git存储库中创建一个父文件夹,FZF和Ripgrep如此强大,以至于它们会消耗大量的代码库,并且在它们之间进行搜索时几乎不会减慢速度。使用Ctags,您可以跨回购边界建立索引。实际上,这填补了taken from another answer中几个不常见的问题(我认为Vim能够满足大多数当前IDE所能完成的所有工作):

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

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

  •   

使用Vim的缓冲区,可以打开100个缓冲区,而不会造成UI混乱或性能下降。键入:b some-buffer-text,然后键入 Tab ,可以轻松自动完成缓冲区名称。我还使用以下行dadbod,该行允许列出所有缓冲区并打印buffer命令,以使您可以通过其编号快速切换到另一个:

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

Tim Pope有一个新颖的最新数据库{{3}}插件,可为您提供Microsoft的Database Management Studio中类似的功能。