如何在Vim中"改变数字"或"改变数字"

bry*_*edy 1 vim numbers editor

我经常在Vim中编辑CSS,需要更改一个值,如:

width: 300px;
Run Code Online (Sandbox Code Playgroud)

对于其他类似的东西:

width: 178px;
Run Code Online (Sandbox Code Playgroud)

通常我所做的是导航到300中的3并键入cw以更改单词.但如果我这样做,我必须px再次输入该位.有没有简短快捷的说法change in digits.

在我的搜索中,我发现Ctrl-a和Ctrl-x在这种情况下增加和减少数字.是否可以重新输入数字?

我应该澄清,理想的解决方案是在操作时需要最少的击键,并支持对不同长度数字的修改.就像我想将300px改为17px一样.

Lit*_*his 5

我不知道"数字变化"命令,但你可以使用t,这就像f你在寻找之前去找角色; 也就是说,如果你键入tp,它会将光标移动到你行中"p"之前的字符.它结合c,如果你的光标是在3,ctp178 Esc将与178取代300.

或者,您可以3s用来替换接下来的三个字符:3s178 Esc.当被替换的字符串易于扫描长度时,这很容易.如果替换文本的长度与替换文本的长度相同,则可以使用R替换:R178 Esc.


rom*_*inl 5

这是in一个自定义文本对象,允许您对数值(包括浮点数)进行操作:

" custom text-object for numerical values
function! Numbers()
    call search('\d\([^0-9\.]\|$\)', 'cW')
    normal v
    call search('\(^\|[^0-9\.]\d\)', 'becW')
endfunction
xnoremap in :<C-u>call Numbers()<CR>
onoremap in :normal vin<CR>
Run Code Online (Sandbox Code Playgroud)

实际搜索是在一个函数中执行的,以避免破坏搜索寄存器和搜索突出显示.

您可以将该文本对象添加到vimrc"原样"并像其他文本对象一样使用它:

vin
cin
yin
din
Run Code Online (Sandbox Code Playgroud)

演示

---编辑---

这个新版本:

  • 不要乱用搜索突出显示(好),
  • 不要乱用搜索寄存器(好),
  • 尊重BOL和EOL(好),
  • 适用于花车(好).

欢迎评论.

---编辑---