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


110

我是一个Ruby编程人员,试图从Textmate切换到MacVim,但在浏览庞大的VIM列表以及它们的所有按键时遇到麻烦。我厌倦了听到“您可以使用'I'来插入文本,或者'a'来在字符后添加文本,或者使用'A'来在行尾添加文本,或者……”我无法想象每个人都使用全部20种不同的按键来导航文本,使用10种左右的按键来开始添加文本,并使用18种方式直观地选择内部块。还是你!?

我理想的备忘单是每个人每天用于编写代码的30-40个最常用的按键或命令,以及红宝石学家每天使用的绝对必要的插件以及10个最常用的命令。从理论上讲,一旦我掌握了这一点,并且开始像在Textmate中一样熟练地掌握VIM,那么我就可以开始学习成千上万的其他VIM命令,这将使我更加高效。

还是我完全错误地学习了VIM?



1
重新标记以删除“ ruby​​”并添加“ keyboard-shortcuts”。似乎更合适。

“我是完全以错误的方式学习Vim吗?” -不,您只需要从一些基础知识入手,并记住,从现在开始一年以后您仍将学习更多命令。也许有一天您真的会使用所有命令!但是从第一天起就没有人使用它们了。
卡斯卡贝尔2011年

Answers:


305

这是我一次编写的提示表,其中包含我实际上经常使用的命令:

参考资料

一般

  • 几乎所有命令都可以在数字后加上重复计数。例如。5dd删除5行
  • <Esc> 让您退出任何模式并返回命令模式
  • 在命令开头的在屏幕底部的命令行上执行
  • :help帮助任何命令

导航

  • 光标移动:← hjk l→
  • 用词:
    • w下一个单词(标点符号);W下一个字(按空格)
    • b回词(标点符号);B后退单词(按空格)
    • È结束字(由标点符号); E结束词(按空格)
  • 按行:
    • 0行开始;^第一个非空白
    • $行尾
  • 按段落:
    • {前一个空白行;}下一个空白行
  • 按文件:
    • gg文件开始;G文件结尾
    • 123G转到特定的行号
  • 按标记:
    • mx设定标记x ; 'x去标记x
    • '。转到最后编辑的位置
    • ''跳到最后一点
  • 滚动:
    • ^ F前进全屏;^ B向后全屏
    • ^ D下半屏;^ U上半屏
    • ^ E向上滚动一行;^ Y向下滚动一行
    • zz中心光标线

编辑中

  • 撤销 ^ R重做
  • 重复上一个编辑命令

插入

终止所有插入命令<Esc>以返回命令模式。

  • 在光标处插入文本;在行首插入文字
  • 光标后附加文本;一个行结束后追加文本
  • o在下面打开新行;O在上方打开新行

