《Practical Vim》阅读笔记 (2)

1. Vim 的模式: 通常我们说有三种模式,正常模式(Normal Mode), 插入模式(Inert Mode) 和可视模式(Visual Mode). 其实除此之外还有
    4) Operator-Pending Mode: 就是正常模式下按下操作(Operator) 指令(如 c, d 等) 后,等待输入移动(Motion) 指示时的模式。这时 Escape 或 Motion 指令后退回到正常模式
    5) Insert Normal Mode: 在插入模式时,按下 <Ctrl-o> 组合键后进入该模式, 此时可接受一个 Action (Operator + Motion = Action), 比如 3dd, 然后自动返回到插入模式。<Esc> 也能从 Insert Normal Mode 返回到插入模式。这方便了插入模式只想执行一次指令操作时来回切换, Insert Normal Mode 在 Vim 的状态栏中显示为下图那样 - NORMAL --(insert) --

    6) 替换模式(Replace Mode)-- REPLACE --R 会进到替换模式,随后输入往后覆盖,可尝试 <Insert> 键;  r{char} 和 gr{char} 临时进入单字符的替换模式,替换完当前字符立即退到正常模式,也就是光标不往下走。
    7) 可视替换模式(Visual Replace Mode) -- VREPLACE --, 用 gR 进入该模式,在处理 tab 字符时会更友好,还有别的好处吧,所以该书建议尽量用可视替换模式。
    8) 可视模式(Visual Mode),这就复杂了。它有三个子模式:
      character-wise Visual mode --  -- VISUAL ;
      line-wise Visual mode --  -- VISUAL LINE --
      block-wise Visual mode -- -- VISUAL BLOCK --

    9) 选择模式(Select Mode),可视模式下选择了内容后用 <C-g> 可在两种模式下切换,状态栏 -- VISUAL -- 和 -- SLECT -- 的不同,还有选择模式下直接输入就会替换当前的内容,与其他编辑器的行为一样,而可视模式需要按 c 来替换当前内容。

2. 插入模式下切换到正常模式时除 Esc, 还可以按 <C-[> 组合键,效果是一样的, 看个人的习惯。

3. zz 把当前行定位到屏幕中央,便于阅读代码,在插入模式下就可以用 <C-o> zz.

4. 在插入模式式不一定执行什么指令都要切换到正常模式去,比如 <C-h> 往回删除一个字符(backspace); <C-w> 往前删除一个单词(dbx); <C-u> 往回删除到行首(d0 或 d^)

5. 在插入模式下粘贴寄存器内容,例如yy yank 了当前行内容到寄存器 0 中,然后我们移动光标到某个位置进到插入模式,可以按 <C-r>0 在当前位置插入刚刚 yank 的内容,不需要在正常模式下用 p 来粘贴 yank 的内容。<C-r>0 就像系统命令的粘贴 Cmd-V 一样,内容会产生混乱的缩进,这时用 <C-r><C-p>{register} 就像执行了 :set paste 一样会原样粘贴。因为 <C-r> 后接寄存器的名字,而系统剪贴板的名字是 *, 所以 <C-r>* 就和 Cmd-V 一样了。:reg 可查看所有寄存器的内容及名字。

6. 表达式寄存器--会作运算的寄存器。在插入模式下 <C-r>= 会在下方打开一个 = 提示符,输入表达式,如 6*35, 然后按回车就会把计算结果 210 插入到当前位置。这时候用 :reg 可以看到 = 寄存器的内容。

7. 应用 <C-v>{123} 或 <C-v>u{1234} 来插入字符一般来说用处也不太大, 倒是 ga 命令查看当前光标所在字符的编码有用,例如 a 字符上 ga 看到的是 <a> 97, Hex 61, Octal 141, 可不用插件进到 hexmode, 任意字符都行,如  字,看到的是 <我> 25105, Hex 6211, Octal 61021, 也就是可以用 <C-v>u6211 输入  字。

8. 单独记下 <C-k>{char}{char} 的用途,可以输入一些比较有意思的字符(digraph)。插入模式式按下 <C-k> 后光标下出现 ? 等待输入两个字符,如 <C-k>ad 变成 . 想要输入中文的书名号 « 和 », 分别输入 <C-k><< 和 <C-k>>>. 而输入 <C-k>12, <C-k>34 变成 ½ 和 ¾. :digraphs 列出了所有的可用 <C-k>{char}{cahr} 输入的字符,或可用 :h digraph-table 查看。

9. 可视模式与正常模式有一个操作不同是顺序,如在正常模式下想修改当前的单词 March 为 April, 需要 cawApril, 而可视模式是 viw 选择当前单记号,然后 cApril 修改替换掉选择区域的内容。这里 v 后面的 iw 是 motion 命令,即 inner world  的意思,可用 :help iw 来获得帮助,类似的 is, ip 等。

10. 进入 Vim 的三个 Visual 子模式的快捷键分别是:
      1) v 进入 character-wise Visual mode
      2) V 进入 line-wise Visual mode
      3) <C-v 进入 block-wise Visual mode
      -- gv 重新上一次的选择,如果上次的内容已删除了就比较奇怪了,它只记住上次选择的位置区域

11. o 在选择区域的前后跳转,对于以三种选择模式都适用。

12. . 重复之前选择区域的操作,相当于是 gv 后再 . 操作。gv 是重复上一次的选择,对选择区域的命令操作后会变回到正常模式,如 V 后 gU, 后该行全变为大写, j 移到下行后 . 就能重复的把现在所在行变为大写。

13. Vim 的 VISUAL BLOCK 模式进行列操作时会让人有所费解,因为在选定了列进入插入模式后输入变化只暂时体现在最上面选择行上,只有当退出到正常模式时输入才会作用所有行上。试下这样的操作 <C-v>3jllc{chars}<Esc>, 在多行的最前面同时插入字符 a 可以这样做 0<C-v>jjIa<Esc>, 也是只有按下的 <Esc> 键后才能看到所有选择行才发生变化。但是列删除是在多行上立即见效的。

14. 在块可视模式下,按 A 或 I 可以分别在选择区的左右边缘插入,而小写的 a 或 i 就失去在正常模式下的功效了。

链接:

  1. vim不易发现的强大功能

本文链接 https://yanbin.blog/practical-vim-2-notes-2/, 来自 隔叶黄莺 Yanbin Blog

[版权声明] Creative Commons License 本文采用 署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0) 进行许可。

Subscribe
Notify of
guest

0 Comments
Inline Feedbacks
View all comments