Подтвердить что ты не робот

Изменение частей слов CamelCase в vim

Используя vim, я нахожу cw очень удобным для изменения целого слова. Разделение Vim команд движения и глаголов действия делает для очень мощных комбинаций. Мне просто пришлось изменить DefaultHandler на ContentHandler. Я, естественно, думал об этом как о "переходе к следующей заглавной букве", но я не мог найти команду движения, которая переместилась от одной заглавной буквы к следующей.

В этом случае я мог бы использовать ctH, но есть ли способ изменить (или удалить и т.д.) первую часть слова CamelCase независимо от того, какая буква верхнего регистра будет следующей?

4b9b3361

Ответ 1

Vim не предоставляет текстовый объект Word CamelCase по умолчанию, поэтому нам придется создайте его сами. Хорошим новым является то, что нам не нужно изобретать велосипед поскольку плагин уже существует, и мы можем использовать его в качестве базы: camelCaseMotion

Этот script определяет движения ,w, ,b и ,e (похожие на w, b, e), которые не перемещаются по словам (вперед/назад), но Camel-накрест; то есть к границам слов и прописным буквам. Проблема в том, что она не определите текстовый объект, похожий на iw, чтобы выбрать целое слово. Поэтому позвольте создать это:

Чтобы быть полным, текстовому объекту нужны два определения: один для визуального режима и другой для режима ожидания оператора. Вот наши определения (добавить к .vimrc):

vmap ,i <Esc>l,bv,e
omap ,i :normal v,i<CR>

Как вы можете видеть, мы используем движения ,b и ,e, определенные плагином.

Первое определение позволяет ввести ,i, когда мы находимся в визуальном режиме, и это будет выберите текущее "внутреннее слово camelCase". (Движение l является обходным путем, чтобы всегда находить слово, в котором находится курсор. В противном случае мы получаем предыдущий, когда курсор находится на первой букве слова)

Второе определение использует первый один, чтобы операторы типа d или c работали с ,i

После того, как мы установили плагин и добавили определения в наш .vimrc мы можем делать то, что вы хотели. Например, если я возьму этот пример:

DefaultHandlerWord

Если мой курсор находится на букве n Handler, я могу использовать:

  • ,e, чтобы перейти к последней букве Handler
  • ,b, чтобы перейти к первой букве Handler
  • ,w, чтобы перейти к первой букве Word
  • d,i удалить Handler и получить только DefaultWord
  • c,i удалить Hanlder и получить возможность заменить его другим словом