如何在光标下直接增加* *?

时间:2012-05-10 12:35:26

标签: vim keyboard-shortcuts

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

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

What I need:
[6]5 -> 75

or:
3[8]90 -> 3990

我希望这是有道理的。

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

9 个答案:

答案 0 :(得分:38)

<C-a><C-x>处理整数(1位或更多位数)但不处理数字的“部分”。但是,它需要“计数”,因此10<C-a>[6]5变为75

另一种选择,因为您只想更改一位数字,就是r7[6]5转换为75

答案 1 :(得分:36)

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

答案 2 :(得分:8)

我猜3 [9] 42将变为4042(否则,Xavier's solution几乎完美(*)),我会使用以下内容:

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

可以映射到:

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

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

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

答案 3 :(得分:5)

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

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

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

答案 4 :(得分:3)

在全局命令中使用 Ctrl v 插入文字 Ctrl a 表示在正常模式下增加每个数字\d\+到10

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

在普通模式下,您只需执行以下操作:

10 Ctrl-a

答案 5 :(得分:1)

你可以这样做(使用 F9 的任何内容):

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

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

答案 6 :(得分:1)

您可以v11<C-A>x这样做(digit + 11) modulo 10 如果您经常这样做,则可以将其映射到所需的任何内容(<leader>a吗?)。

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

答案 7 :(得分:0)

如果您不介意弄乱"寄存器,这是另一个执行此操作的序列:

s<C-R>=<C-R>"+1<CR>

答案 8 :(得分:0)

fputs("In populateMonsters\n", stderr);的效果很好,因为v <C-A/X>可以在光标所在的单词(即数字)或可视选择内容(即数字)上工作。