最常用的 vim 命令/按键是什么?

我是一个试图从 Textmate 切换到 MacVim 的 Ruby 编程人员,我在浏览你可以在 VIM 中做的大量事情以及所有的按键时遇到了麻烦。我已经厌倦了听到“你可以用‘ I’来插入文本,或者用‘ a’来在字符后面添加文本,或者用‘ A’来在行尾添加文本,或者... ...”我无法想象每个人都使用所有20个不同的按键来导航文本,10个左右的按键来开始添加文本,以及18种可视化地选择一个内部块的方法。还是你! ?

我理想的备忘单应该是每个人每天用来编写代码的30-40个最常用的按键或命令,以及红宝石爱好者每天使用的绝对必要的插件和10个最常用的命令。从理论上讲,一旦我掌握了这些技能,并且开始像在 Textmate 一样精通虚拟现实技术,我就可以开始学习成千上万的其他虚拟现实技术指令,这些指令将使我的 更多更加高效。

或者,我学习 VIM 的方式完全错了?

128063 次浏览

Http://www.viemu.com/a_vi_vim_graphical_cheat_sheet_tutorial.html

这是学习 VIM 有史以来最伟大的事情。

我无法想象每个人都使用所有20个不同的按键来导航文本,10个左右的按键来开始添加文本,以及18种方法来直观地选择一个内部块。还是你! ?

是的。

理论上,一旦我拥有了它,并开始像在 Textmate 一样精通 VIM,那么我就可以开始学习成千上万的其他 VIM 命令,这将使我更有效率。

这才是正确的做法。从基本的命令开始,然后学习那些能提高你工作效率的命令。我喜欢按照 这个博客的提示,如何提高我的生产力与活力。

你看过 Vim 的内置教程了吗?如果没有,则切换到命令行并键入 vimtutor。这是学习初始命令的好方法。

Vim 具有令人难以置信的灵活性和强大功能,如果您像大多数 Vim 用户一样,您将学习许多新命令,忘记旧命令,然后重新学习它们。内置的帮助是好的,值得定期浏览以学习新东西。

在互联网上有一些关于 vim 的常见问题和备忘录。我建议搜索 vim + faqvim + cheatsheetCheat-sheets.org # vim是一个很好的来源,Vim Tips wiki也是。

转到 使用 vim 进行高效编辑,学习你需要开始的东西。并不是所有页面上的内容都是必不可少的开始,所以挑选你想要的。

从那开始,一切都要用到 Vim。“ hjkl”、“ y”和“ p”会让你走得很远,即使这不是最有效的方法。当你遇到一个你不知道如何有效完成的任务(或者根本不知道) ,而且你发现自己做了很多次的时候,去查查看。慢慢地,它会成为你的第二天性。

我在很久以前就发现 vim 令人望而生畏(当时它的末尾还没有“ m”) ,但是它只需要一个星期的稳定使用就能达到效率。我仍然觉得它是完成任务最快的编辑器。

Org 提供了一个相当不错的小抄,我认为学习这些命令有几个要点:

  • 定期阅读小抄。不要担心使用所有的键或记住所有的键,只需要知道命令的存在。查找命令,当你发现自己在做一些重复的事情时使用它。
  • 如果你发现自己经常做一些事情(比如删除某个特定字符 d$后的整行) ,快速谷歌搜索一下,看看是否能找到相应的命令。
  • 写下您认为有用的命令,并在编写代码时将该列表保存在您可以看到的地方。我反对打印出一些东西,而是鼓励您一次只使用几个命令的 post it 备注。
  • 如果可能的话,观察其他程序员使用 vim,并询问他们正在使用什么命令,因为您看到他们正在做一些有趣的事情。

除了这些技巧之外,还有一些基本概念您应该了解。

  • Vim 将使用相同的字符表示相同的函数。例如,要删除字符后面的一行,请使用 d$。使用 v$突出显示特定字符后面的行。因此请注意,$表示您将执行一些操作,直到您的游标当前所在的行的末尾。
  • u是撤消,ctrl+r是重做。
  • 在命令前面加一个数字会重复执行它。3dd将删除光标所在的行和后面的两行,类似地,3yy将复制光标所在的行和后面的两行。
  • 了解如何在缓冲区中导航,使用 :ls列出缓冲区,并使用 :bn:bp循环遍历它们。
  • 通读在 :help 中找到的教程,这可能是“学会诀窍”的最好方法,其余的命令你将通过使用来学习。

大多数人所做的就是从最基本的开始,比如 iywyyp。您可以继续使用箭头键移动,用鼠标选择文本,使用菜单等。然后,当某些事情拖慢了你的速度时,你就会寻找更快的方法来完成它,然后逐渐地添加越来越多的命令。您可能会在一段时间内每天学习一个新命令,然后慢慢地每周学习一个。一个月后你就会觉得很有效率了。一年之后,你会有一个相当坚实的曲目,2-3年之后,你甚至不会有意识地认为你的手指正在打字,它会看起来很奇怪,如果你不得不拼出来的人。我在1993年学习了 vi,现在仍然每年学习2到3个新命令。

下面是我曾经写过的一个小贴士,其中包含了我实际上经常使用的命令:

参考文献

将军

  • 几乎所有命令前面都可以加上一个重复计数的数字。例如,5分删除5行
  • <Esc> 使您脱离任何模式并返回到命令模式
  • 在屏幕底部的命令行上执行 :之前的命令
  • : help help with any command

