使用命令行 Vim 和 GUI Vim 的原因

15

背景

我正在开发一个应用程序,它可以检测您从文件系统中使用的文档。为了做到这一点,它必须访问活动窗口的AXDocument属性。MacVim 可以提供此功能,而在终端中运行 Vim 就不能实现。

我刚刚发布了一项调查,询问对我的应用程序感兴趣的编辑器编码人员使用哪种编辑器。有相当数量的人使用命令行直接使用 Vim。

为什么不使用 GUI Vim?

为什么有些人更喜欢以这种方式运行 Vim,而不是像 MacVim 这样的 GUI 版本?

这样做有什么好处呢?据我所知,您可以像使用命令行 Vim 一样轻松地将文件发送到 MacVim 中。


1
еҰӮжһңдҪ жӯЈеңЁеҜ»жүҫжү“ејҖзҡ„ж–Ү件пјҢжҲ‘дјҡиҜҙlsofжҳҜдҪ зҡ„жңӢеҸӢпјҢжҜ”AXDocumentжӣҙеҘҪз”ЁгҖӮиҖҢдё”lsofеҸҜд»ҘзңӢеҲ°CLеә”з”ЁзЁӢеәҸжү“ејҖзҡ„ж–Ү件гҖӮ - JSBձոգչ
1
AXDocument相对于lsof在我的需求方面有许多优势。有时应用程序不会保持文件处于打开状态。而且lsof并没有给我任何关于用户正在编辑或活动的文件的指示。 - John Gallagher
这个问题可能应该是社区维基的。 - intuited
12个回答

19

对于每个开发者来说,这些原因可能不同,但我猜测可能是:

  1. vim在任何平台上都几乎相同。GUI实现可以有所不同。
  2. 熟悉度-熟悉vim并不意味着熟悉vim包装的GUI-尤其是考虑到第一点。
  3. "精英情结" ;-)
  4. 与cli vim相比,用户没有明确的优势。

10
我喜欢精英综合体。很少有什么比惊艳你的困惑同事执行一个出色的搜索和替换更让人满意。+1 :) - Paul Alan Taylor
1
@Paul:哈哈,我同意。看一个专业人士使用vi/vim(甚至是emacs呢),或者Quicksilver就像在你眼前看到了魔法一样。 - prodigitalson

17

有时候可能没有图形用户界面(比如SSH),或者只是因为习惯的原因。


7
我每天都通过ssh+screen在vim中工作。 - Lucas Oman
4
如果您启用X11转发,就可以在ssh上运行gvim: ssh -X user@host gvim - jabirali

12

虽然我不使用GUI版本独有的功能(编辑时从不触摸鼠标),但我发现GVIM在字体渲染和颜色管理方面更加易于眼睛感受。因此,仅有的使用cli版本的原因是无法访问图形环境(例如通过ssh访问远程机器)。使用GVIM还可以重复使用调用它的终端而无需使用screen


10
  • screen下运行vim具备以下优点:

    • 可靠性:如果X或终端应用程序崩溃,它将保持运行状态。不确定这是否适用于Mac。
    • 在终端选项卡中复用会话的选项。我实际上很少使用终端选项卡,因为有了这个功能。可以(虽然有点混乱)设置层次结构的screen会话并移动它们的分支。screen超级棒。这还提供了一个额外的文本缓冲层,您可以通过正则表达式进行搜索——如果您产生的shell命令有数页之长,并且您正在寻找其中的特定单词,则这非常有用。
    • 从另一台计算机连接到现有会话或在网络故障后重新连接的能力
    • 等等
  • 除了使screen的使用成为可能,控制台vim提供了更好的shell集成。虽然可以从gvim内部运行shell命令(再次说明,我不确定这对Mac如何适用,我是Linux用户),但存在限制。我很少使用图形界面的vim,所以我不确定确切的限制。例如,ANSI颜色代码被删除了。我认为这很烦人,因为我倾向于以这种方式与SCM交互,例如运行:!git diff --cached以在提交之前检查索引中的更改。如果它有着色,它将更快且更令人满意(嗯,差异!)。

  • 我曾经认为gvim对于查看差异来说是一个很大的改进,但我已经将终端的背景颜色更改为深色而不是黑色,并设置

:highlight DiffAdd ctermbg=Black
:highlight DiffChange ctermbg=Black
:highlight DiffDelete ctermbg=Black
:highlight DiffText cterm=Bold ctermbg=None
这导致在diff模式下,不同的文本会显示黑色背景,未更改的文本则会使用终端背景颜色进行着色。对于并排比较来说,这非常有效,因为你可以立即确定给定行是更改或添加,基于另一侧的内容;对于非并排比较,你可以看到一个未更改的部分在已更改的行中。
这意味着你可以保留语法高亮,并仍然能够看到差异。再次强调,你需要设置终端背景颜色为一种独特的暗色,非黑色的颜色。我使用的终端仿真器(yakuake/konsole和roxterm)以及许多其他终端仿真器都支持此功能。
这还假设你正在使用用于暗背景颜色的颜色方案;我使用了修改后的delek。
尽管我没有尝试过这个选项,但也有一种选择可以在支持256色模式的终端上运行控制台vim——我相信这包括大多数现代终端。这可以使GUI颜色方案的大部分细节在控制台vim中可用。
我还喜欢它可以在开始的位置生存,并且启动速度很快。如果我在shell中浏览,我可以在不中断流程或将该操作委托给不同的概念空间的情况下编辑文件。减少需要跟踪的东西是一个大的优点。能够将其放到后台也很有用,例如如果我需要通过xclip获取未导出的shell变量的内容。如果我产生了一个GUI窗口,我可能会有些麻烦记住那个shell在哪里,或者可能已经关闭了。
我使用GUI vim的主要原因是它作为从GUI应用程序(例如浏览器)派生出的东西,这听起来更有意义。实际上,我从来没有这样做过,我认为只需在新的终端窗口中弹出一个新的控制台vim就足够了。尽管GUI实现可能有一些(窗口管理器)窗口管理功能是专有的。这与你正在讨论的用例非常相似。

