我认为可能是时候记住vim命令了。 在我的高中时,我们所有的CS课程都要求我们学习emacs和终端命令 。 虽然我确实对vim有粗略的了解(足以保存git commits并退出窗口),但我并不一定具有足够的知识来完全忽略键绑定。
最近,我偶然发现了以模仿《塞尔达传说》为原型的可爱的基于文本的游戏Vim Adventures。 它教了一些更基本的vim命令,并大大降低了学习曲线(特别是vi和vi以其界面极其简约而著称,但其中包含许多通常对于常规使用至关重要的快捷方式-有点像街头霸王和VSCO)。
无论如何,随着我在游戏中的进展,我意识到拥有某种速查表可能会有所帮助。 游戏以特定顺序列出了您需要了解的所有主要命令。
这是我的词汇表版本,但有更多的顺序:
一般 [count]:指定命令将被迭代的次数,默认为1
:删除光标后面的最后一个字符
yank:存储文本,但不修改文本(复制文本)
标记:为导航目的在文件内设置的隐藏位置
`:将光标直接放在标记上 ':将光标置于标记行的第一个非空白字符上 寄存器:指定存储在内存中的文本。 有九种类型:
未命名的寄存器“” 编号寄存器“ 0-” 9 小删除寄存器“- 命名寄存器“ a-” z 黑洞寄存器“ _ 四个只读寄存器“; /”,/“%/”# 表达式寄存器“ = 选择和下降寄存器“ * /” + /”〜 最后搜索模式“ / nu,nonu:在文本的每行前面显示行号
:set nu:显示行号 :set nonu:隐藏行号 :set nu !:切换行号 :set nonu !:切换行号。 主要 Esc:退出键-将当前模式退出到“命令模式”
i:用于插入文本的插入模式
::用于插入命令的最后一行模式(保存文档,帮助)
q:允许您退出或退出vi
q !:强制退出 wq:退出,将修改后的文件写到原始文件 卷动 [count] h:将光标向左移动一个空格
[count] j:将光标向下移动一个空格
[count] k:将光标向上移动一个空格
[count] l:将光标向右移动一个空格
[count] w:将光标移至下一个单词的开头(标点符号视为单个单词)
[count] W:将光标移动到下一个单词的开头(单词是由空格分隔的字符/标点的序列)
e:将光标移至下一个单词的末尾(标点符号视为单个单词)
E:将光标移至下一个单词的末尾(单词是由空格分隔的字符/标点的序列)
[count] b:将光标移至上一个单词的开头(标点符号视为单个单词)
[count] B:将光标移至上一个单词的开头(单词是由空格分隔的字符/标点的序列)
0:将光标移至行首
^:将光标移动到该行的第一个非空白字符
[count] $:移至行尾或[count] -1行
[count] f {char}:将光标移到右侧第[count]个{char}
[count] F {char}:将光标移到左侧第{count}个第[count]次
[count] t {char}:将光标{char}的第[count]次出现之前向右移动一个空格
[count] T {char}:将{char}的第[count]次出现后向左移动光标一格
[count] ;:重复最后一个f / F / t / T命令
[count] ,:沿相反方向重复最后一个f / F / t / T命令
导航(围绕文档) [count](:导航到上一个句子的开头(一个句子以'。','!'或'?'结尾,后跟一个空格或换行符)
[count]):导航到下一个句子的开头(一个句子以'。','!'或'?'结尾,后跟一个空格或换行符)
[count] {:将光标移到当前段落之前的空白行
[count]}:将光标移至下一段之前的空白行
[count] gg:导航到文档的第[count]行,默认情况下转到第一行
[count] G:导航到文档第[count]行上的第一个非空白字符,默认情况下转到最后一行的开头
[count] [{,[(,]),]}:转到上一个(或下一个)不匹配的'{'')',从但不包括当前光标位置开始
[count] |:将光标移动到当前行的第[count]列
导航(在窗口周围) z:将光标线重画到:
zt:窗口顶部 zz:窗口中间 zb:窗口底部 [count] H:从窗口的第一行到第[count]行的第一个非空白字符,无需滚动屏幕
M:到窗口中线的第一个非空白字符
[count] L:从窗口的最后一行到第[count]行的第一个非空白字符
搜索 *:向前搜索当前行中最接近光标的单词的第[count]个出现。 搜索的单词是第一个
光标下方的关键字(AZ,az,0–9,_,@) 光标后的第一个关键字 光标下的非空白单词 光标后的第一个非空白单词 #:与*相同,但向后搜索
[count] / {pattern}:向前搜索图案,默认为最后一个图案
[count]?{pattern}:向后搜索图案,默认为最后一个图案
[count] n:重复最后一个“ /”或“?” 搜索
[count] N:重复最后一个“ /”或“?” 反向搜索
%:在该行上或此行之后找到下一个项目,然后跳转到其匹配项(包括([{{}])/ * * / #if #ifdef #else #elif #endif)
选拔 注意:节略,请参阅文本对象以获取更多详细信息
[count] aw:选择一个单词及其后的空白,除非光标位于一个单词前的空白中(然后包括之前的空白)
[count] aW:选择一个WORD及其后的空白,除非光标位于WORD之前的空白中(然后包括之前的空白)
[count] iw:选择一个单词(空格算作单词)
[count] iW:选择一个WORD(空格作为WORD计数)
[count] as:选择一个句子及其后的空白,除非光标位于该空白之前(然后包括之前的空白)
[count]是:选择一个句子(空格作为句子计数)
[count] ap:选择一个段落及其后的空白,除非光标位于该空白之前(然后包括之前的空白)
[count] ip:选择一个段落(空格算作段落)
删除中 [count] x:删除当前行中光标下方和之后的字符
[count] X:删除当前行中光标之前的字符
[count] r {char}:将光标下方的字符替换为{char}
d {motion}:删除{motion}移过的字符/单词
[count] dd:删除整行,无论光标在行中的位置如何
[count] D:删除光标下方的字符,直到该行的末尾,再增加[count] -1行
[count]〜:切换光标下方字符的大小写并将光标向右移动
:delm {args},:delmarks {args},:delm !,:delmarks !:删除指定的标记,包括az,AZ; 对于!,将删除所有现有的az标记
文字修改 [count] p:将来自指定寄存器的文本放在光标之后。 如果未指定寄存器,请使用未命名的寄存器(“),其中包含最后一个被删除,更改或删除的文本
[count] P:将来自指定寄存器的文本放在光标之前。 如果未指定寄存器,请使用未命名的寄存器(“),其中包含最后一个被删除,更改或删除的文本
[count] .:重复最后一次简单的更改,默认为最后一次更改的计数(如果最后一次更改包含编号的寄存器,则寄存器编号将递增)
插入模式命令 注意:Esc退出插入模式
[count] i {text}:在光标之前插入文本
[count] I {text}:在该行的第一个非空白字符之前插入文本
[count] a {text}:在光标后附加文本,如果光标在空行的第一列,则从此处开始插入
[count] A {text}:将文本附加到行尾
[register] c {motion}:删除运动
[register] [count] cc:将行删除到寄存器中并开始插入(逐行)
[register] [count] C:从光标位置删除到该行的末尾,再将[count] -1个行插入寄存器并开始插入
[register] [count] s:删除或替换字符到指定的寄存器中,然后开始插入(不是逐行),“ cl”的同义词
[register] [count] S:cc的同义词
[count] o {text}:在光标下方开始新行并插入文本
[count] O {text}:在光标上方换行并插入文本
扬京 [register] y {motion}:将{motion}文本插入寄存器,默认情况下存储在“ 0 register”中
[register] [count] yy:将行拖入寄存器,该行中的光标位置无关紧要
[register] [count] Y:yy的同义词
撤销重做 [count] CTRL + R,:redo:重做撤消的更改
[count] u,:undo:撤消更改
寄存器 :reg {arg}:显示{arg}指定的编号和命名寄存器的内容,或默认列出所有内容
文字对象 单词:由空格,空格,制表符,分隔的字母/数字/下划线或非空白字符序列,包括空行
WORD:一系列由空格(空格,制表符,)隔开的非空白字符,包括一个空行
句子:以“。”,“!”或“?”结尾的一系列单词 跟一个空格或换行符
段落:以换行符结尾的一系列句子
文本对象:操作后使用两个字符来指定操作范围。 第一个字符是“ a”(一个对象,包括空白)或“ i”(内部对象,没有空白或只有空白)。 第二个字符确定对象类型
w&#xff0c;W&#xff0c;s&#xff0c;p&#xff08;单词&#xff0c;单词&#xff0c;句子&#xff0c;段落&#xff09; “&#xff0c;”&#xff0c;“&#xff08;带引号的字符串&#xff09; {&#xff0c;}&#xff0c;B&#xff08;{}块&#xff09; &#xff08;&#xff0c;&#xff09;&#xff0c;b&#xff08;&#xff08;&#xff09;块&#xff09; [&#xff0c;]&#xff08;[]块&#xff09; <&#xff0c;>&#xff08;<>块&#xff09; t&#xff08;HTML / XML标签块&#xff09; 有兴趣了解更多吗&#xff1f; 幸运的是&#xff0c;在线上有大量资源可以帮助您适应vi / vim环境。 这些站点的范围可帮助您记住基本的键绑定和快捷方式&#xff0c;以设置自己的宏并自定义工作环境。 您很快就会发现&#xff0c;vi / vim比简单的文本编辑器具有更多的实用性&#xff01;
您觉得本指南有帮助吗&#xff1f; 如果是这样&#xff0c;给它“拍手”和分享&#xff01;
随时在网上其他地方找到我&#xff1a;
推特 &#64;sharontlin
脸书 &#64;sharonlinnyc
GitHub &#64; sharon-lin
From: https://hackernoon.com/a-glossary-of-vi-commands-e17cbc5b12f1