vim入门
很久以前, 得到一本传说级教程,然后就看了几十页, 现在基本的可以使用,但好些时候稍有不方便,把书拿出来,看了看
移动
- 实际行和屏幕行
在常用操作前加上g
就变成了屏幕行移动, 比如j
变成了gj
这个实际行是set nu
出现的行号, 屏幕行的话就是如果一行比较长, 那某一行可能在屏幕上占用好几行
g0
和g$
可以用在屏幕行首尾跳转, 更小的范围跳转, mark一下, 相见恨晚
还有g^
- 基于单词移动
下面的下一个…可能误解
比如下一个单词开头
是下一个 单词的开头
aaa bbb
w
下一个单词开头e
下一个单词结尾
下面俩是反向, 往前找b
下一个单词开头ge
下一个单词结尾…这个我好像用不了
单词和字串
面向单词的操作是小写的w
,b
,e
,ge
面向字串的操作是大写的W
,B
,E
,GE
单词: 由字母, 数字, 下划线, 或者其他空白字符组成
这个定义怎么理解:
这里的空白字符都是自成单词
字串: 由非空白字符序列组成, 以空白字符分割e.g. it's going too slow
这里的
e
,.
,g
,.
这是四个单词行内查找字符
f{char}
下一个 ;
上一个 ,全文查找
用命令/
下一个 n
上一个 N
取消高亮 :nohl
- 边界
iw 当前单词
aw 当前单词及一个空格
iW 当前字串
aW 当前字串及一个空格
is 当前句子
as 当前句子及一个空格
ip 当前段落
ap 当前段落及一个空行
模式
body { color: #3c3c3c; }
a { color: #0000EE; }
strong { color: #000; }
要匹配颜色值
/#\([0-9a-fA-F]\{6}\|[0-9a-fA-F]\{3}\)
天…真的好复杂…
在此例中,我们用到了 3 类括号。方括号缺省具有特殊含义,因此不用转义。圆括号会按原义匹配字符(及),因此需要转义,使其具有特殊含义。花括号也一样需要转义,不过,我们只需为开括号转义,而与之对应的闭括号则不用,因为 Vim 会推测我们的意图。圆括号的情况有所不同,无论开闭括号都必须转义
这里的或者|
也转义了
还是不太懂为什么这里方括号不转义
例子摘自书… 记下记下记下
书里说道\v
开启新世界大门!
使用了\v
假定除_、大小写字母以及数字 0 到 9 之外的所有字符都具有特殊含义, 所以!
/\v#([0-9a-fA-F]{6}|[0-9a-fA-F]{3})
开心. 如果, 用\x
的话就可以变成
/\v#(\x{6}|\x{3})
这里的#
没有特殊含义, 所以也可以直接用
- 圆括号捕获子匹配
匹配连续出现两次的相同单词I love Paris in the the springtime.
/\v<(\w+)\_s+\1>
\1
~\9
代表第n个子匹配, \0
代表整个匹配<>
匹配单词边界\_s
匹配空白字符或者换行
另外在圆括号前加上%
表示不捕获
- 单词边界
用the there three
/\vthe
的话…会匹配三个单词
如果/\v<the>
就匹配the
一个单词