vim: выберите внутри точек - PullRequest
       0

vim: выберите внутри точек

11 голосов
/ 03 сентября 2011

Я не могу найти решение (здесь и в Интернете) для простого выбора / вставки / удаления материала, окруженного точками (общий случай в разработке):

    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 ]

18 голосов
/ 03 сентября 2011

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

Вы должны попробовать добавить

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

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

1 голос
/ 03 сентября 2011

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

nnoremap <leader>d t.vT.

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

1 голос
/ 03 сентября 2011

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

/\..*\.
, и он выбрал .some-property-with-дефис. значение в вашем примере выше.
0 голосов
/ 03 сентября 2011

Я не знаю каких-либо общих решений.Для выбора / удаления / вставки я использую регулярные эксперименты.

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

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

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

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

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

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

0 голосов
/ 03 сентября 2011

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

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

vf. 

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...