vi 的典型用例是啥?

Posted

技术标签:

【中文标题】vi 的典型用例是啥?【英文标题】:What are the typical use cases for vi?vi 的典型用例是什么? 【发布时间】:2010-11-21 14:12:59 【问题描述】:

我最近开始学习 vi,浏览了一些教程并尝试习惯它。但我对此仍有一些疑问。

对于小的文件更改似乎很好,但是一旦我开始尝试做更大的事情,它似乎就缺乏了。例如,我习惯于进行代码格式化、导入组织、对所有包的简单概述以及 IDE 提供给我的其他内容。我在tutorials 看到了一些关于如何将 vi 用作 IDE 的内容,但充其量只是感觉很尴尬。

现在我只是想知道,vi 的典型用例是什么?它通常用于编辑小文件,还是可以用于较大的项目?如果你在更大的项目中使用它,你如何让它发挥作用?或者使用带有 vi 键绑定的 IDE 会更容易吗?

【问题讨论】:

请注意 vi!=vim。大多数 linux 都带有 vim 或 (vim-tiny),我认为 OS X 也带有 vim,但我相当确定 bsds/solaris/可能其他 *nixes 带有更基本的实现。 Vim 为编程提供了更多功能,而将 ssh/vi(m) 放入 unix 机器可能会迫使您处理 vi(如果它不是 linux 机器),它仍然提供了许多强大的文本编辑功能,但没有语法高亮之类的好东西.旧的“哔哔声”和“破坏一切”似乎更适用于 vi 而不是 vim,并且会导致很多挫败感。 【参考方案1】:

我还没有在 python 中做过任何你称之为大项目的事情(只有很少的测试脚本),但我专门使用 Vim 来编写大型嵌入式 C 应用程序,我从来没有真正觉得需要 IDE .

Vim 启动速度快,使用速度极快,并且(通过一些定制)可以完成大多数 IDE 可以完成的事情。它将完成代码完成、代码自动缩进和重新格式化,并且非常擅长重构。 project plugin http://www.vim.org/scripts/script.php?script_id=69 使管理包含大量文件的项目变得非常容易,taglist plugin http://www.vim.org/scripts/script.php?script_id=273 非常适合浏览源代码。它还允许您将 C 代码与 python 代码、汇编代码和 Latex 文档并排打开,而无需为每个代码使用不同的工具。

不过,总的来说,我认为 Vim 为您提供了一件其他编辑器很少能做到的非常有价值的东西,而且我很难失去它:我可以将一个窗口分成三个部分,如下所示:

每个子窗口都可以显示单独的文件或(如屏幕截图所示)文件的单独部分。我想 emacs 可以做到这一点(尽管我可能是错的),但我怀疑许多 IDE 可以。这对于重构和引用文件的其他部分非常有用。

【讨论】:

Netbeans 可以通过简单地拖动选项卡并将其放置在您想要的任何位置来做到这一点,您甚至可以通过简单地移动每个窗口来自定义您想要的位置。 这很有趣,谢谢 razass:我之前没有遇到任何可以显示同一文件的多个视图的编辑器。 +1 只是因为您的示例中的来源是“cscope”,这是我近 20 年来一直珍视的东西。 我很确定 eclipse(如果你想为同一个文件使用单独的窗口,你需要右键单击选项卡并选择新编辑器)也可以做到这一点 kate(kde 编辑器)。 @Roman A. Taycher:我最近看到了这个,很高兴看到 Eclipse 支持它。没有它我无法有效地编码!它在 Eclipse 中涉及的更多:右键单击选项卡,选择新编辑器,然后确定如何布置窗口以使它们并排排列。在 Vim 中,输入:vsp<ENTER>(垂直分割的缩写)或:sp<ENTER>(水平分割)就完成了。【参考方案2】:

Vim 不太擅长代码意识。它擅长的是文本操作。它为您提供了编辑文本的工具,而不是为您编辑的工具。如果您只是进行“小”编辑而不阅读偶尔的“您希望知道的 vim 命令”,您将永远无法理解所提供的功能。

代码格式

格式化是用 = 完成的。您还可以将 equalprg 指向一个外部程序来为您进行格式化。

导入整理

Vim 将无法删除未使用的导入,但如果您选择导入行

:'<,'>sort

所有包的简单概述

:vs .

这将打开一个包含当前工作目录的垂直窗口:)

总之,vim 不能替代您的 IDE,但它可以让您编辑文本。

【讨论】:

【参考方案3】:

