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

Cir*_*四事件 4 vim

我有一张桌子:

0 | 3
1 | 4
2 | 5
Run Code Online (Sandbox Code Playgroud)

在正常模式下,我可以过去0,点击CTRL-A它变成1.

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

0 | 4
1 | 5
2 | 6
Run Code Online (Sandbox Code Playgroud)

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

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

我最初的例子是:

a | 3
b | 4
c | 5
Run Code Online (Sandbox Code Playgroud)

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

rom*_*inl 7

我怀疑这里的任何人都能告诉你为什么没有<C-a>视觉块模式.

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

像插件VisIncr通过DrChip或快速约会由蒂姆·波普是专为解决"缺少".

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

xnoremap <C-a> :normal! ^A
Run Code Online (Sandbox Code Playgroud)

(^A获得<C-v><C-a>.)

(编辑)

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

:'<,'>s/\%V\d\+/\=submatch(0) + 1/g
Run Code Online (Sandbox Code Playgroud)

当然,你可以映射它,并使它更聪明一些:

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

给它一个朋友:

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

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

(EndEdit中)


Ank*_*ain 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
Run Code Online (Sandbox Code Playgroud)