学习Vim有哪些好处?

465
作为一名程序员,我每天都会花费很多时间在键盘前,这已经持续了大约12年左右。然而,有一件事情让我从未习惯过,那就是由于一些最常见的代码编辑任务而导致的烦人且几乎无意识的微小中断。比如简单的复制和粘贴操作(甚至在同一行内),或者将当前位置向上或向下移动1或2行,这些操作需要太多的打字或涉及使用方向键......当我需要进一步移动时,情况会变得更糟糕——我不得不用鼠标。现在,想象一下这种情况出现在一台笔记本电脑上。
我一直考虑学习VIM,但是需要掌握它的时间总是让我望而却步。
我想听听那些已经学会它的人的想法,以及它是否成为了那些不能没有的技能之一。
在工作中,我使用VS2008、C#和R#,这些工具使得编辑代码更快、更容易,但即使如此,我认为完全不使用鼠标甚至连方向键都不需要,也可以让我轻松愉悦。

7
无需在键盘和鼠标之间切换的确很不错。在 Mac 上,我即使在类似 BBEdit 或 Xcode 这样的 GUI 编辑器中也使用 Emacs 导航键(例如 ctrl-A),只是为了避免用鼠标进行额外的移动。 - Craig S
236
完全值得努力。学习 Vim ;) - Kyle Walsh
20
您可以在几分钟内学习基本的vim(不用管vi),只需在终端中输入vimtutor,您就可以掌握基本技能。接下来20年你学到什么取决于你自己。我只是好奇VS2008、C#和R#如何帮助您解决因在键盘和箭头/鼠标之间移动而浪费生命的问题。 - stefanB
43
我曾经做过的最好的投资之一。 - johnsyweb
10
我开发了这个游戏,帮助我七岁的侄子学习在Vim中快速移动:http://kikuchiyo.org测试版允许你用光剑攻击敌人,'i'为左击,'a'为右击:P我也是出于同样的原因学习Vim的,我发现移动是最难适应的部分。希望这个游戏能帮助你加速学习,如果需要帮助的话 :)祝好运! :) - kikuchiyo
显示剩余12条评论
34个回答

249

8
没问题,我也一直在学习新的东西。它仍然是我最喜欢的编辑器。 - Craig S
20
我不确定这是好事还是坏事。如果你不断学习新的事物,学习曲线会非常陡峭,功能也非常隐藏,而且没有掌握的感觉。无论如何,如果你想要RISC,你会选择vi而不是vim,对吗? - bastibe
7
@Paperflyer:我也有同样的想法。如果你在20年后仍然没有掌握它,那就是一件让我不确定是否想要头疼的事情。 - Dinah
7
怎么样?这意味着虽然它有很多功能可以让你不断学习,但你并不需要学习所有的功能才能更有效率。 - Arda Xi
5
“为什么,为什么那些蠢货要使用vi编辑器?”- 不错的链接,特别是针对这个问题。 - user359135
显示剩余7条评论

183

我能没有它而生活吗?很容易。

它有用吗?是的。

学习原因

  • vi保证存在于所有Unix系统上,并存在于大多数Linux系统上。这种广泛覆盖使学习vi变得值得。

  • 使用vi进行sudo编辑更快:

    $ sudo vi

  • GMail也使用类似vi的命令来选择和移动电子邮件!

你不必成为专家。

只需学习以下基础知识:

基础知识:

  • 如何从命令模式切换到插入模式i
  • 如何从插入模式切换到命令模式Esc
  • 如何在命令模式下向上导航一行k
  • 如何在命令模式下向下导航一行j
  • 如何在命令模式下向左导航一个字符h
  • 如何在命令模式下向右导航一个字符l
  • 如何保存文件:wEnter(写入)
  • 如何在不保存的情况下退出(在命令模式下):q!Enter
  • 如何撤销u
  • 如何重做Ctrl+r
  • 您可以将写入和退出结合起来(在命令模式下)::wqEnter

从那里开始,剩下的就只是让你更快。


