Vim8 操作简记

Normal 模式是 Vim 默认打开状态。我们可以通过 Normal 模式,任何其它模式,我们可以在 Normal 模式下对文本进行浏览、排版、修改。Normal 模式在 Vim 中具有举足轻重的作用。

在 Normal 模式下,除了基本的移动指令 (j、k、h、l)、插入指令 (i、a)、撤销指令 (u、U) 等。Vim 通过 “操作符 + 运作命令 = 操作”(出自《Vim 实用技巧 第 2 版》) 扩展出了大量的操作指令。

指令、操作、操作指令都是,由人向计算机输入指令,计算机就会返回程序预设的结果。不过操作给我的感觉更像动词,所以后面我用指令来代替他。如上述等式所言指令由两部分组成,即 operator 和 motion,用前者指定行为,后者指定作用范围。还有一些只能在 Visual 模式或 operator 后面使用的叫:text object selection,文本对象选择器。

有一条额外的规则,即当一个操作符命令被连续调用两次时候,它会作用于当前行。如:dd 删除当前行;yy 复制当前行;>> 缩进当前行;gUgU 将当前行转换为大写,可以简写为 gUU

常用指令

Characterwise motions

  • dl 向右删除一个字符
    • d (delete)
    • l ( 右移一个字符,和 left 没有关系,键位好按)
    • 一般用 x 代替
  • dh 向左删除一个字符
    • h ( 左移一个字符)

  • dw 向右删除至下一个单词的开头
    • w (words forward)
    • W 大写表示只使用空格作为分隔
  • de 向左删除至单词的末尾,如果本身处于单词末尾,那么删除至下一个单词末尾
    • e (Forward to the end of word)
    • E 大写表示只使用空格作为分隔
  • dge 向左删除至上一个单词的末尾
    • ge (Backward to the end of word)
    • gE 大写表示只使用空格作为分隔
  • db 向右删除至单词的开头,如果本身处于单词开头,那么删除至上一个单词的开头
    • b (words backward)
    • B 大写表示只使用空格作为分隔

  • dd 删除当前行
  • d^ 删除光标之前的内容至空白字符处 (non-blank character)
  • d0 删除光标之前的内容
  • dg_ 删除光标之后的内容至空白字符处
  • d$ 删除光标及光标之后的内容

Linewise motions

  • dj 删除本行及下一行
  • dk 删除本行及上一行
  • dG 删除至文章末尾
    • G (Goto line,默认最后一行)
  • dgg 删除至文章开头
    • gg(Goto line,默认最后一行)
  • ggdG (删除整篇文章内容)
    使用 gg*G 对整篇文章进行操作比较麻烦,安装插件可以更加便捷:
    kana/vim-textobj-entire
    执行 dae 就可以达到和执行 ggdG 一样的效果。

Text object selection

  • daw 删除一个单词
    • aw (a word)
    • 2daw 或 d2aw 将忽略空格,删除两个单词
    • aW
  • diw 删除一个单词
    • iw (inner word)
    • 2diw 或 d2iw 包含空格,即删除一个单词和空格
    • iW
  • das 删除一个句子及后面的空白(没对中文句子进行支持)
  • dis 删除一个句子
  • dap 删除一个段落
    • ap(a paragraph)
  • dip 删除一个段落
  • da]、da[ 删除 [] 块内容,包含 []
  • di]、di[ 删除 [] 块内容,不含 []
  • da)、da(、dab
  • di)、di(、dib
  • da>、da<
  • di>、di<
  • dat 删除标签块,例如,包含
  • dit
  • da}、da{、daB
  • di}、di{、diB
  • da”
  • di”
  • da’
  • di’
  • da`
  • di`

Operators

  • c change
  • d delete
  • y 复制到寄存器
  • g~ 反转文本大小写)
  • gU 转换为大写
  • gu 转换为小写

Tips:
我们可以发现 Operator 操作符是不能单独使用的。

在 motions 或者组合指令前面加 n,可以达到执行 n 次的效果,例如:2daw,将删除两个单词,然后使用 u 可以一次性撤销。也可以在执行 daw 后使用 . 操作符,达到一样的效果,这需要执行 u 两次才能完全撤销。

word 和 WORD 的区别在于,word 可以由:spaces,tabs,<EOL> 分隔,而 WORD 仅使用 spaces 作为分隔。相同之处在于:它们都是由字母、数字和下划线或其他非空字符序列组成。而在中文中的表现却有所不同:将连续的纯汉字视为一个“单词”。

文本对象选择器中的 i 和 a 的区别在于:i 选择没有 space 的文本对象,而 a 包含 space。

对中文句子不那么友好的情况,因此 . 英文句号加空格来判断一个句子的结尾,

我在感觉没啥用的部分加了删除线。

参考文献