
vim 是一个基于【动词】 + 【名词】 建立的语法表。
Vim 中常用的名词
方位名词表
基于字符的移动:h:左
j:下
k:上
l:右
         ^
         |
         k          提示: h 的键位于左边,每次按下就会向左移动。
    <- h    l ->           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 复制文本 | 
操作符可以和名词进行组合,即操作符+名词,比如:y$ 把当前位置到当前行最后一个字符进行复制
dw 从当前位置删除到下一个单词的开头
y2h 向左复制两个字符
特殊的,操作符也可以通过两次来执行行操作,比如:yy表示复制当前整行内容。
文本对象
Vim有一种用文本对象捕获这种结构的方法。文本对象与运算符一起使用。有两种类型的文本对象:i + 文本对象    文本对象内部
a + 文本对象    包含外部的文本对象
文本对象列表:w         一个单词
p         一个段落
s         一个句子
( or )    一对小括号 ( )
{ or }    一对大括号 { }
[ or ]    一对中括号 [ ]
< or >    一对尖括号 < >
t         XML标签
"         一对双引号 " "
'         一对单号 ' '
`         一对 ` `
i(表示 () 内部的文本,di( 表示删除 () 内部的内容;da(则表示连同括号和里面的内容一起删除。dit表示删除一个XML标签,例如:<div>
  <h1>Header1</h1>
  <p>Paragraph1</p>
</div>
光标在Header1的位置,使用dit会把Header1删除,dat会把 <h1>Header1</h1> 删除。
组合性语法
在 Vim 中可以组合较简单的命令执行复杂的命令。当 Vim 与外部程序集成时,可组合性的真正威力就显露出来了。
假如你有一个非常混乱的文本,如下所示,你想把它变成列表形式:
| Id|Name|Cuteness | 
可以用终端 column 命令组合 Vim 命令完成,运行!}column -t -s "|",即可得到:Id  Name    Cuteness
01  Puppy   Very
02  Kitten  Ok
03  Bunny   Ok
上述的操作过程可分解成这样:动词为!(过滤操作符),名词为}(转到下一段)。过滤器操作符!接受另一个参数,一个终端命令column -t -s "|"。
快捷设置
文件中移动
为了方便使用相对行可以设置::set relativenumber number
同时开启相对行和真实行,这样就知道自己在哪个相对的行了,例如:2j向下移动两行