改变中

  • r替换单个字符;R替换多个字符
  • 小号改变单个字符
  • 连续变词 C更改为行尾;cc更改整行
  • c<motion>沿运动方向更改文本
  • ci(更改括号内的内容(有关更多示例,请参见文本对象选择

删除中

  • x删除字符
  • dw删除单词;D删除到行尾;dd删除整行
  • d<motion>沿运动方向删除

剪切和粘贴

  • yy将行复制到粘贴缓冲区中;dd将线切割成粘贴缓冲区
  • p在光标线下方粘贴缓冲区;P粘贴光标线上方的缓冲区
  • xp交换两个字符(x删除一个字符,然后p放回光标位置之后)

积木

  • v可视块流;V目视界线;^ V可视块列
    • 大多数运动命令将块扩展到新的光标位置
    • o将光标移动到块的另一端
  • dx将块剪切到粘贴缓冲区中
  • y将块复制到粘贴缓冲区
  • >缩进块;<缩进块
  • gv重新选择最后一个可视块

全球

  • :%s / foo / bar / g 所有出现的“ foo” 替换为“ bar”
    • %是指示文件中每一行的范围
    • / g是一个标志,它更改一行中所有出现的标志,而不仅仅是第一个

正在搜寻

  • /向前搜索;向后搜索
  • *向前搜索光标下的单词;向后搜索光标下的单词
  • n同一方向的下一场比赛;N个方向相反的下一场比赛
  • fx前进到下一个字符xFX退回到前一个字符x
  • ; 在相同方向上再次移至相同角色;然后以相反的方向再次移至相同的字符

档案

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

视窗

  • ^ Wn新视窗
  • ^ Wj向下一个窗口;^转到上一个窗口
  • ^ W_最大化当前窗口;^ W =使所有窗口大小相等
  • ^ W +增加窗口大小;^ W-减小窗口大小

源导航

  • 跳转到匹配的括号/括号/括号或语言块(如果已加载语言模块)
  • gd转到光标下的本地符号定义;^ O返回上一个位置
  • ^]跳转到全局符号的定义(需要tags文件);^ T返回上一个位置(保持任意位置的堆栈)
  • ^ N(在插入模式下)自动完成单词

显示本地变化

Vim具有一些功能,可轻松突出显示从源代码管理中的基本版本更改的行。我创建了一个小vim脚本,它使此操作变得容易:http : //github.com/ghewgill/vim-scmdiff


1
+1相对最小,尽管我必须承认我没有使用任何窗口命令或使用箭头键/ pageup / pagedown / home / end和gg / G以外的任何内容进行导航。哦,对于行号导航,您还可以使用:123(命令模式)。

2
不错的备忘单。我将添加^ w ^ w循环浏览窗口,以确保一致性::x而不是ZZ字符之前先进行tx字符之后进行Tx
romainl 2011年

我应该注意,这只是我所使用的基础。我创建此列表是为了向其他人教授vim。我不经常使用许多其他命令,并且还设置了各种别名和宏来帮助我更有效地使用vim。
格雷格·希吉尔

2
如果要避免使用Esc密钥(和RSI?),可以使用^[^c也可以(但不能扩展缩写)。资料来源:vim.wikia.com/wiki/Avoid_the_escape_key
Lian

22

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

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


我以前从未见过此内容,在您知道命令的用途之后,将获得非常不错的参考。
amccormack 2011年

3
但是,如果没有qwerty键盘,则“图形”部分将无用。
romainl 2011年

5
令我惊讶的是,张贴链接(已经张贴到死亡已经顺便说一句)吸引了如此多的关注,而其他海报却没有加倍努力
Lieven Keersmaekers



4

您是否已阅读Vim的内置教程?如果没有,请转到命令行并键入vimtutor。这是学习初始命令的好方法。

Vim具有令人难以置信的灵活性和强大功能,并且,如果您像大多数vim用户一样,会学到很多新命令,而忘记旧命令,然后重新学习它们。内置帮助很好,值得定期浏览以学习新知识。

互联网上有一些很好的关于vim的常见问题解答和备忘单。我建议搜索vim + faqvim + cheatsheetCheat-Sheets.org#vimVim Tips wiki都是一个很好的来源。


我刚刚发现了这一点,幸运的是,它已安装在Mac上。立即试用(凌晨1点…)
克林顿

我已经使用vim很久了,这是我在计算机上安装的第一件东西。MacVim在Mac OS上非常好。我倾向于在我使用的大多数Linux机器上从源代码编译vim,这仅仅是因为大多数发行版不是最新的,或者没有正确设置语言支持。我保持目前的版本我的~/.vimrc~/.gvimrc~/.vim目录中的焦油球时,我有一些设置。将其复制并解压缩文件,使我可以在几分钟内在Windows,Mac和Linux上用所有常用命令和colorchemes运行vim。
Tin Man

3

大多数人做的是先有自己的裸基础知识,如可能iywyy,和p。您可以继续使用箭头键四处移动,使用鼠标选择文本,使用菜单等。然后,当某些操作使您减速时,您会查找执行此操作的较快方法,并逐渐添加越来越多的命令。您可能会每天学习一则新命令一段时间,然后每周会细流到一个。一个月后,您会觉得自己的工作效率很高。一年后,您将拥有相当扎实的曲目,而2-3年后,您甚至都不会自觉地思考手指在打字,如果您必须为某人拼写出来,这看起来会很奇怪。我在1993年学习了vi,但仍然每年接受2到3个新命令。


3

@Greg Hewgill的备忘单非常好。几个月前,我从TextMate开始切换。现在,我像使用TM一样富有生产力,并且不断为Vim的强大能力感到惊讶。

这是我的切换方式。也许对您有用。

Grosso Modo,我认为进行彻底转换不是个好主意。Vim与众不同,最好逐步进行。

回答您的子问题,是的,我iaIAoO每天都使用Google 进入插入模式。乍看起来当然很奇怪,但是过一会儿您就不会真正考虑它。

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

  • rR替换字符
  • <C-a><C-x>增加和减少数量
  • cit改变一个HTML标记的内容,及其变体(catditdatci(,等等)
  • <C-x><C-o>(映射到,,)功能不完整
  • 可视块选择 <C-v>
  • 等等…

一旦习惯了Vim方式,在其他一些编辑器或文本字段中编辑文本时,就变得很难被击中ox一直保持不停。


2

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

我做。

从理论上讲,一旦我具备了这种能力,并且开始像在Textmate中一样熟练掌握VIM,那么我就可以开始学习成千上万的其他VIM命令,这将使我更加高效。

这是正确的方法。从基本命令开始,然后挑选一些可以提高工作效率的命令。我喜欢关注此博客,以获取有关如何提高vim效率的提示。


2

tuxfiles.org拥有一个非常不错的备忘单。我认为学习命令有两点:

  • 定期阅读备忘单。不必担心使用它们全部或记住所有键,只需知道该命令存在即可。查找该命令并在重复进行某些操作时使用它。
  • 如果您发现自己定期执行某项操作(例如在特定字符后删除整行) d$),请使用Google快速搜索以查看是否可以找到相应的命令。
  • 写下您认为会有用的命令,并在编写代码时将该列表保存在可以查看的位置。我反对打印某些内容,而是鼓励您一次仅将几个命令用于便笺。
  • 如果可能的话,请观看其他程序员使用vim,并询问他们正在使用什么命令,因为您看到他们做一些有趣的事情。

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

  • vim将使用相同的字符表示相同的功能。例如,要删除一个字符后的一行,请使用d$。在使用特定字符后突出显示一行v$。因此请注意,这$表示您将在光标当前所在的行的末尾进行操作。
  • u是撤消,ctrl+r是重做。
  • 将数字放在命令前面将重复执行它。3dd会删除光标所在的行和其后的两行,类似地,3yy将复制光标所在的行和其后的两行。
  • 了解如何浏览通过使用缓冲区:ls列出的缓冲区,并且:bn:bp通过他们的循环。
  • 通读“入门”中找到的教程,:help 这可能是“学习绳索”的最佳方法,其余的命令将通过用法进行学习。

2

把它放到你的.bashrc文件中,以在最后编辑的行中最后编辑的文件打开vim

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

1

使用vim进行高效编辑了解开始所需的知识。并非该页面上的所有内容都是必不可少的,因此请樱桃选择您想要的内容。

从那里,使用vim进行所有操作。即使不是最有效的方式,“ hjkl”,“ y”和“ p”也会带给您很长的路要走。当您遇到一项任务时,您不知道该魔术键能否有效(或根本)完成该任务,而您发现自己多次执行该任务,请查找它。一点一点地它将成为第二天性。

我发现vim令许多卫星望而生畏(早在它的末尾没有“ m”时),但是稳定使用只花了大约一周的时间就可以提高效率。我仍然发现它是完成工作最快的编辑器。


到“使用vim进行高效编辑”的链接现在无效。我认为可以在robertames.com/files/vim-editing.html
Damian Powell
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.