块选择(Visual Block)
Vim的大部分命令都是以行为单位的,有时候想要删除、粘贴或复制特定区域,那么如何搞定一块范围呢?
一般模式下,块选择的按键意义 |
|
v |
字符选择,将光标经过的字符选择 |
V |
行选择,将光标经过的行选择 |
[Ctrl]+v |
矩形选择,可以用矩形的方式选择数据 |
y |
将选中地方复制起来 |
d |
将选中地方删除 |
小写v的效果,以第一行的s为光标起点,往下走:
这个效果很像windows用鼠标操作的效果。
大写V的效果,以第一行的s为光标起点,往下走:
以行为单位,只要经过的行都被选择。
[Ctrl]+v的效果,以第一行的s为光标起点,往下走:
矩形选择,起点为左上角,落点为右下角。按下y后,将光标移动到第一行末尾分号处后,p粘贴,效果如下图
As you see,挺实用的, Vim的大部分命令都是以行为单位的,有时候想要删除、粘贴或复制特定区域
范例:给一大段代码加上//,注释掉
比如现在想把161行到170行的两个函数定义注释掉。
这里我们结合vim的.命令和块选择,(vim的.命令会记住上一次的操作)
当前光标处在161行,I//<ESC>后将定位到该行头部,并且插入//注释,后退出插入模式。然后按下大写V,然后按下170G,将选中161到170行,接下来要对这些选中的行执行.命令(即I//<ESC>),使用命令:normal对整个范围同时执行.命令。
:’<,’>normal.命令可以解读为对高亮区中的每一行,对其执行普通模式下的.命令。
最后光标处在170行。
(当然也可以直接:161,170 normal I//,normal可以执行任意的普通模式的命令,I会自动切换到插入模式,但是修改完成之后,vim会自动返回普通模式)