vim 是一个基于【动词】 + 【名词】 建立的语法表。
Vim 中常用的名词
方位名词表
基于字符的移动:
h:左j:下k:上l:右 ^ | k 提示: h 的键位于左边,每次按下就会向左移动。 l 的键位于右边,每次按下就会向右移动。 j | j 键看起来很象一支尖端方向朝下的箭头。 v
基于单词(a-zA-Z0-9_)的移动:
w 移到下一个英文类单词的开头e 移到下一个英文类单词的末尾b 移到前一个英文类单词的开头ge 移到前一个英文类单词的末尾
这里的英文类单词是基于a-zA-Z0-9_这类英文的单词,如果我们希望基于其他语言带空格分割我们可以用大写代替:
W 移到下一个单词的开头E 移到下一个单词的末尾B 移到前一个单词的开头gE 移到前一个单词的末尾
基于行(sentence)的移动:
0 移动到当前行的第一个字符;^ 移动到当前行中的第一个非空字符;g_ 移动到当前行的最后一个非空白字符;$ 移动到当前行的最后一个字符;n| 移动到当前行的第 n 列。G 移动光标到文档尾行
Vim 中常见的动词(操作符)
y 复制文本d 删除文本,并保存到寄存器c 删除文本,保存到寄存器,并开启「插入」模式
操作符可以和名词进行组合,即操作符+名词,比如:
y$ 把当前位置到当前行最后一个字符进行复制dw 从当前位置删除到下一个单词的开头y2h 向左复制两个字符
特殊的,操作符也可以通过两次来执行行操作,比如:yy表示复制当前整行内容。
文本对象
Vim有一种用文本对象捕获这种结构的方法。文本对象与运算符一起使用。有两种类型的文本对象:
i + 文本对象 文本对象内部a + 文本对象 包含外部的文本对象
文本对象列表:
w 一个单词p 一个段落s 一个句子( or ) 一对小括号 ( ){ or } 一对大括号 { }[ or ] 一对中括号 [ ]< or > 一对尖括号 < >t XML标签" 一对双引号 " "' 一对单号 ' '` 一对 ` `
i(表示 () 内部的文本,di( 表示删除 () 内部的内容;da(则表示连同括号和里面的内容一起删除。dit表示删除一个XML标签,例如:
Header1
Paragraph1
光标在Header1的位置,使用dit会把Header1删除,dat会把
Header1
删除。组合性语法
在 Vim 中可以组合较简单的命令执行复杂的命令。当 Vim 与外部程序集成时,可组合性的真正威力就显露出来了。
假如你有一个非常混乱的文本,如下所示,你想把它变成列表形式:
Id|Name|Cuteness01|Puppy|Very02|Kitten|Ok03|Bunny|Ok
可以用终端 column 命令组合 Vim 命令完成,运行!}column -t -s "|",即可得到:
Id Name Cuteness01 Puppy Very02 Kitten Ok03 Bunny Ok
上述的操作过程可分解成这样:动词为!(过滤操作符),名词为}(转到下一段)。过滤器操作符!接受另一个参数,一个终端命令column -t -s "|"。
快捷设置
文件中移动
为了方便使用相对行可以设置:
:set relativenumber number
同时开启相对行和真实行,这样就知道自己在哪个相对的行了,例如:2j向下移动两行