16
我学到的方法是:从最基础的开始,每天逐渐提高一点。花时间学习更好的完成任务的方法。可以参考《高效文本编辑的七个习惯》获得灵感。 - Ben
29
[:][X][Enter]和[:][W][Q][Enter]是相同的。 - Vitalii Fedorenko
由于@Ben提到了“逐步”,我想提一下这篇博客文章:逐步学习Vim,作为一个Vim新手,我觉得非常有帮助。 - easoncxz
其他人都在评论,那我也来凑个热闹吧!我曾经像讨厌 Perl 一样讨厌 Vim。但是在使用其他文本编辑器时,我发现需要的功能都没有。后来我发现了 Vim 的插件系统,如果没有我需要的插件,我也可以轻松地自己编写一个。最好的部分是,一旦你对 Vim 很熟悉,你已经有资格编写自己的插件了,因为大多数插件都由你在 Vim 中使用的命令组成。如果你不喜欢键盘快捷键,可以使用“behave mswin”与 normaleditor.vim 或 cream,它会为你模拟一个“普通”的编辑器 :)。 - osirisgothra
20
[Z][Z] 与 [:][X][Enter] 相同。 - Kos
显示剩余6条评论

138

仅用30分钟完成 vimtutor 的学习,已足以让我熟悉vim。这绝对是值得的。


如果您知道更好的解释链接,请更改我的链接 :) - Blorgbeard
43
vimtutor是一份教程。我每天做了大约10天。第一次花了我大约30分钟,第二天是20分钟,然后是15分钟。到了这周的末尾,我已经将其大部分命令深深印在脑海中。我认为,与其试图去记忆,重复练习Vim才是最好的方法。每天15分钟,一周看起来像是一个非常小的代价。 - Michael Ekoka
28
学完 VIMTUTOR 后,下一步应该学什么? - privatehuff
3
阅读并应用《有效文本编辑的七个习惯》(http://www.moolenaar.net/habits.html)。 - Frank Kusters
1
哇!这就像游戏中的隐藏物品之一。它就在我的系统里,我却不知道它的存在。这是关于vim最有用和快速的教程之一。尽管我已经使用vim一段时间了,但我仍然学到了一些基本技巧,这些技巧我以前不知道。推荐给每个人。还有一个小建议:如果你正在使用带触摸板并支持手势的笔记本电脑上的vim,请在使用vim之前禁用它,因为如果不小心碰到它,它可能会将光标移动到意想不到的位置,有时会浪费整个好编辑。 - max
显示剩余2条评论

69
如果你是一个经常编辑文本的程序员,那么学习一款专业的文本编辑器非常重要。你学习哪种编辑器并不是非常重要,而且很大程度上取决于你预计要在哪些环境中进行编辑。
原因是这些编辑器高度优化,可以执行你将经常执行的任务。例如,考虑将相同的文本添加到每行末尾。在专业的文本编辑器中,这很简单,但在其他情况下则非常麻烦。
通常认为vim的杀手级特性是:A)它几乎可以在你遇到的每个Unix系统上使用;B)你的手指很少需要离开主键盘区,这意味着你能够非常快速地编辑文本。即使在编辑大文件时,它通常也非常快速和轻量级。
然而,还有许多其他选择。Emacs是最常见的例子,当然,如果你真的深入挖掘它,它不仅仅是一个高级文本编辑器。我个人现在是TextMate的忠实用户,之前用了多年的vim/gvim。
转换到任何这些编辑器的关键是强迫自己按照它们预期的方式使用它们。例如,在vim中,如果你正在手动执行多步过程中的每一步,或者正在使用箭头键或鼠标,则可能有更好的方法来完成它。停下你正在做的事情,查找一下。
如果你不做其他事情,那么请学习vim和Emacs的基本导航控件,因为它们会经常出现。例如,在Mac OS中的任何文本输入字段、大多数Unix shell、Eclipse等中,都可以使用Emacs样式的控件。在less(1)命令、Slashdotgmail等地方,可以使用vim样式的控件。祝玩得愉快!