导航

  • 光标移动: → 室名 J室名 K室名→
  • 文字:
    • W next word (按标点符号) ; W next word (按空格)
    • B 后台词(按标点符号) ; B后台词(按空格)
    • 结束词(用标点符号表示) ; E结束词(用空格表示)
  • 标题:
    • 0 行开始; ^第一个非空格
    • $ 结束行
  • 段落:
    • { 前一个空行; }下一个空行
  • 档案:
    • Gg 文件开始; G文件结束
    • 123G 转到特定的行号
  • 标记:
    • Mx 设置标记 X; X去标记 < em > x
    • 转到最后一次编辑的位置
    • 回到跳前的最后一点
  • 滚动:
    • ^ F 正向全屏; ^ B反向全屏
    • ^ D 下半屏; ^ U上半屏
    • ^ E 向上滚动一行; ^ Y向下滚动一行
    • Zz 中心光标线

剪辑

  • 撤消; ^ R重做
  • . 重复上次编辑命令

插入

所有插入命令都以 <Esc>结束以返回到命令模式。

  • I 在光标处插入文本; 在行首处插入文本
  • A 在光标后面追加文本; A在行结束后面追加文本
  • O 在下面打开新行; 在上面打开新行

换衣服

  • R 替换单个字符; R替换多个字符
  • S 更改单个字符
  • Cw 改变单词; C改变到行尾; 抄送改变整行
  • C<motion> 改变文本运动的方向
  • Ci ( 括号内的更改(更多示例参见 文本对象选择)

正在删除

  • X delete char
  • Dw 删除单词; D删除到行尾; D删除整行
  • D<motion> 删除运动方向

剪切粘贴

  • 广州欢聚时代 复制行到粘贴缓冲区; D剪切行到粘贴缓冲区
  • 光标线下方的粘贴缓冲区; 光标线上方的 P粘贴缓冲区
  • 交换两个字符(X删除一个字符,然后 P将其放回光标位置后)

积木

  • 视块流; V视块线; ^ V视块柱
    • 大多数运动命令将块扩展到新的光标位置
    • O 将光标移动到块的另一端
  • D X切块成糊状缓冲液
  • Y 复制块到粘贴缓冲区
  • > 缩进块; < 未缩进块
  • 重新选择最后一个可视块

全球化

  • :% s/foo/bar/g 代课老师所有出现“ foo”到“ bar”的地方
    • % 是指示文件中每一行的 射程
    • /g 是一个标志,它更改一行中的所有匹配项,而不仅仅是第一个匹配项

搜索中

  • 向前搜索; 向后搜索
  • 向前搜索光标下的单词; #向后搜索光标下的单词
  • N 同方向的下一个匹配; N相反方向的下一个匹配
  • Fx 前进到下一个字符 X; Fx后退到前一个字符 < em > x
  • ; 再次移动到同一方向的同一个字符; ,再次移动到相反方向的同一个字符

文件

  • 将文件写入磁盘
  • : wname 将文件作为 name写入磁盘
  • ZZ 将文件写入磁盘并退出
  • 编辑新文件; : n!编辑新文件而不保存当前更改
  • 退出编辑文件; 问题!退出编辑而不保存更改
  • : e 再次编辑同一个文件(如果在 vim 之外更改)
  • 目录浏览器

窗户

  • ^ Wn 新窗口
  • ^ Wj 下到下一个窗口; ^ Wk上到上一个窗口
  • ^ W _ 最大化当前窗口; ^ W = 使所有窗口大小相同
  • 增加窗口大小; ^ W-减小窗口大小

源导航

  • 如果加载了语言模块,则跳转到匹配括号/括号/大括号或语言块
  • Gd 转到光标下的本地符号定义,^ O返回到之前的位置
  • 跳转到全局符号的定义(需要 tags文件) ; ^ T返回到之前的位置(维护任意位置堆栈)
  • ^ N (在插入模式下)自动完成单词

显示本地更改

Vim 具有一些特性,可以轻松突出显示在源代码管理中从基本版本更改的行。我已经创建了一个小的 vim 脚本,使之变得简单: http://github.com/ghewgill/vim-scmdiff

这是一个很棒的 活力小抄:

enter image description here

@ Greg Hewgill 的小抄写得很好。几个月前我开始从 TextMate 转学。现在我的工作效率和以前一样高,并且不断地被 Vim 的能力所震惊。

这是 我是怎么变身的,也许对你有用。

格罗索莫多,我不认为这是一个好主意,做一个激进的转换。Vim 是非常不同的,最好是循序渐进。

为了回答你的子问题,是的,我每天使用所有的 iaIAoO进入插入模式。一开始看起来确实很奇怪,但过了一段时间你就不会真的去想它了。

有些命令对于任何与编程相关的任务都非常有用:

  • 用于替换字符的 rR
  • <C-a><C-x>增加和减少数量
  • 更改 HTML 标记的内容及其变体(catditdatci(等)
  • <C-x><C-o>(映射到 ,,)用于全完成
  • 使用 <C-v>进行视觉块选择
  • 诸如此类。

一旦你习惯了 Vim 的方式,在其他编辑器或文本字段中编辑文本时,很难不一直按 ox键。

把它放在.bashrc 中,用最后一次编辑的文件打开 vim

alias vil="vim  +\"'\"0"