从我所见。emacs 等.. 在终端中运行。这有什么好处吗?看来写和整理东西会比较麻烦。我并不想主观我对emacs、vim、nano等一无所知。我想知道更多,也许可以使用其中的一个。
9 回答
你的问题是一个棘手的问题。即使他们确实在终端运行,这也不是他们的主要优势。我现在正在谈论 Emacs 和 Vim。简而言之,它们已经存在至少 20 年(Vim)或更长时间(Emacs),它们有一个非常活跃的社区,它们是可编写脚本的,所以如果你知道如何使用它们,你几乎可以用它们做任何事情。重新非常强大。
它们有相当大的学习曲线,所以在熟练之前,你可能最终会在它们中摸索数周,甚至数月。学习它们的主要动机是生产力。与记事本相比,你可以用最少的按键完成一些非常棒的事情。
试一试。如果你喜欢它,坚持一段时间,忍受痛苦,然后你就会看到好处。这几乎就像去健身房一样。
现在大多数人都使用 IDE。他们帮助你通过分析你已经写过的东西得到的东西。这些东西可能非常有用和有帮助,但它们对实际编辑代码的核心任务并没有真正的帮助。工具制造商所指望的是,这些额外的东西提供了足够的好处,它将超过 vim 和 emacs 作为编辑器的有效性。他们在大多数社区中几乎赢得了这场战斗,主要是因为新开发人员面临着在出色的代码完成和易于使用的重构支持之间做出选择,以及他们在大约 6 个月内不会看到任何好处的编辑器。简单的方法。我知道我做到了。
我现在是一个 vim 人。Vim 似乎并没有真正具有相同的生产力上限,我已经使用它一年多了,并且半定期仍然会遇到一些我不知道的事情,这让我更快。即使没有它,我使用它的次数越多,对我正在做的事情的思考就越少,这再次让我更快。此外,vim 存在于每种语言和平台上,并且开箱即用地安装在任何 UNIX 服务器上。它没有任何加载屏幕,几乎可以跳到屏幕上,可以出色地处理大文件,并且永远不会减慢或崩溃。您通过它学习的技能将适用于您在余下的职业生涯中所做的一切,而不是随着您更改平台而改变的 IDE。
Vim 是一种投资,但如果你谈论的东西几乎在你的余生中每天都会使用 8-10 个小时,那么学习曲线就变得完全无关紧要了。
没有真正的理由使用 nano。几乎任何东西都更好。
至于 vim 和 emacs,这是我上次提到的内容:
我对 vi 键绑定比较熟悉,但总体上我更喜欢 Emacs。这些编辑器拥有如此狂热的追随者的原因是因为他们提供的编辑模型比新系统更强大,这就是为什么提供“vi keybindings”或“emacs keybindings”是不够的,即使你没有使用任何扩展功能或 emacs 或 vi 的自定义。
我只会谈论 Emacs 的模型,因为我最了解它。当今文本编辑的常见模型涉及文本缓冲区,可以在其中插入、删除、选择和剪切/复制/粘贴文本到系统剪贴板。
Emacs 缓冲区当然可以支持这些操作。除了跟踪它们可见的每个窗口的光标位置外,它们还跟踪其中的“标记”。“点”(光标位置)和“标记”之间的文本称为“区域”,大致对应主流编辑器中的选择。
不同之处在于 Emacs 会跟踪标记在标记环中设置的最后几个位置,并且您可以通过击键(或两次,取决于您的配置)返回它们。我发现这非常有用,特别是因为许多更改缓冲区中位置的 Emacs 命令将标记设置在旧位置。一个例子是当我正在编辑一个 Python 模块并且需要在文件顶部添加一个 import 语句。用于转到缓冲区顶部的按键 (Alt-<) 设置标记。我添加了导入语句。我按下 Ctrl-u Ctrl-Space,然后我又回到了我开始的地方。我也可以继续这样做以循环回到以前的位置。(也许我需要在添加导入语句时选择一些文本。)
Emacs 的另一个(也是更广为人知的)区别是 kill ring。大多数从缓冲区中删除文本的击键将文本保存到终止环,然后可以使用“yank”命令(Ctrl-y)调用。基本特征是后续的 yank 命令检索较旧的终止文本。因此,您可以连续删除多个文本部分,然后按顺序检索它们。您还可以在 yank 后使用 Alt-y 在 kill ring 中循环,删除检索到的文本并在 ring 中插入下一个条目。
Emacs 在 1978 年就有了这些特性。在任何程度上采用它们的唯一其他主要系统是 NeXTStep(现在由 Cocoa 继承)。其他工具为特定任务提供更多功能,可以以比 Emacs Lisp 更易于使用的语言方式进行扩展,并且具有更好的可视化界面……但 Emacs 在文本编辑方面仍然更好。这就是为什么,一旦你知道如何使用它,就很难戒掉。
Vim 摇滚
Vim 更难学习(您必须记住要使用的命令),但比我见过的任何 IDE 或 GUI 编辑器都强大得多。
vim 的部分秘密在于它最终继承了由 Ken Thompson 自己编写的 ed(1) 文本编辑器的行模式。它非常强大:它可以用于重构,甚至可以放入脚本中。它基于正则表达式模式替换。
凭借所有这些功能,因为它是一个老式的终端/xterm 应用程序,它可以立即启动并且永远不会有可检测到的延迟。
我已经多次切换到 IDE 和 gui 编辑器,但不断回到 vim。我想这一次我会坚持下去,避免绕道而行。
笔记:
如果您的 IDE 支持重构,那就是使用 IDE 的理由。我只是将其用作复杂的编辑任务示例。
值得注意的是,vim 似乎有助于对抗 RSI,让您的双手更加放松。命令是未修改的键,因此您无需在按住 control 或 meta 或 command 或 bletch 或其他任何东西时拉紧手腕。
使用 VIM/Emacs 有两件事(大致):
- 可定制性
- 他们到处跑
两者都需要投入时间来学习。但是一旦您使用任何其他编辑器学习它们,就会感到自卑。
Emacs 和 Vim 是我能想到的最精致和多功能的软件。
在 unix 环境中工作时尤其如此,其中纯文本文件用于所有内容(代码、脚本、配置、进程等)。
这些工具需要一些时间来学习,甚至需要更多时间才能掌握,但它们可以让你一整天都获得意想不到的生产力。
我在 1990 年左右开始使用它们。20 年后,它们仍然是我的首选。它们是我在配置机器时安装的第一个工具,当我当前的 IDE 卡住时,它们总能让我更进一步……想想 regexrename 数千个文件,应用文本文件的复杂重新格式化,或任何其他文本导向的任务。
emacs——我想,vim,也许——有几个优点:
- 更多屏幕空间。
- 真正的终极可扩展性
- 最小的内存使用。我已经打开了 100 多个文件,包括多个远程编辑文件,使用的内存不足 35 MB。
- 除非您必须重新启动计算机或升级 emacs,否则 Emacs 永远不必关闭。我通常会连续运行一个 emacs 进程数周。
- 非常容易修改。如果我愿意,我可以在一天内为 DSL 设置一个突出显示模式。带有或多或少起作用的缩进。而且我什至不擅长emacs。
- 由于您可以轻松地重新映射按键以支持您的个人手形和首选键盘形状,因此手感更轻松。
- 可靠的。我可能曾经强迫 emacs 崩溃过一次。
- 在我可以访问的任何地方运行。可能一些较旧的 IBM 390 系统可能无法运行它...
我使用过 Visual Studio 和 eclipse。它们在原始文本编辑方面不如 emacs。它们的速度要慢得多,支持的语言也更少。
我听到的关于 emacs 的唯一有意义的反对意见是“没有智能感知”。当我在那里进行编辑时,我不使用 VS/Eclipse Intellisense。此外,据我所知,emacs 中的自动完成机制更出色。(例如,自动完成变量名)。
当然,它确实需要一个学习曲线。对于 emacs,我认为 1 个月的日常使用将使您达到日常使用的舒适能力。
我经常使用 vi(我现在在工作中使用它是因为我懒得启动一个 xserver 并且因为它启动速度很快),但这仅仅是因为我必须学习它(我的意思是“它”一个相当小的命令子集)很多年前,它对于远程编辑文件很有用,有时 gedit 或任何不可用的东西。
只是为了过去,我刚刚再次启动 emacs,看看我有多讨厌它,然后我不得不在谷歌上搜索一份备忘单,告诉我如何关闭它。所以我认为公平地说它不直观。
我认为,使用神秘的组合键在黑底绿字终端上工作时,将自己视为 Neo(Matrix)要比使用友好的 GUI 坐在那里容易得多。
Vim 有大量的命令,如果这些命令不足以完成您重复执行的任务,您可以定义自己的命令。但是,在您只知道非常少量的这些命令之后,您就可以有效地使用 Vim,因此您没有大量的知识可以开始学习(尽管您会摸索几天)。您还可以应用基于正则表达式搜索的命令,如果您想对满足某些复杂条件的每一行应用特定更改,这将非常方便。我无法想象这些天不使用 Vim 编码。