【问题标题】:What can I do in VIM that I can't already do in Visual Studio? [closed]我可以在 VIM 中做什么,而我在 Visual Studio 中无法做到? [关闭]
【发布时间】:2011-03-17 04:01:27
【问题描述】:

我听说至少需要 30 天才能适应 vi。我是第2天嘿嘿。现在,我似乎只是在记忆我在 Visual Studio 中已经做过的事情的不同快捷方式(增量搜索、上一个/下一个单词等)。

到目前为止,最强大的方面似乎是数字键结合命令(5 * 下一行),以及正常/插入模式的想法。

我在 Visual Studio 中错过了一些东西。 Ctrl-单击鼠标进行快速复制和粘贴可能是最大的。

为了不让我气馁,你们能否带我了解一些在 vi 中经常执行但在 Visual Studio 中无法完成的事情?它将帮助我专注于学习内容并帮助我养成更好的习惯。

【问题讨论】:

  • 只是为了恶作剧...我一直想念 Windows 上的 x 鼠标...即使是 ctrl-click 对于该功能来说也是太多的动作。
  • 哈哈,xkcd 搞定了那个
  • imo 这更像是花一年时间让你的速度赶上你以前的编辑器。起初,您会想很多捷径以及如何以最佳方式做某事。这是时间,它分散了任务本身的注意力。

标签: visual-studio vim vi


【解决方案1】:

Visual Studio 的正则表达式有点像米老鼠。 Vim 拥有完整的 POSIX 正则表达式语言,触手可及。

【讨论】:

  • 是的,但我不记得上次我需要一个完整的 POSIX 正则表达式是什么时候(无论如何编码)。
  • @unclebrad,我每天多次使用正则表达式搜索。
  • @JSB 我只是说我可以用米老鼠正则表达式。
  • 该死的我在正则表达式上太烂了。这可能是我作为程序员最大的缺陷之一。也许使用 VI 会帮助我学习。
  • @JSB:在我所有的编码生涯中,我从来不需要正则表达式搜索源文件。如果您将正则表达式用于您应该使用实际解析器(vim 不是)的用途 - 例如,搜索方法的用法,或查找变量的定义 - 你做错了
【解决方案2】:

我将在此处留下this SO answer 的链接。

【讨论】:

  • 链接的 SO 是本网站的最高荣耀之一。它只介绍了 vi 的一小部分(甚至没有 vim,只是最初的 30 岁 vi),但每句话都显示出比大多数 IDE 更多的功能。当您将 vi 的固有功能与可用的扩展和插件(Intellisense?是的,它有)结合起来时,您将获得仍然是有史以来最强大和最强大的开发环境之一。
  • 哈哈巨大..我一定会读到这里并稍后在这里发表评论。
  • 有一个名为 VsVim 的 Visual Studio 插件,它允许在 Visual Studio 中使用 VIM 的大部分功能......所以在这方面,答案是“几乎没有”!请参阅 visualstudiogallery.msdn.microsoft.com/… 或在 Visual Studio 中使用 Tools -> Extensions & Updates,然后搜索 VsVim。
【解决方案3】:

VI 意味着您永远不必将手指从键盘上移开。

【讨论】:

  • 那是真的.. 我讨厌在不同的笔记本电脑或计算机上工作并处理 Home 和 End 以及 Page 键的位置不一致的问题。鼠标有点麻烦,但到目前为止它为我节省了时间,因为我可以非常快速地准确地点击页面。我笔记本电脑上的拇指板仍然可以让我的手留在键盘上。
  • 这是我无法摆脱 vim 的 原因(以及为什么我更喜欢 vim 而不是 emacs)。
  • 所以如果你错过了 Ctrl+Clicking,那么就试着了解一下寄存器(复制/粘贴)或者(如果你不喜欢它)不要使用 vim。
  • 但是学习寄存器复制和粘贴会比使用我的拇指板和 ctrl+click'ing 更快吗?例如,当我重命名选定文本中的几个单词时。
  • 是的。大多数时候键盘比鼠标快。你浪费时间 1)伸手过去,找到鼠标。屏幕不动,2) 将鼠标移到不需要的位置 3) 将手移回键盘,然后再次找到主行。使用 VI,您可以更多地使用搜索和替换,而使用完整的正则表达式,您可以进行一些非常复杂的模式匹配。这将消除您像雪貂一样在速度上按 ctrl-click 的需要。
