第四章 vim 可视模式
vim的可视模式允许我们选中一块文本区域并进行操作
3种不同的可视模式 分为 操作字符文本 行文本 块文本
.命令用来重复执行可视模式中的命令 只有在操作面向行的选区时 才特别有用
而在操作面向字符的选区时 有时无法达到我们的预期
技巧20 深入理解可视模式
普通模式的很多命令 在可视模式中也完成相同的功能 例如h j k l f{char} ; , n/N
但是在指定操作的范围 二者的方式有区别
在普通模式中 先触发修改命令 然后使用动作命令指定其作用范围
可视模式中 先选中区域 然后再出发修改命令
两种模式的次序是颠倒的
例
在vim中将april单词更改为march
先定位光标到单词上
viw 高亮选择此单词
c 命令更改单词内容
输入单词
选择模式 类似于windows下其他的常见的文本编辑器
当选中一段选区后 再输入文本会替换选中的文本 vim的可视模式也是按照此种方式工作的
<C-g>可以在可视模式及选择模式之间切换 屏幕下方的提示信息会由可视变为选择 如果在选择模式中输入任意可见字符,会替换所选内容并切换到插入模式 也可在可视模式中 用c来修改所选择的内容
选择模式仅仅用来迎合熟悉其他文本编辑器的用户 并不常用
技巧21 选择高亮选区
可视模式有3个不同的子模式 来处理不同类型的文本
命令 用途
v 激活面向字符的可视模式
V 面向行
<C-v> 面向列块
gv 重选上次的高亮选区
可视模式间的切换
与普通模式下激活可视模式的方式相同
选区的范围由两个端点界定 其中一段固定 另一端可以随光标自由移动 可以用o键来切换其活动的端点
o键不用退出可视模式 重新选区
技巧 22 重复执行面向行的可视命令
集体缩进
选中连续的行
1. V3j 选中连续的3行
2. >. 连续缩进2次
准备工作
让< > 能够正常工作 需要把shiftwidth和softtabstop 的值设置为4 并启用expandtab选项
:set shiftwidth=4 softtabstop=4 expandtab
上例中>命令对它进行缩进 执行一次就会返回普通模式 如果还想选中上次的选区 按gv就可重选相同的文本 再次调用缩进命令。
技巧23 只要可能 ,最好用操作符命令 而不是可视命令
可视模式和vim的普通模式 .命令有时会有一些异常的表现
<a href="#">one</a>
<a href="#">two</a>
<a href="#">three</a>
将链接的文字转换为大写格式
用vit 选择标签中的内容 也即one,it命令是一种被成为文本对象的特殊动作命令
使用可视模式下的命令
命令 缓冲区内容
vit one 选中待转换文本
U ONE 将选中的文本转换为大写
j. TWO 重复动作
j. THRee 重复动作 出现问题
结论 当一条可视命令被重复执行的时候 它会影响相同数量的文本 one和two均为3个字母 three为5个字母 所以只能以初次的3个字母为标准来执行
使用普通模式下的操作符命令
按键 缓冲内容 作用
gUit ONE gU为操作符 it为动作命令 将one转变为大写
j. TWO 重复动作
j. THREE
结论
均需要四次按键 意义不同
可视模式的方式 4次按键可以被当做两个独立的命令
vit为选中选区 U用来对选区转换
普通模式的四个按键被当成一个单独的命令 它由一个操作符 gU和一个动作命令it组成
有时修改的文本范围的机构很难用动作命令表达出来 此情况是可视模式擅长的
技巧24 用面向列块的可视模式编辑表格数据
纯为本表格
normal mode 15
insert mode 31
visual mode 44
想用管道符画出一条竖线来隔开这两列文本 使之看起来更像一个表格
按键操作 缓冲区 作用
<C-v>3j 选中光标位置向下的3列
x... 每行各缩3各字符
gv 重复选中原来的列
r| 每行的光标位置插入管道符号
yyp 选中顶端行 并复制一行
Vr- 选中整行 并且用-替换
完成效果图
chapter | page
---------------------------------
normal mode | 15
insert mode | 31
visual mode | 44
技巧25 修改列文本
列块可视模式同时往若干行中插入文本。
在列块选择后 删除操作会同时影响所有被选中的行 但是插入操作只影响行或顶行
技巧26 在长短不一的高亮块后添加文本
列块模式在操作方形的代码块时可用 也可以用在长短不一的行上
三段不同长度的代码
在每行的后面加一个分号
先将光标定位到第一行的行尾
<C-v>jj$ 将1 ‘a’以及下面的等号及后面的所有内容选中 再光标定位到行尾
A; 尾部添加; 此时模式变为插入模式 仅仅第一行的末尾加了;
<ESC> 此时 三行后面均加分号
可视模式下 A键之后 会进入插入模式 任何输入的内容仅会出现在顶行的行首 但是一旦返回到普通模式 这些修改就会被扩散到其余的选中的行上
vim对i和a键的约定
普通模式切换到插入模式的命令的几个约定 i和a都能完成切换 并分别将光标置于当前字符之前或之后 I和A命令的表现类似 只是他们分别把光标置于当前行的开头和结尾
但是在可视模式及操作符待决模式中 i和a键沿用不同的约定 他们会被当做一个文本对象的组成部分 所以在可视模式的时候按i键不会进入插入模式