Существует ли макрос vim для преобразования CamelCase в lowercase_with_underscores и наоборот?
4 ответа
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
Да, есть, и в качестве бонуса есть еще один, который идет в противоположном направлении!
Цитата из вики на случай, если она уйдет:
" 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
Я создал команду, как это:
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 . Команда помещается в регистр @@ поэтому вы можете повторить действие, нажав @@ .
lh-dev также предоставляет команды для преобразования между стилями именования:
:NameConvert snake
преобразует слово под курсором в snake_case.
:%ConvertNames/\<m_\k\+(/getter/gc
будет преобразовывать каждое вхождение шаблона в имя получателя, предполагая, что пользователь подтверждает преобразование (:h :s_flags)
Поддерживаемые стили бывают двух видов:
- точные стили (snake_case, UpperCamelCase, lowerCamelCase)
- семантические стили (локальные, глобальные, член, параметр, геттер, сеттер, константа, статика, функция, тип, ...), которые могут быть настроены в соответствии с соглашениями об именах текущего проекта.
