Vim技巧之四大模式_可视模式
2015-07-20 09:17
411 查看
转载请注明出处:http://blog.csdn.net/ii1245712564/article/details/46960387
Vim技巧之四大模式_可视模式
什么是可视模式
如何选中一块区域
如何快速选中目标区域
如何重复选择目标区域
如何在选中中切换选择模式
如何对选中的区域进行操作
可视命令的重复
最好使用操作符命令而不是可视命令
这上面说的什么
举个栗子:注意左下角的不同选择模式的提示
字符文本的选择,移动到
行文本的选择,点击
块文本的选择,点击
举个栗子:
比如在下面的栗子里面,我们要从
首先点击
如果我们要选择
我们可以直接
这样的用法还有很多,读者可以自我领会
大家有没有发现在使用可视模式的时候,一旦切换到可视模式以后,选中的区域是由两个端点来界定的(一个在左上角,一个在右下角),我们在默认情况下只可以控制右下角的端点,但是有些时候发现我们需要调整左上角的端点,这时我们可以使用
举个栗子:
假如我们在块选择模式下面已经选中了下面的区域
现在我们需要将选择区域向左再扩充一点,可以点击
举个栗子:
假如我们选中字符串
删除
不仅如此,就算这行文本的列数有所偏移,比如将文本多缩进了几行,再次
所以,博主个人估计
于是博主再次做实验,将上下两行进行调换,再次
发现和预期的一样。
比较常用的就是上面的几个。
下面我们来举几个栗子:
栗子一:
假设现在我们有下面一个C++文件
首先
再用
但是只用按下
栗子二:
下面是一个打开四个文件标识符的栗子
如果我们已经将四个文件
点击
跟之前的栗子一样,只有一行文本发生改变,点击
字符文本模式栗子:
首先在
注意这里我们选中的是四个字符,之后我们将光标向右移动几位,移动到单词
得到下面的结果:
我们惊奇的发现
行文本模式栗子:
用
现在跳转到
发现
块文本模式栗子:
点击
现在我们将光标下移一行,并将光标移到图示位置
此时点击
我们发现从光标开始的右下角的一个矩形范围被调换了大小写,该矩形范围的大小与上次可视模式选中的区域大小一样
于是博主总结了一下,不同的选择模式有不同的重复效果
举个栗子:
我们要将
在
如果我们下移一行,用
发现只作用了前两个字符,后面的
不能重复上次的操作,难道还需要手动再来一遍?其实并不需要,我们只用使用
上面的栗子我们可以用操作符命令更好的实现需求
使用
Vim技巧之四大模式_可视模式
什么是可视模式
如何选中一块区域
如何快速选中目标区域
如何重复选择目标区域
如何在选中中切换选择模式
如何对选中的区域进行操作
可视命令的重复
最好使用操作符命令而不是可视命令
Vim技巧之四大模式_可视模式
在前面的两篇文章《Vim技巧之四大模式_插入模式》和《 Vim技巧之四大模式_普通模式》我们已经介绍了插入模式和
普通模式里面的技巧,下面我们将继续介绍四大模式之一的
可视模式
什么是可视模式?
可视模式简单来说就是选中一块编辑区域,然后在上面执行一些操作,比如删除,替换,改变大小写等。如何选中一块区域?
在Vim里面有三种激活可视模式,并选择一块区域的方法,他们分别是:
模式类型 | 激活方式 | 选择效果 |
---|---|---|
字符文本 | v(小写) | 逐个字符选择文本 |
行文本 | V(大写) | 逐行选择文本 |
块文本 | <C-v> | 按照块的方式选择文本 |
字符文本,
行文本,
块文本指的是什么意思啊?其实就是一种控制选择粒度的方案,
字符文本的选择粒度是一个字符,
行文本的选择粒度是一行文本,如果你想只选中一行里面的几个连续字符,那么使用
行文本就不太适合了,因为
行文本的选择粒度是以行为最小单位的,每次最少都要选中一行内容,如果你想选中多行文本,那么使用
字符文本明显是不合适的,因为太低效了。而
块文本就是功能最强大的选择模式了,它可以完全无视行的存在,可以在文本中按照需要的区域自由选择。
举个栗子:注意左下角的不同选择模式的提示
字符文本的选择,移动到
H,点击
v开始选择,我们选中
Hello World这几个字符
行文本的选择,点击
V开始,我们选中头两行文本
块文本的选择,点击
<C-v>开始,我们选中一块文本
如何快速选中目标区域
我们在普通模式博客中已经介绍了许多快速移动光标的命令,比如
h,
j,
k,
l,可以在四个方向移动光标,也可以用
f{char}来跳转到某个字符上面,之后再用
;,来重复跳转,或者用查找命令
/target来进行光标的快速移动,再用
n/N进行重复,还有许多这样的移动光标的命令,幸运的是,在可视模式下面,这些快速移动光标的命令我们都可以用
举个栗子:
比如在下面的栗子里面,我们要从
25行字符
c开始,一直选中直到行尾
首先点击
v切换到字符模式,键入
fc,接着可以直接按
$,这时光标会跳到行尾,字符
c到行尾之间的内容就被选中了
如果我们要选择
Hello World这个字符串呢?
我们可以直接
fH,然后
vi"就可以选中双引号
"里面的内容了
这样的用法还有很多,读者可以自我领会
大家有没有发现在使用可视模式的时候,一旦切换到可视模式以后,选中的区域是由两个端点来界定的(一个在左上角,一个在右下角),我们在默认情况下只可以控制右下角的端点,但是有些时候发现我们需要调整左上角的端点,这时我们可以使用
o按键来在左上角和右下角之间进行切换。
举个栗子:
假如我们在块选择模式下面已经选中了下面的区域
现在我们需要将选择区域向左再扩充一点,可以点击
o按键,再用移动光标的命令进行移动
如何重复选择目标区域
我们可以使用gv命令来重新选中之前可视模式选中的目标区域,但是如果之前的选中的区域文本被删除,那么
gv命令就会表现的有点神经了
举个栗子:
假如我们选中字符串
"Hello World",然后再将
"Hello World"删除,如果我们再次调用
gv命令,那么选中的区域不再是之前的
"Hello World",而是相同字符宽度的内容
删除
"Hello World",
gv选中的区域
不仅如此,就算这行文本的列数有所偏移,比如将文本多缩进了几行,再次
gv发现也是不对的
所以,博主个人估计
Vim底层的实现可能是记住目标区域的
起始行和行数和
起始列和列数,键入
gv以后就根据之前保存行列信息进行还原
于是博主再次做实验,将上下两行进行调换,再次
gv
发现和预期的一样。
如何在选中中切换选择模式
可视模式有一个好处就是我们可以在三种选择模式之间进行随意的切换,比如在行文本模式下面希望进行更加细粒度的选择,我们可以直接按
v切换到
字符模式,同理可以得到在某一选择模式中切换到任意其他两种模式的方法。博主不再这里赘述
如何对选中的区域进行操作?
我们选中一块区域,最直接的目的就是对这块区域进行操作,比如删除,调换大小写,改变文本等等。那么要如何对选中的区域进行操作呢?在文章的上一节中我们提到可以在可视模式中使用
普通模式的跳转命令,没错,在
可视模式中也可以使用
普通模式模式下的修改命令。
命令 | 命令效果 |
---|---|
d | 删除选中文本 |
c | 修改选中文本 |
r | 替换选中文本 |
I | 在选中文本前插入 |
A | 在选中文本后插入 |
gu | 选中区域转为小写 |
gU | 选中区域转为大写 |
g~ | 大小写互调 |
> | 向右缩进一个单位 |
< | 向左缩进一个单位 |
下面我们来举几个栗子:
栗子一:
假设现在我们有下面一个C++文件
main函数的头三行代码忘了加
;号了,现在我们要用可视模式为这三行代码加上分号
首先
<C-v>开启块选择模式,然后点击
jj$号选择到行末尾,选中区域如下所示
再用
A在选中的区域后面添加文本
;,虽然在编辑的过程中只有一行文本看上去添加了分号,如下图
但是只用按下
<Esc>,剩下的其余选中行也会自动添加分号,这里与其他编辑器稍有不同,新手应注意
栗子二:
下面是一个打开四个文件标识符的栗子
如果我们已经将四个文件
file1,
file2,
file3,
file4移动到了新的目录
/tmp/fileDir里面,于是我们要将
testDir目录改为
fileDir目录
<C-v>进入
块选择模式,并选中
testDir区域,如下图
点击
c对选中区域进行替换,并输入
fileDir
跟之前的栗子一样,只有一行文本发生改变,点击
<Esc>使改变作用于全部选中区域
可视命令的重复
说到重复,首先想到的肯定是.命令啦,可是这个重复命令可不一般,首先来看几个栗子:
字符文本模式栗子:
首先在
字符文本模式下选中
27行的
open单词,并用
g~命令来将
open转为大写
注意这里我们选中的是四个字符,之后我们将光标向右移动几位,移动到单词
fileDir的开头,我们点击
.重复上一个可视命令
得到下面的结果:
我们惊奇的发现
OPEN并没有转为预期的转为小写,而是
fileDir的前四个字符变成了大写
行文本模式栗子:
用
V将
27行选中,并用
g~进行大小写转换
现在跳转到
31行,单击
.重复命令
发现
31行的全部文本全都进行大小写互换
块文本模式栗子:
点击
<C-v>进入
块文本选择模式,随便选中一块区域,如下图
g~进行大小写互换
现在我们将光标下移一行,并将光标移到图示位置
此时点击
.,发现有下面的效果
我们发现从光标开始的右下角的一个矩形范围被调换了大小写,该矩形范围的大小与上次可视模式选中的区域大小一样
于是博主总结了一下,不同的选择模式有不同的重复效果
选择模式 | 重复效果 |
---|---|
字符文本选择模式(Visual) | 从当前光标开始,作用范围是上次操作的字符数 |
行文本选择模式(Visual line) | 从当前行开始,作用范围是上次操作的行数 |
块文本选择模式(Visual Block) | 从当前光标开始,作用范围是以当前光标为左上端点的上次操作的块范围 |
最好使用操作符命令而不是可视命令
为什么这么讲呢?比如在字符文本选择模式里面,如果我们要进行重复,那么重复的范围是通过上一次操作的字符数决定的,其中与
上一次操作相同的字符数就是一个很大的限制条件,必须这次操作的字符数与上次操作的字符数相同我们才可以放心的使用重复操作。
举个栗子:
我们要将
27-29的
printf打印的内容全都转为大写
在
27行,我们采用
vi"选中引号内的东西,
U将选中的内容转化为大写
如果我们下移一行,用
.重复上次操作,得到
发现只作用了前两个字符,后面的
llo还是小写
不能重复上次的操作,难道还需要手动再来一遍?其实并不需要,我们只用使用
普通模式下面的操作符命令就可以啦
上面的栗子我们可以用操作符命令更好的实现需求
使用
gUi",将
"内的内容转化为大写,然后
j.就可以重复上一行的操作啦
相关文章推荐
- 如何清除word复制过来的文字背景色的好方法?
- LeeCode-Single Number II
- random walk DEMO
- javascript常用正则表达式和解析
- 十五天精通WCF——第五天 你需要了解的三个小技巧
- 酷我秀场 去掉水印的方法
- LeeCode-Majority Element
- L - Subway - POJ 2502
- hdoj 1564 Play a game
- Vim技巧之四大模式_插入模式
- 理解inode
- sourcetree的使用
- codeforces #262 DIV2 C称号Present(二分法+贪婪)
- LeeCode-Invert Binary Tree
- oracle connect by用法
- iOS开发 偷懒小技巧---自定义XCode代码片段
- 折价买分级基金的教程
- Struts2 国际化
- 开始刷leetcode day72: Kth Smallest Element in a BST
- Objective-C设计模式——抽象工厂模式Abstract Factory(对象创建)