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

Jor*_*dge 6 vim

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

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

奖励积分如果有一种方法可以使用它,就像ci"我可以在线的开头,并使用"更改内部"命令跳转到AND更改下一个整数.

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

编辑:

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

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

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

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

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

Has*_*sek 8

您可以使用以下命令添加或减去整数:

<num>Ctrl-a (to add)
<num>Ctrl-x (to substract)
Run Code Online (Sandbox Code Playgroud)

它将直接进入下一个数字并执行命令


rom*_*inl 4

请参阅此建议。看上去不错。

\n\n

编辑

\n\n

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

\n\n
nnoremap \xc3\xa8  /\\v\\d+<CR>\nnnoremap \xc3\xa9  ?\\v\\d+<CR>\n
Run Code Online (Sandbox Code Playgroud)\n\n

乍一看,\xc3\xa8ci\xc3\xa8132<Esc>似乎比/2<Esc>{count}s132<Esc>按键方面稍微好一些,但如果它允许我跳过a,那就更好了。检查我要更改的值的第一位数字,然后 b.计算要替换的字符。

\n\n

时间会证明一切。

\n\n

重新编辑

\n\n

以下是该函数及其映射:

\n\n
onoremap N  :<c-u>call <SID>NumberTextObject(0)<cr>\nxnoremap N  :<c-u>call <SID>NumberTextObject(0)<cr>\nonoremap aN :<c-u>call <SID>NumberTextObject(1)<cr>\nxnoremap aN :<c-u>call <SID>NumberTextObject(1)<cr>\nonoremap iN :<c-u>call <SID>NumberTextObject(1)<cr>\nxnoremap iN :<c-u>call <SID>NumberTextObject(1)<cr>\n\nfunction! s:NumberTextObject(whole)\n    normal! v\n\n    while getline(\'.\')[col(\'.\')] =~# \'\\v[0-9]\'\n        normal! l\n    endwhile\n\n    if a:whole\n        normal! o\n\n        while col(\'.\') > 1 && getline(\'.\')[col(\'.\') - 2] =~# \'\\v[0-9]\'\n            normal! h\n        endwhile\n    endif\nendfunction\n
Run Code Online (Sandbox Code Playgroud)\n\n

有了这个,我可以:

\n\n
    \n
  • vcdy从光标到以 结尾的数字的一部分<command>N。某种程度上类似于<command>eor <command>w

    \n\n
    Here are some random numbers: 24 7635 1000018\n                                        ^--->\n
    Run Code Online (Sandbox Code Playgroud)\n\n

    如果光标尚未位于数字上并且不向后移动,则该功能不起作用。

  • \n
  • vcdy一个整数与<command>iN.

    \n\n
    Here are some random numbers: 24 7635 1000018\n                                      <-^--->\n
    Run Code Online (Sandbox Code Playgroud)\n\n

    同样,如果光标尚未位于该号码上,则该功能不起作用。

  • \n
\n\n

当然,整个事情还可以改进,但这只是一个开始!

\n\n

结束编辑

\n\n

我也经常使用 CSS。

\n\n

我使用两种策略来更改数值:

\n\n
    \n
  • {count}<C-a>并且{count}<C-x>,正如哈塞克的回答一样,当我知道我想要增加/减少数字多少时。假设我想变成20px25px一个简单的5<C-a>方法就可以做到这一点,而不需要我将光标移动到数字上。这非常酷

  • \n
  • /<number><CR>{count}s<new number>当新值与当前值有很大不同并且我懒得计算增量时。/2<CR>2s67<Esc>会让我23px变成67px/2<CR>R67<Esc>是另一种方法,但只有当新值与当前值的长度相同时才有效。f<number>如果您在同一条线上,请使用。

  • \n
\n\n

<C-r>=137-42<CR>请注意,您也可以插入我经常使用的表达式的结果。

\n