我经常处理CSS文件或其他需要繁琐数字的文件。我希望能够拥有一个引用整数的键,就像w
引用一个单词,或(
引用一个单词一样。例如,在css文件中,我可以导航到高度声明的开头,并更改它的值,而不必在结尾处重新输入“px”,如果我使用w
会发生这种情况。
有没有这样的东西,但我在文档中遗漏了它,或者有没有办法将这个功能添加到我的.vimrc中?
如果有一种方法可以像ci"
一样使用它,我可以在行的开头使用“更改内部”命令跳转到AND并更改下一个整数。
如果我可以做简单的算术,可以获得更多奖励积分。我希望能够发出一个简短的命令,这个命令是“Add too,internal,integer,5”的缩写,并且当前行的下一个整数比我开始时的五个更大。
修改:
一些非常好的建议每个人,一些伟大的想法肯定会改善我的工作。谢谢! Hassek的回答可能最有可能在我的工作流程中结束,但其他人似乎都没有(完全)回答我的初始问题:一个对整数有效的动作。 romainl追踪的提案似乎有目标,但我无法让它可靠地工作。
对于我自己(或其他人),我将在下面澄清我的要求:
一个在w
对单词起作用的键,但对整数起作用的键,这样我就可以简单地将它添加到我的mental vim词汇表中并无缝地使用它。这包括以下方案。 (我将使用d
作为我的示例键):
d
:跳转到下一个整数cd
:更改为光标下整数的结尾(请注意cw
是一个特殊情况,应该更改为NEXT字。cw
实际上就像{ {1}}。)我希望这个特殊情况也可以用整数来实现ce
:选择[count]整数。id
:选择[count]整数。包含前导或尾随空格。我是否遗漏了ad
对新动议可能出现的任何行为?在普通模式和视觉模式中是否都有可用的键?
答案 0 :(得分:8)
您可以使用以下命令添加或减去整数:
<num>Ctrl-a (to add)
<num>Ctrl-x (to substract)
然后它会直接进入下一个数字并执行命令
答案 1 :(得分:4)
见this proposal。它看起来不错。
修改强> 的
确实这个很不错。这让我觉得我做/<number><Esc>
的习惯不是很有效,所以我已经添加了这些映射(并略微修改了上面的映射以保持一致性)到我的~/.vimrc
。让我们看看它们从长远来看是否有用:
nnoremap è /\v\d+<CR>
nnoremap é ?\v\d+<CR>
乍一看,èciè132<Esc>
在按键方面似乎略微优于/2<Esc>{count}s132<Esc>
,但如果它允许我跳过a,则会更好。检查我想要改变的值的第一个数字和b。计算要替换的字符。
时间会证明。
的重新修改 的
以下是函数及其映射:
onoremap N :<c-u>call <SID>NumberTextObject(0)<cr>
xnoremap N :<c-u>call <SID>NumberTextObject(0)<cr>
onoremap aN :<c-u>call <SID>NumberTextObject(1)<cr>
xnoremap aN :<c-u>call <SID>NumberTextObject(1)<cr>
onoremap iN :<c-u>call <SID>NumberTextObject(1)<cr>
xnoremap iN :<c-u>call <SID>NumberTextObject(1)<cr>
function! s:NumberTextObject(whole)
normal! v
while getline('.')[col('.')] =~# '\v[0-9]'
normal! l
endwhile
if a:whole
normal! o
while col('.') > 1 && getline('.')[col('.') - 2] =~# '\v[0-9]'
normal! h
endwhile
endif
endfunction
有了这个,我可以:
vcdy
从游标到结尾<command>N
的部分数字。与<command>e
或<command>w
类似。
Here are some random numbers: 24 7635 1000018
^--->
如果光标不在数字上并且不会向后移动,则它不起作用。
vcdy
<command>iN
的整数。
Here are some random numbers: 24 7635 1000018
<-^--->
同样,如果光标不在数字上,它就不起作用。
整个事情可以改进,当然,但这是一个开始!
的 EndEdit中强> 的
我也使用CSS工作了很多。
我使用两种策略来改变数值:
{count}<C-a>
和{count}<C-x>
,就像在Hassek的回答中一样,当我知道我想要增加/减少数量时。假设我想将20px
转换为25px
,一个简单的5<C-a>
就可以完成这项工作,而无需将光标移动到数字上。这非常酷。
/<number><CR>{count}s<new number>
当新值与当前值非常不同时,我觉得懒得计算delta。 /2<CR>2s67<Esc>
允许我将23px
更改为67px
。 /2<CR>R67<Esc>
是另一种方式,但只有新值与当前值的长度相同才有效。如果您在同一条线上,请使用f<number>
。
请注意,您可以使用<C-r>=137-42<CR>
插入表达式的结果,我也经常使用它。
答案 2 :(得分:3)
我在internetz here的深处找到了一些东西并像这样修改了它
nnoremap ,n /\v\d+/b<cr>mah/\v\d+/e<cr>mb`av`b
vnoremap ,n <esc>/\v\d+/b<cr>mah/\v\d+/e<cr>mb`av`b
\v\d+
搜索一组数字/b
+ mah
转到其b
eginning,设置标记并返回一个字符,以便我们再次\v\d+
搜索同一组数字/e
+ mb
结束并设置另一个标记,最后`av`b
从第一个标记到第二个标记视觉选择