【问题标题】:I am looking for tips for learning Vim or Emacs the smart way我正在寻找以聪明的方式学习 Vim 或 Emacs 的技巧
【发布时间】:2010-12-21 05:45:30
【问题描述】:

我是 Eclipse 的一个非常高兴的用户(我主要使用 PHP 和 Python 进行开发),但是我发现 "What specific productivity gains does Vim/Emacs provide over GUI text editors?" 的答案很有趣,让我也想尝试一下 VimEmacs 看看如果它们对我来说是一个更好的解决方案。

我总体感觉 Vim 和 Emacs 不是那种通过“玩弄”来学习的编辑器。我的印象是,您必须花一些时间和精力来“研究”一下它们,然后才能从它们的力量中受益。

所以,我有两个问题要问社区:

  1. 在链接的线程中,响应者基本上是通过评论 Vim 来回答的(经常提到:“我确定 Emacs 有相同的”)。 Google trends 似乎表明 Vim 是两者之间最常用的,但是我的第一个问题是:知道我在这两者中没有任何经验,并且我使用和开发(主要是 PHP 和 Python)在 GNU/Linux 系统(Ubuntu,Arch Linux)上,有没有哪两个可以代表更好的选择?(要明确:我的问题与质量无关 em> 的编辑,但它是关于在我的情况下从战略上更好地学习)。

  2. 关于如何学习使用它/它们,您会给我什么建议?我知道这是一个广泛的问题,但它是故意的。查看this answer(不相关的主题)了解我正在寻找的信息/答案风格[但不觉得有义务以这种方式回答......任何形式的贡献都将受到欢迎! ]

编辑(选择“接受的答案”)

我刚刚选择了一个答案作为接受的答案,但我想对所有分享他们的经验和建议的人说声“谢谢”:几乎所有这些都对我有用某种程度上来说。该线程绝对超出了我的预期!谢谢! :)