我更喜欢 vim 而不是 vi,并且不喜欢将它们混为一谈。 Vim 提供了一些非常方便但并不总是显而易见的特性。已经提到的是屏幕分割。此外,您可能需要检查 ctags 或 exctags。这些允许您在 vim 中跳转代码库。我可以将光标放在被调用的方法上,跳转到定义,跳转到该方法中的定义等。对于追踪错误非常强大。 Cscope 是另一个类似的程序。

Vim 还将允许您在环境中运行任意 shell 命令,并具有强大的搜索和替换功能。

所以 IDE 将提供其中的大部分,vim 将提供什么优于传统的基于 GUI 的 IDE?这很简单,它在 CLI 上运行。

这允许我登录到我的开发盒,运行屏幕(绝对是不熟悉的东西:http://www.gnu.org/software/screen/)并在我的开发盒上的屏幕会话中运行多个 vim 会话。现在,当我下班时,我可以像离开时一样离开我的工作会话,即使在运行构建时也是如此。当我第二天上班时,我可以从我的环境中连接起来,就好像我从未离开过一样。

特别喜欢 vim 或 vi 的另一个原因是它几乎可以在任何 Unix 环境中找到。

【讨论】:

是的。 vi 之于 vim 就像 C 之于 C++。【参考方案4】:

这显然是一个热门话题,所以我将列出为什么我更喜欢 IDE 编辑器进行编码的原因。 1) 我更喜欢能够折叠我的代码部分(我不知道 Vi(m) 是否可以),而不必记住执行此操作的命令或键入它。

2) 我更喜欢一键式编译按钮/命令,而不是必须记住我的编译命令和它的选项库

3) 我更喜欢更简单的高亮复制粘贴操作,而不必......啊啊啊啊!!

现在你明白了。我不是在抨击 Vi(m),我只是认为让你的编码环境的元素和功能直观地呈现出来,可以让你的头脑更清晰,并鼓励你探索你可能不知道存在的选项。

【讨论】:

最后一段会更好地呈现为不那么明确的陈述,描述你所做的事情。编辑器对许多人来说是一个热门按钮,任何关于您认为特定编辑器将为每个人做什么的陈述都有可能引发一场激烈的战争。【参考方案5】:

您几乎可以在任何地方找到(或轻松安装)它 - Runs on all systems that can implement the standard C library, including UNIX, Linux, DOS, Windows, Mac, BeOS, and POSIX-compliant systems.

登录远程服务器并自信地编辑配置文件的能力是无价的。

【讨论】:

【参考方案6】:

我经常在远程系统上工作、为集群编程或在无头机器上编辑配置文件。所有这些都可以通过文件传输、常规 IDE 和另一个文件传输来完成,但仅通过 SSH 使用 VIM 要快得多。

【讨论】:

【参考方案7】:

由于以下原因,人们使用 Vi(m) 等非 IDE 编辑器进行编码,

    它们不会分散注意力,让您专注于工作。 它们不会弄乱您的屏幕区域,为您提供更多代码空间 他们更快 他们可以在手指的抚摸下进行更好/更快/更酷的文本操作 您碰巧将您的手从键盘上移开,而不是握住鼠标,将鼠标拖到这里和那里,然后单击。 它们还可以灵活地支持调试器、文档查看器等其他工具。 他们也有办法获得代码折叠等功能。

对于理想工作周期是坐、写代码、测试、调试、更多代码、测试调试的普通程序员来说。Vi 提供了一个简单而强大的环境,可以更快、更高效地完成工作。

对于使用 IDE 多年的人来说,这可能就像使用一些史前工具一样,但是一旦他们经历了最初的日子,就没有回头路了。他们会觉得没有比这更好的了。

【讨论】:

Vim 一个没有鼠标废话的IDE 所以人们... 1) 太容易分心 2) 应该获得更大的屏幕 3) 应该获得更快的机器 4) 懒得学习真正 ide 的快捷方式 5) 再次 -懒得学习真正的 ide 的快捷方式 6) 不知道如何将插件安装到真正的 ide 7) 想要输入神秘的设置命令以启用他们通过真正的 ide 免费获得的功能 开个玩笑 - 我喜欢 vi小任务和远程编辑,但我不会将它用于真正的软件开发。 @FRotthowe “真正的 IDE”中的快捷方式往往是由不了解有效键盘使用的人制作的。 Emacs 和 Vim 都具有几个 GUI IDE 尚未匹配的杀手级功能:1) 语义、分层快捷组织(ala Vim 的 组合,或 Emacs 的 Cx/Cc/Mx 前缀系统),2) 完全可定制的快捷系统,定制可以在系统之间轻松共享和移动,3) 一个基于键盘的系统,用于以驱动所有编辑器功能和配置的脚本语言输入命令。 @John I love vim 的文本编辑和脚本功能,以及可定制性。我只是不需要那种编程功能,其中智能完成、语义导航(跳转到超类、打开调用层次结构)和可视化调试器要重要得多——至少对我来说是这样。 @FRotthowe 好点,我同意。我想说您引用的功能包括现代 IDE 完成、导航、工具集成(调试器、GUI 编辑器、分析)的杀手级功能。我还会在列表中添加语义操作(ala 重构)。干杯!【参考方案8】:

