Vim常用命令小记(7)——可视模式
进入和退出可视模式
v 进入可视模式,以字符为单位选择。
V 进入可视模式,以行为单位选择。
CTRL-V 进入列块可视模式。
gv 启动可视模式,重新选择上一次的选择区和相同模式。
在可视模式下,该命令将交换当前和上一次选择区。
在可视模式下使用 "p" 或 "P" 后,本命令选择被粘贴的文本。
<LeftMouse> 设置当前光标位置。
如果处在可视模式,则退出可视模式。此功能只有在 'mouse' 选项包含 'n' 或 'a' 才可用。
如果点击位置与屏幕最后一行的距离在 'so' 选项设置的范围之内,屏幕文本将会上滚。
如果点击位置与屏幕第一行的距离在 'so' 选项设置的范围之内,屏幕文本将会下滚。
<RightMouse> 如果当前不是可视模式,则进入可视模式。
光标位置和鼠标点击位置之间的文本将被高亮显示。
如果当前已经处于可视模式,文本高亮选择区的起点或终点之一将被置为鼠标点击的位置。
起点或终点的选择取决于谁离点击位置更近。此功能只有在 'mouse' 选项包含 'n' 或 'a' 时才可用。
<LeftRelease> 如果 <LeftRelease> 的位置与 <LeftMouse> 不同,那么它的作用等同于 <LeftMouse>。
此功能只有在 'mouse' 选项包含 'n' 或 'a' 时才可用。
<Esc> 可视模式下: 停止可视模式。
CTRL-C 可视模式下: 停止可视模式。
如果插入模式等待中 (模式信息显示为 "-- (插入) 可视 --"),插入模式同时被停止。
改变可视区域
o 跳到高亮文本的另一端
即当前光标位置变成高亮文本的起点,光标移动到高亮文本的另一端。高亮区域保持不变。
O 跳到高亮文本的另一端。
同 "o" 命令相似,但是在列块模式下,光标移动到水平方向的另一个角。
如果这个角上的字符占据了多个屏幕位置 (例如一个 <Tab>),那么高亮的文本区域会被改变。
相关概念
对可视区域可以使用的操作符包括:
~ 切换大小写
d 删除
c 修改
y 抽出
> 右移
< 左移
! 通过外部命令过滤
= 通过 'equalprg' 选项的命令过滤
gq 按照 'textwidth' 指定的宽度排版行
可用的对象包括:
aw 一个单词 (包括空格)
iw 内含单词
aW 一个字串 (包括空格)
iW 内含字串
as 一个句子 (包括空格)
is 内含句子
ap 一个段落 (包括空格
ip 内含段落
ab 一个 () 块 (包括小括号)
ib 内含 () 块
aB 一个 {} 块 (包括大括号)
iB 内含 {} 块
at 一个 <tag> </tag> 块 (包含 tag)
it 内含 <tag> </tag> 块
a< 一个 <> 块 (包括 <>)<|
i< 内含 <> 块<|
a[ 一个 [] 块 (包括 [])[|
i[ 内含 [] 块[|
a" 一个双引号字符串 (包括引号)
i" 内含双引号字符串
a' 一个单引号字符串 (包括引号)
i' 内含单引号字符串
a` 一个反引号字符串 (包括反引号)
i` 内含反引号字符串
其它可以使用的命令:
: 为高亮的行启动 Ex 命令
r 修改 (4)
s 修改
C 修改 (2) (4)
S 修改 (2)
R 修改 (2)
x 删除
D 删除 (3)
X 删除 (2)
Y 抽出 (2)
p 放置
J 连接 (1)
U 变成大写
u 变成小写
^] 查找标签
I 列块插入
A 列块添加
(1): 总是应用到整行。
(2): 如果不是使用 CTRL-V,应用到整行。
(3): 如果不是使用 CTRL-V,应用到整行。如果使用 CTRL-V,删除到行尾。
(4): 如果使用 CTRL-V,只对列块操作。
----------------------------------------
列块插入
对一个列块可视模式下的选择区,I{string}<ESC> 命令将会从选择区开始的位置在每一行插入字符串 {string}。
但是只有那些和选择区有交集的行才会被插入,因此过短的行将不受影响。
如果选择区包含制表符,制表符将会被分开,以维持选择区的可视列不变。
列块添加
对一个列块可视模式下的选择区,A{string}<ESC> 命令将会从选择区结束处开始在每一行插入字符串 {string}。
当行的长短不同的时候,将导致选择区的右边界不是直线,这时候列块添加操作的行为就会有所不同:
- 如果列块是用 <C-v>$ 命令产生的,字符串被附加到每一行的结尾。
- 如果列块是用 <C-v>{move-around} 命令产生的,字符串将被附加到每一行列块的结尾。
对于比较短的行,行尾和列块结尾列之间将以空白填充。
列块修改 (c)
选择区的所有文本将被相同的字符串代替。
当使用 "c" 命令的时候选择区的文本将被删除,然后进入插入模式。
可以键入不带回车的文本。当你 <Esc> 的时候所键入的文本将被插入选择区的每一行。
列块修改 (C)
同 "c" 命令,但是选择区将扩展到每一行的结尾。
列块平移
列块按照 'shiftwidth' 指定的单位移动。与块的右边界无关。
块的左边界决定了从哪一点开始右移,填充的空白根据 'ts' 和 'et' 设置的宽度最优化制表符的使用方式。
块的左边界决定了左移的终止点。
列块替换
高亮区域的每个字符被同一个字符代替。
制表符将被分割,虚拟空白字符也将被替换,以保持屏幕布局。
重复
当重复一个可视模式操作时,该操作将被应用到与上次操作相同数量的文本上:
- 行可视模式: 相同数量的行。
- 列块可视模式: 相同数量的行和列。
- 选择区在一行之内的普通可视模式: 相同数量的字符。
- 跨越多行的普通可视模式: 相同数量的行,最后一行的字符数与上次相同。
重复操作的起始点在当前光标位置。
如果重复的命令中包含 "$" 命令来扩展选择区,那么重复操作将应用到最长行的最右一列。

浙公网安备 33010602011771号