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()

Ответ 1

Я подозреваю, что реальная проблема заключается в том, что дефисы не считаются частью идентификатора

Вам следует попробовать добавить

:se iskeyword+=-

для вашего типа файла. Таким образом, v i w будет делать то, что вы хотите

Чтобы сделать этот параметр автоматическим, скажем, strange файлов:

:autocmd BufReadPost *.strange se isk+=-

Добавляя эту строку к вашему vimrc (:e $MYVIMRC), вам никогда не придется думать о добавлении параметра iskeyword. См. Также :he modeline для альтернативных способов установки этого параметра для каждого файла


Обновить, еще более чистое решение создаст ваше собственное отображение оператора.

Быстрый проект этого, который, казалось, работал очень хорошо для меня:

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 . shortname приводит к someobject.shortname.SUB.otherproperty
  • c 2 . get(" приводит к someobject.get("otherproperty

Не имеет значения, где в "разделителе с точками" должен начинаться курсор. Обратите внимание, что для удобства все отображения в визуальном режиме позиционируют курсор в конце выбора (так что вы можете продолжить расширение выделения, например, % и других движений).

Ответ 2

Я не совсем уверен (я каждый день изучаю новые функции vim), но я думаю, что вы не можете выбирать между точками с текстовыми объектами. Итак, если это общий случай для вас, возможно, вы можете создать сопоставление следующим образом:

nnoremap <leader>d t.vT.

Просто, чтобы не набирать пять символов каждый раз, когда вам нужно выбирать между точками.

Ответ 3

Возможно, это не то, что вы ищете, но я использовал стандартную функцию поиска и набрал

/\..*\.
, и он выбрал .some-property-with-hyphens. значение в вашем примере выше.

Ответ 4

Возможно, вы захотите попробовать, хотя это не правильный ответ:

наведите курсор на s (после точки) и введите: (что означает визуальное отображение до точки).

vf. 

Я верю, что вы не можете использовать vi. точка - это не то, что vim мог найти другую пару, подобную (или "".

Ответ 5

Я не знаю никаких общих решений. Для select/delete/insert я использую регулярные выгрузки.

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

Чтобы просто выбрать

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

Более общее правило

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

Надеюсь, это то, о чем вы просите.