44

在 vim 等中,您可以使用CTRLAand来增加或减少光标所在的数字CTRLX。但是,这会增加整数,但我想直接增加光标下的数字。这有点难以描述,所以这就是我的意思:

Ctrl+A usage, cursor is over the "6":
[6]5 -> 66

What I need:
[6]5 -> 75

or:
3[8]90 -> 3990

我希望这是有道理的。

我用谷歌搜索了一下,但我不确定是否存在这样的快捷方式,因此非常感谢任何提示!

4

9 回答 9

46

<C-a><C-x>处理整数(一位或多位数字),但不能处理数字的“部分”。然而,它需要一个“计数”,所以10<C-a>变成.[6]575

另一种选择是,因为您只想更改一位数字,所以要r7变成.[6]575

于 2012-05-10T12:59:11.433 回答
39

在这种情况下,我通常输入r然后输入我想要的数字。

于 2012-05-10T12:57:58.530 回答
8

我猜 3[9]42 应该变成 4042(否则,Xavier 的解决方案几乎是完美的(*)),我会使用以下内容:

s/\d*\%#\d/\=(submatch(0)+1)

可以映射成:

nnoremap <silent> µ :<c-u>s/\d*\%#\d/\=(submatch(0)+v:count1)<cr>``

为了接受计数。我看到的唯一问题是它不能支持重复(如:h .

(*) 从某种意义上说,重复该命令不会帮助我们将一系列不同的数字增加相同的数量。

于 2012-05-10T17:02:52.393 回答
6

可能有更好的方法,但你可以制作一个宏或映射到这个的东西:

noremap <LEADER>a a <ESC>h<C-a>lxh
noremap <LEADER>z a <ESC>h<C-z>lxh

它基本上使“65”“6 5”,增加 6 并删除空间。可能还有一个更短的版本也可以。

于 2012-05-10T12:54:07.097 回答
4

在全局命令中用于Ctrlv插入文字Ctrla,这意味着在正常模式下将每个数字增加\d\+10

:g/\d\+/norm! 10 Ctrl-v Ctrl-a

我们还可以避免键入“Ctrl-v Ctrl-a”,只需使用带双引号的“exec”,如下行所示。如果您尝试使用单引号,则此解决方案不起作用。

:g/\d\+/exec "norm! 10\<C-a>"

在正常模式下,您可以简单地执行以下操作:

10 Ctrl-a
于 2012-05-11T14:05:06.533 回答
1

你可以这样做(使用任何 intead F9):

:nnoremap <F9> :exec 's@^\(.\{' . (col(".")-1) . '\}\)\(.\)\(.*\)@\1' . (getline(".")[col(".")-1]+1) . '\3@'<CR>

基本上它只是在行中找到光标位置,在其上构建一个正则表达式字符串并使用该位置上的字符加 1。

于 2012-05-10T13:10:52.847 回答
1

你可以这样v11<C-A>x(digit + 11) modulo 10 如果你经常这样做,那么你可以将它映射到你想要的任何东西(<leader>a?)。

注意:如果数字不是 9 则v<C-A>有效。我从vimgolf得到这个提示,我推荐这个网站:D

于 2019-02-14T20:14:49.820 回答
0

如果你不介意弄乱"寄存器,下面是另一个序列:

s<C-R>=<C-R>"+1<CR>
于 2012-05-10T13:56:25.117 回答
0

v <C-A/X>效果很好,因为<C-A/X>适用于光标所在的单词(即数字)或视觉选择(即数字)。

于 2018-09-27T08:13:44.637 回答