macro vim pour convertir CamelCase en minuscule_avec_scores

12

Existe-t-il une macro vim pour convertir CamelCase en minuscules_avec_scores et vice versa?

Neil G
la source

Réponses:

19

Tim Pope abolish.vimpeut le convertir entre camelCase, MixedCase, snake_caseet UPPER_CASE, ainsi que la conversion (sens unique ) à dash-case.

Placez le curseur sur l' un fooBar, FooBar, foo_barou FOO_BARet de l' utilisation

  • crc convertir en fooBar
  • crm convertir en FooBar
  • cr_ou
    crspour convertir enfoo_bar
  • cru convertir en FOO_BAR
  • cr- convertir en foo-bar
Chris Johnsen
la source
solution parfaite
Neil G
Tim Pope est génial. Tant de super plugins.
Hendrik
6

Oui , et en bonus, il y en a un pour aller dans la direction opposée aussi!

Citation du wiki en cas de disparition:

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

et pour la direction opposée:

" Change selected text from name_like_this to NameLikeThis.
vnoremap ,c :s/_\([a-z]\)/\u\1/g<CR>gUl
Daniel DiPaolo
la source
Merci! C'est presque parfait, sauf sur mon vim, ça ne change pas la première lettre du nom CamelCase. Je ne sais pas pourquoi.
Neil G
Très agréable. J'ai trouvé que j'avais besoin de faire ce changement pour la direction du serpent au chameau:vnoremap tos :s/\C\(\U\&\S\)\([A-Z]\)/\1_\l\2/g<CR>
Jonah
1

lh-dev fournit également des commandes pour convertir entre les styles de dénomination:

:NameConvert snake

convertira le mot sous le curseur en snake_case.

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

convertira chaque occurrence du modèle en un nom de getter, en supposant que l'utilisateur confirme la transformation ( :h :s_flags)

Les styles pris en charge sont de deux types:

Luc Hermitte
la source
1

J'ai créé une commande comme celle-ci:

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"

Vous devez d'abord rechercher une chaîne que vous souhaitez remplacer /nameToReplace, puis vous exécutez :Ctl, et la prochaine correspondance de recherche deviendra name_to_replace. La commande se place dans le @@registre pour que vous puissiez répéter l'action en appuyant sur @@.

Jake
la source