Yank单词仅按句点分隔

cen*_*ack 7 vim

我在文件中有这样的一行

<echo>The app vendor is... app.server.name</echo>
Run Code Online (Sandbox Code Playgroud)

将光标放在"服务器"中的"r"上,如何在不进入可视模式的情况下拉动"app.server.name",或者不必猜测要抽出的单词数量.

yiw 只会在这些时期之间拉扯这个词.

odr*_*drm 20

Byt<
Run Code Online (Sandbox Code Playgroud)

B (让你到达被打断的词的开头)

yt< (向前猛冲,但不包括"<").


seh*_*ehe 11

1.快速而肮脏:在"单词"匹配中包含点

 :se iskeyword+=46
Run Code Online (Sandbox Code Playgroud)

现在yiw会做你想要的:)

2.正确的解决方案:定义文本对象

正如Benoit所提到的,上述可能是你不想要的副作用1

在早期的答案中(vim:选择内部点)我描述了如何definte文本对象以选择内部点(如下所示).您可以使用它作为基础来定义一个类似的文本对象,选择包含点的单词:

这不需要对iskeyword设置进行任何更改 :)

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>
Run Code Online (Sandbox Code Playgroud)

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

someobject.some-property-with-hyphens.SUB.otherproperty
Run Code Online (Sandbox Code Playgroud)
  • v.some-property-with-hyphens.在视觉模式中选择
  • va..some-property-with-hyphens.在视觉模式中选择
  • vi.some-property-with-hyphens在视觉模式中选择

动作可以链接并接受count:

  • v..some-property-with-hyphens.SUB.在视觉模式中选择
  • v2. 选择some-property-with-hyphens.SUB.在视觉模式
  • v2a..some-property-with-hyphens.SUB.在视觉模式中选择
  • v2i.some-property-with-hyphens.SUB在视觉模式中选择

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

  • d. 结果是 someobject.SUB.otherproperty
  • ci.shortname 结果是 someobject.shortname.SUB.otherproperty
  • c2.get(" 结果是 someobject.get("otherproperty

在光标开始的'点分隔标识符'中的位置无关紧要.请注意,为方便起见,所有可视模式映射都将光标定位在选择的末尾(因此您可以通过例如%其他运动继续扩展选择).


1在这里看到一些背景信息:vim:选择内部点