vim:选择内部点

时间:2011-09-03 08:33:27

标签: vim

我无法找到解决方案(此处和网络上),只需选择/插入/删除由圆点包围的内容(开发中常见的情况):

    someobject.some-property-with-hyphens.otherproperty

如何选择中间属性?

我试过了:

    vi.  (dot is for executing last command)
    viw  (don't include hyphens)
    4viw (still nop)
    vis  (select full line)


编辑:更常见的例子(在javascript中)

    app.object['key'].$object_with_a_dollar_sign.function()

5 个答案:

答案 0 :(得分:18)

我怀疑这里的真正的问题是连字符不被视为标识符的一部分

您应该尝试添加

:se iskeyword+=-

表示您的文件类型。这样, v i w 将完全符合您的要求

要为strange个文件自动设置此设置:

:autocmd BufReadPost *.strange se isk+=-

将该行添加到vimrc(:e $MYVIMRC),您将永远不必考虑添加iskeyword设置。另请参阅:he modeline了解为每个文件设置此设置的其他方法


更新更纯粹的解决方案是创建您自己的 operator-mapping

快速草案,对我来说似乎非常好用:

xnoremap <silent>.  f.oT.o
xnoremap <silent>a. f.oF.o
xnoremap <silent>i. t.oT.o

onoremap <silent>.  :<C-u>exec 'normal v' . v:count1 . '.'<CR>
onoremap <silent>a. :<C-u>exec 'normal v' . v:count1 . 'a.'<CR>
onoremap <silent>i. :<C-u>exec 'normal v' . v:count1 . 'i.'<CR>

以下缓冲区内容的示例(字母w 上的光标):

someobject.some-property-with-hyphens.SUB.otherproperty
  • v 在视觉模式中选择some-property-with-hyphens.
  • v a 在视觉模式中选择.some-property-with-hyphens.
  • v i 在视觉模式中选择some-property-with-hyphens

动作可以链接并接受count

  • v 在视觉模式中选择some-property-with-hyphens.SUB.
  • v 2。 在视觉模式中选择some-property-with-hyphens.SUB.
  • v 2 a 在视觉模式中选择.some-property-with-hyphens.SUB.
  • v 2 i 在视觉模式中选择some-property-with-hyphens.SUB

您可以将运算符用作任何编辑命令的运算符:

  • d 产生someobject.SUB.otherproperty
  • c i 短名称会产生someobject.shortname.SUB.otherproperty
  • c 2 get(“结果为someobject.get("otherproperty

与光标一起开始并不重要。请注意,为方便起见,所有可视模式映射都将光标定位在选择的末尾(因此您可以通过例如%和其他动作继续扩展选择。)

答案 1 :(得分:1)

我不是很确定(我每天都学习新的vim功能),但我认为你无法在带有文本对象的点之间进行选择。因此,如果这是您的常见情况,您可以创建如下的映射:

nnoremap <leader>d t.vT.

每次需要在点之间进行选择时,只是为了避免输入五个字符。

答案 2 :(得分:1)

也许这不是你想要的,但我使用标准搜索功能并输入

/\..*\.
并选择.some-property-with-hyphens。上例中的值。

答案 3 :(得分:0)

你可能想试试这个,虽然这不是一个正确的答案:

将光标放在s(点后)上并键入:(这意味着直到点为止。)

vf. 

我相信你不能使用vi的原因。是点不是vim可以找到它的另一对像(或'“。

答案 4 :(得分:0)

我不知道任何通用解决方案。对于select / delete / insert,我使用常规表达式。

:%s/\.some-property-with-hyphens\./.i-like-this-property./g

只需选择

/\.some-property-with-hypehns\.

更通用的规则

/\.[\-a-zA-Z0-9]*\.

希望这就是你所要求的。