我看过一些关于如何将 VI 用作 IDE 的教程,但充其量只是感觉很尴尬。

一开始有一件事情要做:把你的审美意识抛到脑后。您将永远在 VIM 中获得与在体面的 IDE 中相同的图形体验。

也就是说,VIM 实际上确实提供了成熟 IDE 的许多功能,并且还有很多优势。我几乎所有的开发工作和所有文本文档都使用 VIM(使用 Vim-LaTeX)——尽管我实际上已经为 Apple 的办公套件 iWorks 付了钱。

不过,有一点仍然困扰着我:I can't get IntelliSense to work。对我来说,这是一个很大的问题,尤其是在使用 VB、C# 或 Java 等语言时,因为这些语言有出色的 IDE 支持。

因此,VIM 的学习曲线是陡峭的,但是一旦你通过了某个点,一切都会变得很尴尬。事实上,对比 VIM 的编辑体验,你会发现突然觉得尴尬的是 IDE,因为它们虽然擅长记账,但在编辑方面却很烂。

【讨论】:

你知道 ViEmu 对吧?然后你会得到 Vim 智能感知。 @Brian: 没试过,我也不用Windows了。这也不一样,因为 VIM 在与终端的集成上蓬勃发展,这在此处完全丢失了。我喜欢使用 makefile 和 bash 脚本。【参考方案9】:

Why, oh WHY, do those #?@! nutheads use vi?

【讨论】:

【参考方案10】:

像往常一样:根据您要做的工作选择您的工具! ;-) 我正在使用 Vim 和 Visual Studio。您不必只选择一个。

如果您需要 IDE,请使用 IDE。 Vim 是为文本操作而设计的。 它支持任何语言。尝试使用 Visual Studio 编辑 Ruby 脚本。 大文件的性能比大多数 IDE 好得多。尝试使用 IDE 分析包含 10 万行及更多行的日志文件。 它在许多平台上运行,如果您必须在服务器上编辑文件,您可以通过远程控制台使用它。 ...

IDE 是专门的工具,可以很好地解决它们所针对的问题。 Vim 是一个令人难以置信的灵活和强大的通用工具。

【讨论】:

【参考方案11】:

这就是我使用它的原因。

    启动速度很快 它可以跨多个平台使用,并且可以在所有 Unix 机器上使用 使用速度很快(常用操作的击键、基于单词/段落的操作等)

但是,我将 IDE 用于大规模开发工作,因为考虑到它们的代码意识和重构能力,我无法相信它们在生产力方面可以被击败。我使用 Eclipse,但我在其中插入了一个 VI 编辑器模拟器。详情请见this answer。

【讨论】:

当您在 IDE 的工作效率上处于正确位置时 - 您始终可以安装其他工具,让您的手永远不会伸手去拿鼠标。我知道一个 .NET 程序员讨厌鼠标,并且将他的整个 PC 设置为使用键盘(甚至是 firefox 和 VS2008)【参考方案12】:

多年来,我一直使用 VI(M) 和 Emacs 作为我的主要编辑器...我尝试切换到 IDE,但发现它们无法摆脱我的束缚。一段时间后,我总是回到 VI(M) 或 Emacs。一个主要原因是我发现我的手需要在 IDE 中过多地离开键盘,因为它们经常需要鼠标……而且我懒得为所有东西设置自己的快捷方式。

【讨论】:

以上是关于vi 的典型用例是啥?的主要内容,如果未能解决你的问题,请参考以下文章

多线程与服务的典型用例是啥?

bash中noop [:]的用例是啥?

cudaGraphicsGLRegisterImage中cudaGraphicsRegisterFlagsWriteDiscard的用例是啥?

NSURLSessions 后台会话的正确用例是啥?

DataSet Spark 的用例是啥?

持久的有序消息代理的用例是啥