【问题讨论】:

    标签: vim emacs ide editor


    【解决方案1】:

    我建议检查两者都值得花时间,因为其他答案或“Emacs vs vim vs XY”线程已经涵盖了各种原因。

    如果你必须选择其中一个,我会选择 vim,因为一件事:

    可用性

    Vi(m) 的优点是它默认安装在几乎所有 *nix 系统上(不仅可用)。因此,无论是您的系统还是其他人的系统,或者您是否允许对其进行更改,您最喜欢的文本编辑器和朋友都在那里等着您。

    一旦您知道 vi(m),在您 ssh 进入机器并需要对文本执行某些操作(浏览文件、编辑等)的情况下,感觉很棒。你会觉得自己像个国王。我记得有几次我几乎吓坏了,因为没有安装 nano 或 pico,我不得不使用“这个丑陋的野兽 vi”,当我开始打字时,这会产生不可预知的事情(因为我没有处于插入模式,甚至不知道那是什么)当我很高兴在谷歌上搜索到“:wq!”时让我脱离地狱。现在我可以回首往事并对此微笑。

    我总体感觉 vim 而且emacs不是那种编辑器 你可以通过“玩”来学习

    Vim 和 Emacs 无疑是您“边做边学”的编辑器。

    当然,问题在于包含这些高度科学的文本编辑器学习曲线图 =)

    Vim 一开始可能会有点难,因为它的模态编辑一开始会让人觉得很陌生。我认为动机是这里的关键。文章“Why, oh WHY, do those #?@! nutheads use vi?”很好地解释了我认为的优势。我认为确实值得一试,即使学习曲线可能比其他编辑更陡峭,而且听起来你带来了必要的动力。

    回到边做边学

    我希望我第一次做的事情:

    查看Vimtutor。这是一个交互式教程,通过展示 vim 的基本命令以及如何组合它们来展示 vim 的强大功能。只需在终端中输入vimtutor

    在过去几次尝试学习使用 vim 编辑之后,这帮助我真正“get it”。该教程极大地简化了学习曲线,因为它解释了命令并让您实际执行它们,从而使它们成为一种习惯。与因为感觉残疾而感到沮丧相比,这真的很重要。使用vimtutor,您还将看到模态编辑的好处是什么,而不是对抗或忽略它,您将接受它,因为您亲身体验了它的优势。我想这一切都很难自学。所以这 30 分钟是非常值得的。

    【讨论】:

    • 作为一个 Emacs 用户,我不喜欢你的结论,但不能错在逻辑上。每个可能接触过 Unix 机器的人都应该学习 vi 至少足以进行简单的编辑和保存。即使您打算使用 emacs 作为主编辑器,vi 的简单性和可用性也使其成为您对可能需要远程登录的不熟悉的机器进行小的配置更改的首选编辑器。
    • @T.E.D 当然我同意这不是一个非黑即白的世界,尽管有些人可能会这么认为。有足够的时间研究多个编辑器。例如,如果您是 OSX 用户,则某些 emacs 命令(例如跳转到行首或行尾)以及许多其他命令将适用于每个标准文本框和支持 readline 的终端。
    【解决方案2】:

    我总感觉 vim 和 emacs 不是那种你通过“玩”来学习的编辑器。

    我对 emacs 的体验实际上恰恰相反。我尝试通过教程,但它似乎没有太大帮助。我最终学习的方式是使用reference card 并且只是强迫自己在我的代码上使用 emacs,直到我得到它正确*。再说一次,我也确实有一个螺丝松了。您的里程可能会有所不同。在禁止的地方提供无效。你明白了。

    我记得在某处读过的另一条建议是尝试写下您想学习的大约 10 个命令的列表,并在编码时随身携带。掌握了这些命令后,再列出 10 个以上的命令。继续这样做,直到您将足够大的编辑器块提交到内存为止。

    *请注意,链接的参考卡已过期。如果您使用 Google 搜索,您可以获得更新的参考卡。

    知道我没有先验 体验任何 二、我使用和开发的 GNU/linux 上的(主要是 PHP 和 Python) 系统(ubuntu,archlinux),有吗 两者中的任何一个将代表一个 更好的选择?

    我是一个 emacs 人,所以我的观点应该是显而易见的。也就是说,您最好尝试一下您认识的更多人似乎使用的那个。拥有熟悉 emacs(我认为是 vim)的人会很有帮助。

    如果您不认识使用其中任何一种的人,请选择您认为最漂亮或名称最酷的任何一种。你不会知道你会喜欢哪一个,所以你还不如随意选择。

    【讨论】:

    • 完全同意。仅将其用于项目并拥有参考卡以防万一,这很难出错。
    • 第二个想法是在你面前放一张参考卡,然后开始'玩'emacs。这就是我熟悉 emacs 的方式。
    【解决方案3】:

    vim 试试 vimtutor

    【讨论】:

    • @everyone 阅读此答案并想知道 vimtutor 是什么:vimtutor 是一个插入 shell 的命令。见:gd.tuwien.ac.at/linuxcommand.org/man_pages/vimtutor1.html
    • 是的——我就是这样接触 vim 的。我用了不到一个小时,而且非常简单,所以这是学习 vim 的一种非常简单的方法,或者至少尝试一下。
    【解决方案4】:

    我在经过多年的 Windows 开发后开始使用 Linux 时来到 Vim,并且不得不通过 ssh 在远程系统上做很多工作。前几周讨厌它。在那之后,我不能没有它。

    可能最好的开始方式是在简单模式下使用 Vim ([g]vim -y),大多数安装都有一个名为 evim 的快捷方式。这在默认情况下处于插入模式的模式下运行 vim,并将键重新映射到通常的 Windows 键(ctrl-S 保存,ctrl-X 剪切等)。然后,您可以像使用普通的 Windowsy 编辑器一样使用它,但仍然可以访问 Vim 的强大功能。

    还有Cream,它是 Vim + 一堆脚本,使其表现得更像 Windows 编辑器。

    我开始使用 evim 和 Cream,但发现我逐渐过渡到使用 100% vim。

    此外,如果您使用 gvim,那么大多数功能也可以通过菜单使用,您可以看到相同功能的击键。

    还可以阅读文档 - 各个方面都有大量的帮助文件。我仍然不时浏览它们并找到新的东西。

    【讨论】:

    • @Dave - 我也赞成你的回答,因为它确实包含有用的提示,但我想澄清一下,我不是 Windows 用户,也没有开发经验那个平台,所以 - 除非“Windows”是指“eclipse” - 让 vim 更接近 Windows 对我来说不是一个加分项。
    • 即使作为 Emacs 用户,我也赞同这样的观点:任何让编辑器“更接近”Windows 世界的东西,在我的字典中都是一种倒退。
    • “Windows 编辑器”是指使用 Windows 键盘快捷键和行为约定的编辑器,包括 Eclipse 和 Linux 编辑器,例如 Gedit。
    【解决方案5】:

    使用 VIM,我发现以下快速参考卡非常有用,尤其是对于我不每天做的事情: VIM QuickReference

    对于 emacs,您应该阅读 GNU Emacs Manual。不要试图一次做所有事情。 从基本的东西开始,然后在您对更简单的东西感到满意后继续使用更强大的功能。

    【讨论】:

    • 你关于不要一次完成所有事情的建议让我想起了我曾经得到的关于学习 emacs 的一条建议。谢谢!
    • 顺便说一句,我喜欢这两个编辑器,但我发现 emacs 更容易为其编写新功能,而 vim 在尝试通过 ssh 连接编辑远程文件时更好。然而,最糟糕的情况是试图同时在脑海中记住这两个命令:先坚持一个,掌握它,然后再尝试学习另一个。
    【解决方案6】:

    前段时间,我决定在 Eclipse 旁边学习 vim,因为它具有强大的文本编辑、搜索和导航功能。但是 - 同时 - 我喜欢 Eclipse 的项目处理、代码完成、重构和调试功能,我不想失去它们。

    现在我使用一个名为 vrapper 的 Eclipse 插件,它在 Eclipse 中为我提供了 vim 的几乎所有基本功能,而不会丢失任何 Eclipse 功能。当然,它不是一个功能齐全的 vim,但它给了我“预期”的生产力提升(动作、点运算符、寄存器和标记)。此外,这个插件可以被认为是 vim 的“试用”版本,您可以在“最知名”的环境中学习所有基本和一些高级的东西。

    还有另一种有趣的方法称为eclim。 Eclim 从 vim 端将 Eclipse 与 vim 集成,因此您可以在 vim 中使用 Eclipse 的许多功能。

    对于学习vim的基础知识,this graphical cheatsheet对我帮助很大。

    【讨论】:

    • 非常感谢这两个建议。它们对我来说都是新的,它们似乎是值得尝试的东西,尽管我不得不承认我正在考虑进行切换的原因之一是 eclipse 的巨大资源占用,而且更肯定的插件不会使它变得更小。 ..
    • 听起来他所做的只是修改 Eclipse 并将其声明为 vim。
    【解决方案7】:

    我会选择 Emacs。 显式命令名称将使您的任务更容易。 在我拥有多年的 vi 经验后,我转而使用 emacs,并且从未回头。 先上教程。 在 irc 的 #emacs 上闲逛,人们很乐意为您提供实时帮助,无论您需要什么。

    【讨论】:

      【解决方案8】:

      我对学习 emacs 的建议是了解一切都是通过连接(绑定)到您所做的击键的命令(用 elisp 编写)完成的。 emacs 的强大之处在于能够编写新命令并使用未绑定到键的命令(有太多命令无法将每个命令绑定到命令。)当然,还可以读取和修改已经存在的命令emacs。

      接下来学习如何使用Help键以及如何制作键绑定列表,然后学习如何搜索相关命令(中肯)并查看是否已经绑定。

      准备好将学习转移到 emacs 手册中(帮助、阅读手册、Emacs 手册)。

      【讨论】:

        【解决方案9】:

        如果您了解 Python,那么支持 Vim 的一个论点是您可以用 Python 编写 Vim 脚本。见:h python。 Emacs 要求你学习 elisp。

        我发现自己倾向于使用 Vim 来编写 Ruby/Perl/Python/PHP 等脚本语言,而使用 Emacs 来使用更具交互性的语言(本质上是 Lisp)。如果您经常使用交互式 Python shell 开发 Python 代码,那么 Emacs 可能会很好,因为您可以将 Python shell 直接嵌入到 Emacs 中。如果你经常编写代码并从命令行运行它,Vim 可以通过 :make:! 轻松处理。

        我真的建议你两者都学,然后选择你更喜欢的。他们都值得了解。

        【讨论】:

        • 我同意你的观点,Vim 更适合 Web 开发,尤其是 PHP 和类似语言。
        【解决方案10】:

        哇,vi/vim vs emacs,好诱人啊……

        从 vi 用户的角度来看...

        • 始终存在
          vi 几乎在所有发布的 unix 系统上都有,在默认安装中,并且可用于 Win
        • 可能会使您免于 RSI
          vi 几乎所有内容都使用主行键,控制和元等修饰符仅用于很少调用的功能,甚至 shift 键的使用也适中。这可能只是一个幸运的意外,但不要嘲笑 RSI。它可能发生在任何人身上,非常痛苦,可能会导致职业生涯终结,而且很难治疗。
        • 立即启动
          在过去,这比 emacs 具有巨大优势。 Emacs 用户只需启动一次,就可以在 emacs 中到处导航。今天它启动得更快,但在 vi 中,在每个编译或测试周期完全退出它是完全合理的。
        • 有一个很棒的行模式
          vi 中的行模式向后兼容原始的 Unix ed(1) 程序,一个只有行模式的编辑器。也就是说,vi 的正则表达式替换引擎/行编辑器曾经是一个完全独立的编辑器。
        • 易于编写脚本
          您想对项目中的每个 .whatever 文件执行一些操作吗?编写将编辑一系列文件的声明性脚本很容易。无需命令式或过程式编程。
        • 易于扩展
          至少,Vim 可以在 Python 中进行扩展。

        【讨论】:

          【解决方案11】:

          首先,要谦虚。

          只要您始终意识到它们是非常强大的工具,就可以了。如果您发现一项任务非常困难,并且您认为“只有我很糟糕,而不是编辑”,那么您的学习和改进思路是正确的。

          Bram 的 7 个习惯是值得遵循的好原则 http://www.moolenaar.net/habits.html

          另外,我强烈建议您尝试编写插件。它做什么都没关系。它为您提供深入研究手册的动力。

          【讨论】:

            【解决方案12】:

            也许,一个好方法是在使用 eclipse 的同时学习 vim/emacs。尝试使用 vimpluginemacsplus eclipse 插件。

            【讨论】:

              【解决方案13】:

              这实际上应该只是一个评论,但针对哪个答案......

              使用 Vim 我建议首先使用 GUI 版本,只需深入了解,内置帮助非常好(:h 和屏幕分割添加具有全面“超链接”帮助页面的面板)。使用 vim 唯一潜在的危险操作是写入,您所做的其他所有操作都可以通过命令或编辑(撤消和重做)恢复。

              轻松获得的力量可以激励学习。

              【讨论】:

                【解决方案14】:

                您的学习方式如下:开始输入。当您遇到想要做的事情而不是打字时,请查看您是如何做到的。重复。它有助于从一些基础知识开始,比如 7 个基本命令。除此之外,当你遇到想要做一些操作的时候,查一下并使用它。

                【讨论】:

                • 感谢 4 的建议。也许这真的取决于一个人的学习风格,但这不是学习这类事情的方式:例如,我没有学习 OOP,因为我到了一个点,我觉得我想做一些事情然后我发现被称为“OOP”。我学习了 OOP,因为我知道它存在,我研究了一下并说:“这太棒了!我会知道用它来做什么!”。例如,在经历了一半的 vimtutor 之后,我已经可以说我学到的大多数很酷的 vim 功能,我都不会因为自己的需要而发现它们。再说一遍:学习风格,我想……
                【解决方案15】:

                这个很棒的教程对我在 Vim 的第一步帮助很大。这是一个温和的介绍,同时以一种愉快的方式解释了vim的哲学:

                aByteOfVim

                【讨论】:

                  【解决方案16】:

                  我学习 emacs 的方式主要是通过以下两种方式:

                  1. 所有 GUI 菜单都向您显示了可用于执行与该菜单项相同的命令的键绑定。注意你经常选择的菜单项的绑定,下次有机会时手动尝试一下。
                  2. ctrl-h ctrl-h(想想“帮助!帮助!”)打开一个缓冲区,显示各种可用的帮助类型。如果您然后点击“b”键(缓冲区将其称为“describe-bindings”),您将获得正在处理的缓冲区中可用的所有键绑定的列表。只是不时地仔细阅读它,注意看起来有用的命令。有机会时试试看。

                  至于vi,我是在vim之前学的,所以我几乎不得不使用man vi来解决它。我们大多数 emacs 用户会告诉您,您需要知道的所有 vi 是 :q!(“退出,我是认真的”)。 :-)

                  但事实上,如果您是 Unix 用户,您至少需要学习足够的 vi 才能对配置文件进行简单的编辑并保存它们。当你尝试在一个奇怪的 Unix 系统上启动 emacs 时,你永远不知道你会得到什么(如果有的话),但 vi 总是在那里。

                  【讨论】:

                    【解决方案17】:

                    你在 Emacs 中看到或与之交互的几乎所有东西都可以告诉你自己——你只需要知道如何问它。

                    要学习 Emacs,请了解当前的 Emacs 上下文:事物的值是什么,它们之间的关系是什么,它们是如何表示的,如何更改它们或以其他方式与它们交互。

                    要学习的最重要的一点是 Emacs Emacs Lisp——它是一个 Lisp 生态系统。学习 Emacs 也意味着学习 Emacs Lisp——你知道的越多越好。 Lisp 是 Emacs 将自己实现为“自文档化、可扩展的编辑器”的最灵活、最强大的方式。

                    Icicles 可以帮助你学习 Emacs 和 Emacs Lisp。它可以帮助您询问 Emacs 本身。此页面概述了它执行此操作的方式:Emacs Newbie with Icicles

                    【讨论】:

                      【解决方案18】:

                      不要卷入 vi(m) 与 emacs 的宗教战争。他们都是伟大的编辑。我最初是从 VI(真正的 VI 不是 VIM)开始的,后来开始使用 Emacs。这些天来,我倾向于同时使用这两种方法,但更多是使用 emacs,因为 emacs 有一些我需要的功能,而这些功能在 vim 中是没有的。

                      真正的挑战和您的目标是如何尽可能高效、快速和准确地使用您选择的编辑器。 VI 和 Emacs 在这方面都可以提供很多东西。但是,其中大部分归结为您需要培养的两个主要习惯

                      1. 不要使用鼠标。这两个编辑器都是在老鼠不是现在的瘟疫时创建的。在编辑、剪切、粘贴、突出显示等方面,两个编辑器都提供等效的键盘。使用它们并将手指放在键盘上。你会惊讶地发现自己变得如此之快

                      2. 避免使用箭头键。这是出于类似的原因。箭头键往往会让您将手从主键盘上移开。最后,这也会减慢您的速度并降低您的效率。两种编辑器都提供了更方便、更快的功能。

                      这是学习这些编辑器时要重点关注的两个主要内容。还有更多,但首先,只需从专注于使用主键盘开始。

                      在您完成上述操作后,请开始考虑如何调整您的环境以满足您的需求。到这个时候,您将熟悉您选择的编辑器的功能,并且可能会有一些想法。这两个编辑器都非常可配置。我发现 emacs 是最可配置的,但是您很容易在编写 elisp 来配置事物时迷失方向,并且在不知不觉中,您就是一个使用 PHP 和 Python 的 elisp 程序员。在某种程度上,VIM 也会发生同样的情况,但程度较轻。但是请注意,默认值通常是由经验丰富的人设置的,他们可能知道一些你不知道的事情。避免尝试将任一编辑器修改为您所用的错误。首先了解它如何在最少的配置下工作,然后在您了解它为何以某种方式完成后进行更改 - 在违反规则之前了解规则。

                      如果您认真对待编程,您的编辑器将是您最重要的工具。其他重要的工具是您的屏幕、椅子和键盘。其余的都是偶然的。

                      【讨论】:

                        猜你喜欢
                        • 2013-07-31
                        • 2011-05-06
                        • 2011-11-19
                        • 1970-01-01
                        • 2020-05-16
                        • 2021-02-25
                        • 2015-08-25
                        • 1970-01-01
                        • 1970-01-01
                        相关资源
                        最近更新 更多