7
这段话中有一个很多人忽视的观点。几乎任何重复性的任务都有捷径可走。开发人员喜欢用捷径。正如rbright所说,如果你发现自己一遍又一遍地执行某个步骤,请停下来看看是否已经有人记录下了捷径。 - AvatarKava
是我使用VIM的最大原因之一 - 我最初是一个emacs用户,但并非所有系统都有它,并且有时在网络或繁忙的服务器上运行缓慢。 VIM是无处不在、小巧而迅速的。 - Jason Peacock
3
我的编辑经常开一些很糟糕的玩笑,我应该换一个。 - Greg Graham
你说:“如果你是一个编辑大量文本的程序员,那么学习一款专业的文本编辑器非常重要。”最糟糕的是,似乎不可能完全掌握两个(更不用说更多)编辑器,几乎可以这样定义。在某些时候,你会遇到边缘情况,而在一个编辑器中完成任务X的知识通常无法转化到另一个编辑器中。而且总有一些我在“边缘”编辑器中做的事情——例如,我仍然使用JEdit来进行JTidy、Code2HTML和搜索多个文件等操作。你的主要选择是赌一把,没有银弹,但是肯定要学习一种并尝试多种编辑器。;^) - ruffin
1
@ruffin 确实如此,你不能同时掌握两个不同的编辑器:如果你掌握了一个编辑器,你会下意识地使用很多它的命令,这意味着当你使用另一个编辑器时,你很可能会尝试使用相同的命令。我曾经因为浏览器不允许我用简单的 <esc> >i{ 来修复缩进而咒骂过它... 这就像打字一样:你学习了一个键盘布局,你会坚持使用它,因为你永远无法阻止手指在不同的布局上敲错键。 - cmaster - reinstate monica
"B) 你的手指很少需要离开主键区,这意味着你能够非常快速地编辑文本。" - 这是我看到的第一个也是唯一一个有道理的支持vim优于nano或emacs的论点。也许不足以让我真正坐下来学习vim,但现在我终于明白为什么有人会这样做了。 - Mordred

36

这真的值得花费精力。

任何使用Vim的人都会告诉你一个明显的原因,还有两个人们似乎从未提到过的原因。以下是明显的原因:

  1. vi一旦普及,就非常强大,通过学习它,您可以在几乎任何带有键盘的计算机上运用它的功能。

以下是学习 Vim 的不太为人知的原因:

  1. 实际上学习成本没有您想象的那么高。只需跑一遍Vim tutor(在shell下输入vimtutor,在Windows中从“开始”菜单中的Vim文件夹运行),您就已经掌握了基本技能,而且接下来的学习会变得越来越简单。我只用了不到一周的午餐时间就能在工作中使用Vim,而且没有对我的生产效率产生任何负面影响。

  2. 它很有趣!现在编辑文本对我来说像玩游戏一样,我非常享受它——当您想一想时,这相当荒谬。

还有两个不学习Vim的好原因:

  1. 使用 Vim 命令在所有计算机上是种瘾,你会发现自己希望能够在任何情况下都使用它,并且每当你不能使用时就会感到恼怒。幸运的是,至少在某些情况下,有一些方式可以解决这个问题,具体方法参见这里这里这里这里

  2. 同样,使用 Vim 虽然不会降低生产力,但你会花费数小时寻找好的技巧来让你的 Vim 体验更加完美,并阅读 Stack Overflow 上的Vim 标签


12
哈哈,学习VIM的“不”理由排名第二太正确了。我节省的所有文本编辑时间都花在阅读有关文本编辑的内容上了,太荒谬了。 - Karl Floersch
是的,我希望能够使用hjkl键玩Stardew Valley... - xis

32

学习vim或emacs一定是值得的。同样学习盲打也很重要,因为两种情况下的原因是相同的:你的思维不会再被将代码输入到屏幕上这个机械过程所打断

至于如何开始,只需立即开始使用vim进行所有操作。

P.S. emacs和vi之争永无止境。我已经使用emacs 26年了。如果我今天重新开始,我会学习vim,因为(a)它变得更好了,(b)它需要的修改键较少(Ctrl-Alt-V,任何人都可以),而且vim用户似乎遭受的打字伤害要少得多。


RSI 是开发者们面临的一种职业危害。我从未这样想过,但我确信这是一个非常好的观点。从肌肉角度来看,键入和弹奏和弦要困难得多。我知道使用 vi 的原因有杀手锏! - DigitalRoss
1
我两个都用过,我是“受洗”于vim,并在几个月前学习了emacs。我更喜欢vim,因为任务被分解 - 你要么在编辑,要么在插入,而不是两者兼顾。这种区别有助于我思考我正在做什么,并使“正常”命令成为1-2个按键,而不是2-4个。我只希望vim是基于Lisp的(不,viper模式无法支持我所有的vim标准功能。是的,我可以自己编写,但那样我会错过它们,每次接触新的计算机/系统时)。 - Wayne Werner
1
@WayneWerner 我有点过时了,但你可以对所有的elisp进行版本控制,这样你就可以通过计算机同步它们。 - YuriAlbuquerque
@YuriAlbuquerque,我已经开始认真考虑创建一个自动环境设置脚本,将所有我的dotfiles放在github上或其他什么地方。 - Wayne Werner

17
您可以通过学习仅有的16个按键: ijkdbw9:q!%s/nNEsc,来使用vim获得良好的功能。您甚至只需使用i:wqEsc就可以完成基本的编辑操作。
您需要知道的前两个按键是:Esc进入命令模式(启动时的模式),i 进入插入模式(正常输入)。

要保存,请执行以下操作:

  1. 退出输入模式 (Esc)
  2. 键入冒号:
  3. 键入小写的w然后按下Enter

要保存并退出,请执行以下操作:

  1. 退出输入模式 (Esc)
  2. 键入冒号:
  3. 键入小写的wq然后按下Enter

如果不想保存并强制退出,请执行以下操作:

  1. 退出输入模式 (Esc)
  2. 键入冒号:
  3. 键入小写的q!然后按下Enter

要了解更多信息,您可以在命令行中运行vimtutor。这是一个中等长度的,结构良好的教程。

除了iEsc之外,您还可以仅使用jkwbd3:%s/nN就能复制或超越一些MS Word的功能。

  1. b回退一个单词 (Ctrl+)
  2. w向前一个单词(Ctrl+)
  3. 9w向前九个单词
  • db 删除光标前面的一个单词 (Ctrl+Backspace)
  • d3b 删除光标前面的三个单词
  • 9j 向下移动 9 行
  • / ornithopter Enter 跳到下一个出现的单词 "ornithopter",然后使用 nN 分别跳到下一个和上一个出现的 "ornithopter"
  • :%s/confounded/dangfangled/ Enter 将所有出现的 "confounded" 替换为 "dangfangled"(类似于 MS Word 中的查找和替换全部)
  • 以上任何操作都应该在 "命令" 模式下运行 (Esc),而非插入模式 (i)。


    16

    我最近切换到了VIM,我认为这非常值得。如果您只需要“完成一些任务”,您可以一直停留在插入模式下,其中vim(大多数情况下)就像一个普通的文本编辑器。

    我注意到以前不会困扰我的事情,比如伸手按箭头键,现在感觉不对劲并且需要花费太多精力。这显然减少了我的手部运动和使用鼠标的频率,这对人体工学和生产效率都有好处。


    12

    这取决于你想用VIM做什么。仅仅因为很多人离不开它而学习它是没有意义的。

    当我在UNIX环境下工作时,我无法离开它。即使在UNIX机器上没有安装VIM,我至少可以使用vi。你总是可以依靠它 - 即使机器不是你自己的(来自客户)。

    现在我编写C#并主要在Windows环境下工作。我已经在我的PC上安装了VIM ... 但我并不需要它。

    评估一下你是否真的需要VIM以及它是否能够支持你的“工作流程”。试用它。玩玩它。如果你认为你需要它,坚持使用它...学习曲线非常陡峭。


    有一个适用于 VIM 用户的 Visual Studio 扩展程序,请访问 https://visualstudiogallery.msdn.microsoft.com/59ca71b3-a4a3-46ca-8fe1-0e90e3f79329。 - yoel halb

    10

    我学会使用vi是因为必须学。

    我的疯狂老师逼迫我们使用终端连接到AIX系统来用C语言编程。

    那真是一种折磨,但是值得的。

    如今,我仅在需要快速编辑或编写小程序时才使用vi。

    如果要进行一个项目,我更喜欢使用IDE。在我看来,IntelliJ idea非常擅长这个任务,因为我可以连续编码几个小时而不用鼠标。

    我不知道VS2008有多少快捷键,但如果它们像Eclipse一样易于发现,那么你就需要放弃vi了。

    如果你在IDE外不编辑代码,并且你的IDE具有良好的快捷键,请先掌握这些快捷键,然后再去学习vi。

    :)


    他询问了VIM的好处,而不是意见。 - Blaze349
    @Blaze349,不是的,他要求听听那些已经学会它的人的经验(请参见原帖链接),这正是我回答的内容。这个问题已经有将近8年的历史,并且在这些年里经过了多次审查,我的回答与原始回答相匹配。在评论时请考虑这一点。 - OscarRyz

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