макрос vim для преобразования CamelCase в lowercase_with_underscores

12

Есть ли макрос vim для преобразования CamelCase в lowercase_with_underscores и наоборот?

Нил Г
источник

Ответы:

19

Тим Папа abolish.vimможет конвертировать между camelCase, MixedCase, snake_caseи UPPER_CASE, а также конвертировать ( в одну сторону) в dash-case.

Поместите курсор на любой из fooBar, FooBar, foo_barили FOO_BARи использования

  • crc преобразовать в fooBar
  • crm преобразовать в FooBar
  • cr_или
    crsпреобразовать вfoo_bar
  • cru преобразовать в FOO_BAR
  • cr- преобразовать в foo-bar
Крис Джонсен
источник
идеальное решение
Нил Г
Тим Папа потрясающий. Так много отличных плагинов.
Хендрик
6

Да, есть , и в качестве бонуса есть и тот, кто идет в противоположном направлении!

Цитата из вики на случай, если она уйдет:

" Change selected text from NameLikeThis to name_like_this.
vnoremap ,u :s/\<\@!\([A-Z]\)/\_\l\1/g<CR>gul

и для противоположного направления:

" Change selected text from name_like_this to NameLikeThis.
vnoremap ,c :s/_\([a-z]\)/\u\1/g<CR>gUl
Даниэль ДиПаоло
источник
Спасибо! Он почти идеален, за исключением моего vim, он не меняет первую букву имени CamelCase. Я не уверен почему.
Нил Г
Очень хорошо. Я обнаружил, что мне нужно внести изменения в направлении змеи к верблюду:vnoremap tos :s/\C\(\U\&\S\)\([A-Z]\)/\1_\l\2/g<CR>
Иона
1

lh-dev также предоставляет команды для преобразования между стилями именования:

:NameConvert snake

преобразует слово под курсором в snake_case.

:%ConvertNames/\<m_\k\+(/getter/gc

будет преобразовывать каждое вхождение шаблона в имя получателя, предполагая, что пользователь подтверждает преобразование ( :h :s_flags)

Поддерживаемые стили бывают двух видов:

Люк Эрмитт
источник
1

Я создал команду, как это:

command! Ctl
    \ exec "norm \"xygn" |
    \ let @y = substitute(@x, "\\([^A-Z]\\)\\([A-Z]\\)", "\\1_\\2", "g") |
    \ let @y = tolower(@y) |
    \ exec "norm cgn\<C-r>y" |
    \ let @@ = ":Ctl\n"

Сначала вы должны найти строку, которую хотите заменить, /nameToReplaceа затем запустить :Ctl, и следующее совпадение поиска станет name_to_replace. Команда помещает себя в @@регистр, поэтому вы можете повторить действие, нажав @@.

Джейк
источник