如何使用Vim的正常模式CTRL-可视块模式下的数字增量?

时间:2014-05-05 20:50:45

标签: vim

我有一张桌子:

0 | 3
1 | 4
2 | 5

在普通模式下,我可以查看0,点击CTRL-A,它就会变为1.

我想要一些类似于视觉块模式的东西(其中CTRL-A不会增加选择),在第二列上使用它并获得:

0 | 4
1 | 5
2 | 6

没有宏/插件/定义函数可以吗?

到目前为止,最好的简单解决方法是定义一个宏,计算列,并重复正确的次数,但我一直在想:为什么视觉块没有CTRL-A

我最初的例子是:

a | 3
b | 4
c | 5

对于数字是表格的第一个数字行的特定情况,@ hawk和@romainl给出的答案效果很好::norm! ^A,扩展为:'<,'>norm! ^A。有没有办法照顾一般情况?

3 个答案:

答案 0 :(得分:6)

我怀疑这里有人能够准确地告诉你为什么对于视觉阻止模式没有<C-a>

我们所能做的最好的事情就是帮助您找到实现目标的有效方法。

DrChip的VisIncr或Tim Pope的speeddating插件专门用于解决“缺失的功能”。

如果您的需求相对简单,就像在您的示例中一样,简单的:norm <C-v><C-a>就足够了。也许有一个映射...

xnoremap <C-a> :normal! ^A

(使用^A获取<C-v><C-a>。)

(编辑)

存在一种更通用的方法,但它不是非常适合手指:

:'<,'>s/\%V\d\+/\=submatch(0) + 1/g

当然,你可以映射它,让它更聪明一点:

xnoremap <C-a> :<C-u>let vcount = v:count ? v:count : 1 <bar> '<,'>s/\%V\d\+/\=submatch(0) + vcount <cr>gv

并给它一个朋友:

xnoremap <C-x> :<C-u>let vcount = v:count ? v:count : 1 <bar> '<,'>s/\%V\d\+/\=submatch(0) - vcount <cr>gv

使用这些映射,您可以<C-a><C-a><C-a><C-x><C-x><C-x>同时保留视觉区块或8<C-a> / 12<C-x>

(EndEdit中)

答案 1 :(得分:5)

这已在版本8中添加。退房:help new-items-8

编辑:更改了上面的帮助命令。

结果:help new-items-8

Visual mode commands:
v_CTRL-A        CTRL-A          add N to number in highlighted text
v_CTRL-X        CTRL-X          subtract N from number in highlighted text
v_g_CTRL-A      g CTRL-A        add N to number in highlighted text
v_g_CTRL-X      g CTRL-X        subtract N from number in highlighted text

答案 2 :(得分:2)

您可以在直观选择的块上运行普通命令。例如:normal! ^A然后按Enter键