Изменение частей слов CamelCase в vim - PullRequest
14 голосов
/ 28 декабря 2010

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

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

1 Ответ

3 голосов
/ 21 сентября 2015

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

Этот скрипт определяет движения ,w, ,b и ,e (аналогично w, b, e), которые перемещаются не по словам (вперед / назад), а по верблюду. мудрый; то есть к границам слов и заглавным буквам. Проблема в том, что это не определите текстовый объект, подобный 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 и получить возможность заменить его другим словом
...