【解决方案4】:

使用 screen 保持会话在通过 ssh 访问的远程计算机上运行

【讨论】:

    【解决方案5】:

    据我所知(在 Visual C# express 2010 中)ctrl-click 只会选择您单击的任何单词。要在 VIM 中做同样的事情,您可以将 yank 命令与移动命令结合使用。

    所以你按“y”进行复制(复制),然后按“e”或“w”复制到单词的末尾。

    【讨论】:

    • 或“aw”/“iw”(代表“a word”和“inner word”),如果你在单词的中间。
    • 我应该澄清这一点.. 我指的是在整个屏幕上按住 ctrl 单击时快速移动鼠标的能力。当文字遍布屏幕时,如何使用键盘复制和粘贴5次?我用我的鼠标和我的视觉来定位我想要替换的所有单词。在 VI 中有没有更有效的方法来做到这一点?
    • @djmc - 你是认真的吗?这个例子只是公然的抑制。如果您整天都在疯狂地按 ctrl-click 整个屏幕,那么您就不需要 vi。你需要一个素质。 :-)
    • hhaha 也许我会截取一些屏幕截图并在这方面发布另一个 SO 问题。我不认为它过度或耗时。如果它是分布在多个文件中的更大的搜索/替换作业,我会使用快速查找/快速替换框。但如果它是一段没有通过重构智能改变的代码块,那么只需 5 秒即可鼠标移动并复制/粘贴新代码。
    • @djmc - 是的,这是环境驱动的。 vi 与其他编辑器有很大不同的一个领域是用于剪切和粘贴的范例。这是非常不同的。当我使用非模态编辑器(比如这个评论框)时,我经常发现自己错过了定向运动操作。如果我看到拼写错误的单词,我必须将鼠标移到那里,而不是反向搜索拼写错误。使用 { 和 } 动作轻松实现文本区域块。
    【解决方案6】:

    Vim Essentials 是一组不错的幻灯片。

    就我个人而言,我很久以前就习惯了 vi,那时我们还没有学生的 Unix 终端中的鼠标。从那时起,我使用 vi/vim 来确保编写电子邮件的安全性。

    直到今天,我可能只使用了 1/20 的命令,但从未觉得需要用另一个文本编辑器编写 代码,并且在 IDE 中使用鼠标感觉非常笨拙我。

    使用不需要 IDE(主要是 python、sql、javascript)的高级和富有表现力的语言确实很有帮助。我想使用 Java 或 C++ 不会那么容易。

    编码时不必移动和用鼠标指向(使用浏览器安全)也有助于预防腕管综合症。

    顺便说一句,我想 Vim 与 Unix 的集成比与 Windows 的集成更好……谁说 30 分钟有点乐观:)

    【讨论】:

    • 感谢您的链接。如果您不使用 IDE,我绝对可以看到 VI 将非常强大。但是,我是从 IDE + 鼠标的角度提出的问题。 VI 如何改进这种体验?
    • 我不知道 :) 自从我上次使用 IDE 已经很久了。但如果你想要两全其美,viemu.com 就是在模拟 vi inside Visual Studio。这是一个商业产品,有 30 天的试用期。对我来说,主要是速度......搜索光标下的单词的下一个出现?按 '*'。增加光标下的数字? Ctrl-a。以此类推。
    • 是的,这是真的.. viemu 有望成为两全其美的产品。看起来他们仍处于 vs2k10 的测试版中,但无论如何我都会在稍后试一试。我认为 Visual Studio 可以做很多 vi 也可以做的事情。查找下一个单词是 ctrl-f3。我不确定是否有增加数字的等价物,呵呵。如果您需要更改 ffor 循环索引器的初始值,我想这很有用?
    【解决方案7】:

    在仅允许 SSH 访问的 Solaris 计算机上编辑文件。

    【讨论】:

      【解决方案8】:

      有很多不同。

      • 块(和列)明智的复制、粘贴、编辑
      • 点命令! (在这个星球上第二强大的工具鸭胶带之后,真的)

      我建议你在http://vimcasts.org/ 观看一些截屏视频,感受一下 vim 的强大功能。

      例如:

      【讨论】:

      • 谢谢。回家后,我会给这些截屏视频放一个晚上。
      • 按住 alt 再拖动即可进行分块操作
      【解决方案9】:

      这篇文章让我开始使用 Vim,而且我从未回头:

      http://www.viemu.com/a-why-vi-vim.html

      它有一些很好的例子来说明 Vim 的强大。

      【讨论】:

      • 那篇文章非常鼓舞人心。我也在谷歌搜索时阅读它
      【解决方案10】:

      通过 SSH 编辑文档。 Vim 非常适合这一点。

      编辑:看起来很多人已经说过:)

      【讨论】:

        【解决方案11】:

        teco 是您的答案。您只需要一个 PDP-10 和一个 ASR-33 就可以了!

        【讨论】:

          【解决方案12】:

          您始终可以使用 Visual Studio 的 Vim 仿真器/插件,并将 vim 的一些功能与 VS 的功能相结合。如果您已经在使用 Visual Studio,我假设您使用的是 .NET 语言,如果没有 VS,使用起来会更加痛苦。

          【讨论】:

          • 对。我正在考虑安装 viemu。由于您也是 .NET 开发人员,您发现自己在 vim 模拟器中执行了哪些在 Visual Studio 中无法执行的快捷方式或行为?
          【解决方案13】:

          请注意,我不使用 Visual Studio,并且对其中的可用功能知之甚少。以下是我认为在 Vim 中有用的示例,而不是 Visual Studio 中缺少的功能的列表。

          为复杂(但重复)的操作创建宏很容易。用一个简单的例子来说明,假设我们从:

          Line1
          Line2
          Line3
          Line4
          Line5

          现在我们想将每一行都包含在 print(""); 语句中。
          将光标放在第一行,输入:

          • qx 开始将宏录制到寄存器x
          • Shift+I print(" Esc   在行首插入文本
          • Shift+A "); Esc           在行尾追加文本
          • j下一行
          • q停止录制宏
          • 4@x 执行寄存器x 中的宏4次

          有关 Vim 宏的更多信息,请参阅 :help complex-repeat

          文本对象

          请注意,这是 Vim 对传统 Vi 的改进之一。如果它不起作用,你可能是在 Vi 兼容模式下运行的;使用 :set nocompatible 启用 Vim 的全部功能。

          文本对象允许您轻松选择文本区域。假设我们从以下文本开始,并将光标放在一些文本上:

          <b><i>some text</i></b>

          现在我们要删除<i></i> 之间的所有内容。这可以通过简单地输入命令dit (d'elete i'nner t'ag) 来完成!或者,如果我们想在选择中包含标签本身,请使用 dat (d'elete a t'ag)。要删除 <b> 标记内的所有内容,请使用 d2it (d'elete two i'nner t'ags)。

          您可以类似地使用daw(删除一个单词)、dap(删除一个段落)、di"(删除双引号内)等;完整列表见:help text-objects

          另一个有用的文本对象示例:

          v2ap"+y

          • v 切换视觉模式。这样可以更轻松地查看您选择的内容,并让您在执行命令之前通过一系列多个动作调整您的选择。
          • 2ap 选择本段和下一段
          • "+选择系统剪贴板作为下次操作的寄存器
          • y 将选择拉到给定的寄存器中

          换句话说,该命令会将文本中的两个段落复制到系统剪贴板(例如,将它们粘贴到 StackOverflow 上)。

          全局编辑
          global 命令用于将 Ex 命令应用于与给定正则表达式匹配的所有行。例子:

          • :global/test/print:g/test/p 将打印包含短语 test 的所有行
          • :global/test/delete:g/test/d 将删除上述行
          • :global/test/substitute/^/#/:g/test/s/^/#/ 将搜索包含短语 test 的行,并通过用符号 # 替换正则表达式锚 ^(行首)将它们注释掉。

          您还可以通过将搜索动作 /pattern?pattern 作为范围传递来做一些很酷的事情:

          • :?test?move . 向后搜索包含 test 的行,并将其移动到文件中的当前位置
          • :/test/copy . 向前搜索包含 test 的行,并将其复制到文件中的当前位置

          祝你好运,愉快地学习 Vim!

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2013-02-20
            • 2010-10-07
            • 2012-07-17
            • 2016-08-16
            • 1970-01-01
            • 1970-01-01
            • 2010-10-19
            • 2015-03-24
            相关资源
            最近更新 更多