我有一张桌子:
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.有没有办法照顾一般情况?
我怀疑这里的任何人都能告诉你为什么没有<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中)
这已在版本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)