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

CamelCase для подчеркивания в vi (m)

Если по какой-то причине я хочу выборочно преобразовать camelCase с именами в подчеркивание, разделенное в vim, как я могу это сделать?

В настоящее время я обнаружил, что могу выполнить поиск /s[a-z][A-Z] и записать макрос, чтобы добавить символ подчеркивания и преобразовать в нижний регистр, но мне любопытно, могу ли я сделать это с чем-то вроде:

%s/([a-z])([A-Z])/\1\u\2/gc

Спасибо заранее!

EDIT: Я выяснил ответ для camelCase (это то, что мне действительно нужно), но может ли кто-нибудь еще ответить, как изменить CamelCase на camel_case?

4b9b3361

Ответ 1

Это немного длиннее, но, похоже, выполняет эту работу:

:%s/\<\u\|\l\u/\=len(submatch(0)) == 1 ? tolower(submatch(0)) : submatch(0)[0].'_'.tolower(submatch(0)[1])/gc

Ответ 2

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

MixedCase

Ввод crc [мнемоника: CoeRce to Camelcase] даст вам:

MixedCase

Ввод crs [мнемоника: CoeRce to Snake_case] даст вам:

mixed_case

И набрав crm [mnemonic: CoeRce to MixedCase], вы вернетесь к:

MixedCase

Если вы также установите repeat.vim, вы можете повторить команды принуждения, нажав клавишу точки.

Ответ 3

Полагаю, я должен был продолжать пробовать еще около 5 минут. Ну... если кому-то интересно:

%s/\(\l\)\(\u\)/\1\_\l\2/gc делает трюк.

Собственно, я понял, что это работает для camelCase, но не CamelCase, который также может быть полезен для кого-то.

Ответ 4

Я взломал плагин, который делает это. https://github.com/chiedojohn/vim-case-convert

Чтобы преобразовать случай, выберите блок текста в визуальном режиме и введите одно из следующих (самостоятельно объяснительное):

:CamelToHyphen :CamelToSnake :HyphenToCamel :HyphenToSnake :SnakeToCamel :SnakeToHyphen

Чтобы преобразовать все происшествия в ваш документ, выполните одну из следующих команд:

:CamelToHyphenAll :CamelToSnakeAll :HyphenToCamelAll :HyphenToSnakeAll :SnakeToCamelAll :SnakeToHyphen

Добавьте сообщение об ошибке (например: CamelToHyphen!) в любую из приведенных выше команд, чтобы обойти подсказки перед каждым преобразованием. Возможно, вы не захотите это сделать, поскольку плагин не будет знать разницу между переменными или другим текстом в вашем файле.

Ответ 5

Для случая CamelCase:

%s#(\<\u\|\l)(\l+)(\u)#\l\1\2_\l\3#gc

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

Ответ 6

У меня есть API для различных ориентированных на развитие обработки. Помимо прочего, он предоставляет несколько функций для преобразования имен между (настраиваемыми) соглашениями (переменная ↔ attribute ↔ getter ↔ setter ↔ constant ↔ parameter ↔ ..) и стилей (верблюд (низкий/высокий) ↔ подчеркивание). Эти функции преобразования были перенесены в плагин.

Плагин + API можно получить здесь: https://github.com/LucHermitte/lh-dev, для этой задачи преобразования имен требуется lh-vim-lib

Его можно использовать следующим образом:

  • наведите курсор на символ, который вы хотите переименовать
  • введите :NameConvert + тип конверсии, который вы хотите (здесь: underscore). NB: эта команда поддерживает автозаполнение.
  • et voilà!