撸一撸VIM -- 4 可视模式

2016年04月14日

一、叨叨逼

  • 吐槽效率
    • 各种会议果然是效率杀手,哪怕只是被简短的10分钟会议打断;所以总幻想未来的工作节奏:每天20分钟站会,一周90分钟周会;
    • 临时加任务 + 会议 ==> 更新延迟两天
  • 非常感谢diligent_sloth提出的宝贵建议:建议楼主不要罗列功能,manual里都查得到,写博客重在总结和升华,希望博主能写一些很有用的技巧
    • 期待有一天我也能写出让人眼前一亮的博客;
    • 在一些博客上引用了部分manual的内容,一方面是为了证明自己没有瞎逼逼,另一方面也希望小伙伴们能更好地理解;
    • Vim 7.4的manual(下载)有258页,相信能坚持看完的人不多;
    • 目前仍属于积累阶段,这个系列前面的内容更多的是重温Vim常用的核心功能(尽量不使用插件);
    • 所以,接下来我还是要人云亦云地写大部分人知道可视模式,命令模式等;
    • @diligent_sloth,系列的最后可能会有些你感兴趣的内容,希望到时你能给点建议。

二、说明

  • 什么是可视模式?
    • Vim的可视模式允许我们选中一块文本区域并在其上进行操作
  • 可视模式的语法规则(与普通模式的语法规则次序颠倒)
    • 重温一下普通模式的语法规则
      • {operator}{motion}
    • 可视模式
      • 先选中选区,再触发可视命令
      • 类似于典型文本编辑器的操作模式
  • 选择模式(建议少用)
    • 典型文本编辑器的操作模式 当选中一段文本后,再输入任何可见字符,选择的文本会被删除
    • 可视模式和选择模式
      • 选择模式按照上述模式工作,而可视模式不是
      • 相互切换:
  • 可视模式的子模式
    • 面向字符
      • 任意字符范围,适用于操作单词或短语
      • 触发命令:v
    • 面向行
      • 触发命令:V = SHIFT + v
    • 操作列块
      • 触发命令:
    • gv:重选上次的高亮选区
      • 前提是上次的高亮选区没有被删除
    • 子模式间的切换图
1
2
3
4
:help Select-mode

8. Select mode                                          *Select* *Select-mode*
Select mode looks like Visual mode, but the commands accepted are quite different.  This resembles the selection mode in Microsoft Windows.When the 'showmode' option is set, "-- SELECT --" is shown in the last line.

三、演示

1. 切换选区活动端 o

  • 高亮选区的范围由其两个对角的端点界定

2. 重复执行面向行的可视命令

  • 使用.命令重复低高亮选区所做的修改,此修改会重复作用于相同范围的文本
  • 下列例子采用以下配置:set shiftwidth=4 softtabstop=4 expandtab

3. 操作符命令 vs 可视命令

  • 尽量使用操作符命令
    • 我们需要重复修改的时候,最好是使用.命令,而.命令与操作符命令(普通模式)结合得很好
    • .与可视命令(可视模式)有一些异常情况,具体参照下面的manual(:h visual-repeat)
  • 可视命令的应用场景
    • 一次性的修改任务
    • 需要修改的文本范围的结构很难用普通模式的动作命令表达
  • vitU vs gUit
    • it:表示标签里面的内容,文本对象,一种特殊的动作命令;iw也是一个文本对象,表示一个单词
    • vitU:两条命令,vit + U
    • gUit:单独的命令
1
2
3
4
5
6
7
8
:h visual-repeat

6. Repeating                                            *visual-repeat*
When repeating a Visual mode operator, the operator will be applied to the same amount of text as the last time:
- Linewise Visual mode: The same number of lines.
- Blockwise Visual mode: The same number of lines and columns.
- Normal Visual mode within one line: The same number of characters.
- Normal Visual mode with several lines: The same number of lines, in the last line the same number of characters as in the last line the last time.

4. 使用面向块的可视模式处理表格(列)

5. 修改列文本

6. 在长短不一的高亮块后添加文本

  • a,i
    • 在普通模式:切换至插入模式
    • 在可视模式和操作符待决模式:当做一个文本对象的组成部分,如iw,it
  • A,I
    • 在普通模式、可视模式和操作符待决模式:切换至插入模式