UNIT25 VIM Visual mode Block operations

vim列块操作就是在可是模式下操作选择的行中的某一些列的操作,比如常见的我们需要在很多行都需要做一些重复的工作,比如在行头和行尾加相应的标签,或者需要删除行中间某一些特殊的列,那么块操作就是很好的帮手了。

#vim^vI#ESC

#vimset nu^v(100G:当前行到第100)I#ESC

.进入和退出可视模式 visual-start

1.三种可视模式(:help blockwise-visual关于列块操作的信息)

*v* *characterwise-visual*——v 进入普通可视模式,以字符为单位选择。

*V* *linewise-visual*——V 进入行可视模式,以行为单位选择。

*CTRL-V* *blockwise-visual*——CTRL-V (在 Windows中为CTRL-q)进入列块可视模式。

2.当键入 "v"."CTRL-V" "V" 时的模式转换:*

原有模式

"v"

"CTRL-V"

"V"

普通

可视

列块可视

行可视

可视

普通

列块可视

行可视

列块可视

可视

普通

行可视

行可视

可视

列块可视

普通

3.使用可视模式 visual-use包含三个部骤

a. "v"."V" CTRL-V 标记文本的开始

当前光标下的字符将被作为标记的起始点。

b.把光标移到要标记的文本末尾

起始点和光标间的文本 (含当前光标下的字符) 将被高亮显示。

c.键入操作符命令

操作符命令将被应用到高亮显示的字符。

.改变可视区域 visual-change

*v_O*  O 跳到高亮文本的另一端。同 "o" 命令相似,但是在列块模式下,光标移动到水平方向的另一个角。如果这个角上的字符占据了多个屏幕位置 (例如一个<Tab>),那么高亮的文本区域会被改变。

*v_$*  如果 "$" 命令和列块模式同时使用,那么高亮文本区域的右边界将取决于高亮区域中最长的行。如果遇到一个不是直上直下的移动命令,那么这个规则将终止。

.操作可视区域 visual-operators

1.对可视区域可以使用的操作符包括:

d 删除所选中的部分。

D 没有把一行都选中,也把一行删除。

~  切换大小写                    |v_~|

!  通过外部命令过滤              |v_!|

Y yank抽出               |v_Y|

p put放置                 |v_p|

=  通过 'equalprg' 选项的命令过滤 |v_=|

gq 按 'textwidth' 指定的宽度排版行|v_gq|

> 右移1Tab               |v_>|

< 左移1Tab               |v_<|

x  delete    X  delete

J 连接                          |v_J|

r 替换                   |v_r|

R替换                    |v_R|

s 修改                          |v_s|

S 修改                          |v_S|

U 变成大写 u 变成小写

~ 大小反转

^] 查找标签                   |v_CTRL-]|

: 为高亮的行启动 ex 命令      |v_:|

I(大写)+字符串+ESC   block insert会在每一行所选中内容的开始前添加”字符串”

A(大写)+字符串+ESC   block append会在选中的块后面添加文本。

在选中块紧接每行末尾添加内容,则需用$来指定选择到行尾,而不是简单地用光标。

c+字符串+ESC  删除并进入输入模式。只需要在选中的第一行输入一个字符串,当按下esc后所有行的选中部分都会和第一行一样。

C(大写) +字符串+ESC 会直接删除到行尾,其它与c一样。

2.可用的标记方法包括(h.j.k.l进行块选择合作):

o  移动光标至标记区域的另一边

O  移动光标至标记区域的另一端点

按:进入ex,并给出选择的范围'<,'>

正则中选择中区域用\%V表示

aw 一个单词 (包括空格)   |v_aw|

aW 一个字串 (包括空格)   |v_aW|

ab 一个 () 块 (包括小括号) |v_ab|

ib 内含 () 块              |v_ib|

iw 内含单词              |v_iw|

iW 内含字串              |v_iW|

aB 一个{} 块 (包括大括号)  |v_aB|

iB 内含{} 块               |v_iB|

as a sentencewith white space

is inner sentence句子    |v_is|

a< 一个 <> 块 (包括<>)     |v_a<|

i< 内含 <> 块              |v_i<|

ap    a paragraph        |v_ap|

ip    inner paragraph    |v_ip|

a[ 一个 [] 块 (包括 [])    |v_a[|

i[ 内含 [] 块              |v_i[|

.列块操作 blockwise-operators

列块插入*v_b_I*

对一个列块可视模式下的选择区,I{string}<ESC> 命令将会从选择区开始的位置在每一行插入字符串{string}。

列块添加*v_b_A*

对一个列块可视模式下的选择区,A{string}<ESC> 命令将会从选择区结束处开始在每一行插入字符串{string}。当行的长短不同的时候,将导致选择区的右边界不是直线,这时候列块添加操作的行为就会有所不同:

列块是用<C-v>$产生的:这种情况下字符串被附加到每一行的结尾。

列块是用<C-v>{move-around}产生的:这种情况下字符串将被附加到每一行列块结尾。

列块修改 (c) *v_b_c*

选择区的所有文本将被相同的字符串代替。当使用 "c" 命令的时候选择区的文本将被删除,然后进入插入模式。这时候你可以键入不带回车的文本。当你按<Esc> 的时候所键入的文本将被插入选择区的每一行。

列块修改 (C) *v_b_C*

同 "c" 命令,但是选择区将扩展到每一行的结尾。

*v_b_<*或*v_b_>*列块平移

列块按照 'shiftwidth' 指定的单位移动。

列块替换*v_b_r*

高亮区域的每个字符被同一个字符代替。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值