微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

有没有办法在vim中获得整数对象运动?

我经常处理CSS文件或其他需要繁琐数字的文件.我希望能够拥有一个引用整数的键,就像w引用一个单词一样,或者(指一个句子.例如,在一个css文件中我可以导航到一个高度声明的开头,并且改变它的价值而不必重新输入“px”结尾,如果我使用w就会发生这种情况.

有这样的事情,但我在文档中遗漏了它,或者有没有办法将这个功能添加到我的.vimrc?

如果有一种方法可以使用它,如ci“我可以在行的开头并使用”更改内部“命令跳转到AND更改下一个整数.

如果我可以做简单的算术,可以获得更多奖励我希望能够发出一个简短的命令,这个命令是“Add too,internal,integer,5”的缩写,并且当前行上的下一个整数是五格,然后就是我开始的时候.

编辑:

一些非常好的建议每个人,一些伟大的想法肯定会改善我的工作.谢谢! Hassek的回答可能最有可能在我的工作流程中结束,但其他人似乎都没有(完全)回答我的初始问题:一个对整数有效的动作.由romainl追踪的提案似乎有这个目标,但我无法让它可靠地运作.

对于我自己(或许其他人),我将在下面澄清我的需求:

一个在w方面起作用的键,但是在整数上,我可以简单地将它添加到我的mental vim词汇表中并无缝地使用它.这包括以下方案. (我将使用d作为我的示例键):

>正常模式d:跳转到下一个整数
>正常模式cd:更改为光标下整数的结尾(注意,cw是一个特殊情况,应该更改为NEXT字.cw实际上就像ce一样.)我希望这个特殊情况可以用整数实现好
>可视模式ID:选择[count]整数.
>可视模式广告:选择[计数]整数.包括前导或尾随空白区域.

我是否遗漏了任何可能出现在新议案中的行为?在普通和视觉模式下是否还有一个键?

this proposal.看起来不错.

编辑

确实这个很不错.这让我觉得我习惯做/< number>< Esc>是不是非常有效,所以我添加了这些映射(并稍微修改了上面的映射以保持一致性)到我的〜/ .vimrc.让我们看看它们从长远来看是否有用:

nnoremap è  /\v\d+<CR>
nnoremap é  ?\v\d+<CR>

乍一看,èciè132< Esc>似乎略微优于/ 2< Esc> {count} s132< Esc>在按键方面,但如果它允许我跳过一个更好.检查我想要改变的值的第一个数字和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
                                        ^--->

如果光标不在数字上并且不向后,则它不起作用.
>使用< command> iN vcdy整数.

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>插入表达式的结果.我经常使用它.

原文地址:https://www.jb51.cc/vim/384036.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