vim入门

Author Avatar
Aryb1n 8月 12, 2017

很久以前, 得到一本传说级教程,然后就看了几十页, 现在基本的可以使用,但好些时候稍有不方便,把书拿出来,看了看

移动

  1. 实际行和屏幕行
    在常用操作前加上g就变成了屏幕行移动, 比如j变成了gj

这个实际行是set nu出现的行号, 屏幕行的话就是如果一行比较长, 那某一行可能在屏幕上占用好几行

g0g$可以用在屏幕行首尾跳转, 更小的范围跳转, mark一下, 相见恨晚
还有g^

  1. 基于单词移动
    下面的下一个…可能误解
    比如下一个单词开头下一个 单词的开头
    aaa bbb

w 下一个单词开头
e 下一个单词结尾

下面俩是反向, 往前找
b 下一个单词开头
ge 下一个单词结尾…这个我好像用不了

  1. 单词和字串
    面向单词的操作是小写的 w, b, e, ge
    面向字串的操作是大写的 W, B, E, GE
    单词: 由字母, 数字, 下划线, 或者其他空白字符组成
    这个定义怎么理解:
    这里的空白字符都是自成单词
    字串: 由非空白字符序列组成, 以空白字符分割

    e.g. it's going too slow
    

    这里的e,.,g,. 这是四个单词

  2. 行内查找字符
    f{char}
    下一个 ;
    上一个 ,

  3. 全文查找
    用命令/
    下一个 n
    上一个 N
    取消高亮 :nohl

  1. 边界
    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})

这里的#没有特殊含义, 所以也可以直接用

  1. 圆括号捕获子匹配
    I love Paris in the
    the springtime.
    
    匹配连续出现两次的相同单词
    /\v<(\w+)\_s+\1>
    

\1~\9代表第n个子匹配, \0代表整个匹配
<>匹配单词边界
\_s匹配空白字符或者换行

另外在圆括号前加上%表示不捕获

  1. 单词边界
    the there three
    
    /\vthe的话…会匹配三个单词
    如果/\v<the>就匹配the一个单词