2
等一下,你在使用没有256种颜色的 vim?这太奇怪了...我为糟糕的语法高亮感到难过。 - Konrad Rudolph
1
哈哈...我完全不觉得这是个问题,但也许我只是不知道我错过了什么?我确实调整了我的终端颜色以改善对比度,但我仍然使用8/16。 - intuited

5

gvim实际上只是一个带有vim的基本终端仿真器,以及一些菜单和工具栏按钮。

因此,如果您已经有一个功能齐全的终端仿真器,最好使用它,因为您将在所有终端会话中使用熟悉的终端窗口类型。

另一个好处是它可以轻松切换到vim内部的shell,然后无缝切换回来。

在Windows上,我更喜欢gvim。在Linux上,我使用gnome-terminal中的vim,这比较好配置,谢谢。


3
为了避免(或至少最小化)使用鼠标。

5
我使用gvim、macvim和一般的vim编辑器,并且在它们中间都不使用鼠标... - rfunduk
鼠标也可以在某些终端中使用,例如在 Gnome 终端中。 - chtenb

3
  • 一些gvim的变体无法处理我的一些热键。

  • 当我尝试编译程序时,有些会产生单独的窗口。

  • 有时它们无法正确使用字体,如fixed或terminus(考虑“terminus bold”- 一些gvim变体只是拉伸“terminus normal”,而不是用单独的字体渲染)。

  • 与GUI相比,CLI通常更快,特别是在实际文本模式控制台中运行(但在Mac上不可能)。

  • 使用GUI版本几乎没有好处,而且我会失去在screen、ssh中运行、使用ctrl+z挂起进程等许多功能。


你不能只是使用不同的字体吗? - intuited
是的,您可以使用任何您喜欢的字体。 - Alexey Yakovenko

2

对于大文件(例如100-500MB的.csv或.xml文件),vim表现更出色。

如果用于文件比较(gvimdiff),gvim胜过vim:设置字体(想在屏幕上显示更多内容?),拖动窗口分割线(想看到一个文件的更多内容而不是另一个文件)等。

除此之外,我没有看到其他主要区别,并且在使用图形环境(gnome)时发现gvim更方便,因此除了处理大文件时,我都使用gvim。


1
我不同意你的第二段。在我使用过的任何终端中,字体大小都可以通过CTRL-MINUS和CTRL-PLUS进行设置;例如,通过CTRL-W_10_<来减少当前窗口的宽度10个字符来调整窗口大小。虽然需要一些练习,但这最终对于大多数甚至每一个使用情况来说都更加高效。 - intuited
我感谢这些信息并且认为自己有所修正...虽然我要说对于大多数人来说,用鼠标拖动窗口分隔符比使用Ctrl-w_10_<更直观和更快,所以我会让我的答案保持不变,让人们阅读评论以获取更多信息。 - Tomislav Nakic-Alfirevic
如果您在GUI中运行vim,仍然可以拖动分割线。 - Daenyth
@Daenyth:可能与你的环境有关,但在我的机器上,在gnome-terminal中运行vimdiff时无法拖动分割线。 - Tomislav Nakic-Alfirevic
1
如果您在终端中运行vim,通常:se mouse+=a将允许您拖动窗口边框,即使在通过ssh在GNU screen中进行vim会话时也是如此。当我发现这一点时,我感到震惊(以好的方式)。 - sehe

2
  • 渲染速度
  • 与合适的shell集成
    • 挂起(C-z),
    • 备用终端,
    • 统一的复制/粘贴
    • 更好的快速修复集成(所有外部程序在您的终端中运行,而不是弹出窗口...)
  • 网络无关:可以通过ssh运行
  • 使用GNU screen,可以在互联网上分离/附加会话;

有时提到的“缺点”:

  • 鼠标支持与:se mouse +=a相当;这使得选择、使用鼠标拖动窗口边框,甚至在通过ssh使用GNU screen时也能实现。

2
我使用命令行的主要原因是因为我大部分时间都在终端中工作,我的vim使用也反映了这一点。我不会打开vim长时间编辑不同的文件,然后再打开其他文件而不关闭它;通常我会打开一两个文件进行一些编辑,然后执行一些命令行任务,可能会更改目录,然后在其他位置打开vim。当使用GUI时,在打开编辑器时会有相当大的延迟。如果我只打开一次并保持打开状态,这不会困扰我,但我倾向于不这样工作。因此,命令行更适合我的工作流程。此外,由于GUI与命令行之间在功能上没有真正的优势,我始终坚持使用命令行,因为它更适合我。

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