如何使用Vim';s正常模式CTRL-视觉块模式中的数字增量?

如何使用Vim';s正常模式CTRL-视觉块模式中的数字增量?,vim,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 对于数字是表中第一个数字行的特定情况,@h

我有一张桌子:

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^一个
,它扩展为:“您可以在可视选择的块上运行普通命令。e、 g.
:正常^A
然后按回车键

我怀疑这里的任何人都不能确切地告诉您为什么视觉块模式没有

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

DrChip或Tim Pope等插件是专门为解决这一“缺失功能”而设计的

如果您的需求相对简单,比如在您的示例中,一个简单的
:norm
就足够了。也许用地图

xnoremap <C-a> :normal! ^A
当然,您可以绘制地图,并使其更智能:

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

xnoremap:let vcount=v:count?v:count:1'这是在版本8中添加的。签出:帮助新项目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
编辑:更改了上面的帮助命令

结果:帮助新项目-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

只有当数字是列的第一个数字行时,此修复才有效,但我希望得到更一般的解决方案,因此我更新了问题以反映这一点。有关更一般的解决方案,请参阅我的编辑。数字可以位于光标处,也可以位于光标右侧(在同一行上)。这些是Vim的默认设置。您尝试过我建议的解决方案吗?@Romaill谢谢,这很有效,并教会了我有关Vim正则表达式=)请参阅我的编辑以获得更好的解决方案。您可以使用
v:count1
而不是
v:count?v:count:1
在不使用计数的情况下得到1。据我所知,vim 7.4中的可视模式下的ctrl-a是。@Contrlebis,是的。您可以添加提交/发布说明的链接以完成回答吗?我已经测试过了,它确实有效。编辑了我的答案
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