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
向下移动两行