vim-Makro zum Konvertieren von CamelCase in Kleinbuchstaben_mit_undercores

11

Gibt es ein vim-Makro zum Konvertieren von CamelCase in Kleinbuchstaben_mit_underscores und umgekehrt?

Neil G.
quelle

Antworten:

19

Tim Popes abolish.vimumwandeln kann unter camelCase, MixedCase, snake_case, und UPPER_CASEsowie convert (one-way) zu dash-case.

Positionieren Sie den Cursor auf einem beliebigen fooBar, FooBar, foo_bar, oder FOO_BARund Verwendung

  • crc zu konvertieren fooBar
  • crm zu konvertieren FooBar
  • cr_oder
    crszu konvertierenfoo_bar
  • cru zu konvertieren FOO_BAR
  • cr- zu konvertieren foo-bar
Chris Johnsen
quelle
perfekte Lösung
Neil G
Tim Pope ist großartig. So viele tolle Plugins.
Hendrik
6

Ja , und als Bonus gibt es einen, der auch in die entgegengesetzte Richtung geht!

Zitat aus dem Wiki für den Fall, dass es weggeht:

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

und für die entgegengesetzte Richtung:

" Change selected text from name_like_this to NameLikeThis.
vnoremap ,c :s/_\([a-z]\)/\u\1/g<CR>gUl
Daniel DiPaolo
quelle
Vielen Dank! Es ist fast perfekt, außer auf meinem vim ändert es nicht den ersten Buchstaben des CamelCase-Namens. Ich bin mir nicht sicher warum.
Neil G
Sehr schön. Ich habe festgestellt, dass ich diese Änderung vornehmen muss, damit die Schlange in Richtung Kamel geht:vnoremap tos :s/\C\(\U\&\S\)\([A-Z]\)/\1_\l\2/g<CR>
Jonah
1

lh-dev bietet auch Befehle zum Konvertieren zwischen Namensstilen:

:NameConvert snake

konvertiert das Wort unter dem Cursor in snake_case.

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

konvertiert jedes Vorkommen des Musters in einen Getter-Namen, vorausgesetzt, der Benutzer bestätigt die Transformation ( :h :s_flags)

Es gibt zwei Arten von unterstützten Stilen:

Luc Hermitte
quelle
1

Ich habe einen Befehl wie diesen erstellt:

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"

Sie müssen zuerst nach einer Zeichenfolge suchen, die Sie ersetzen möchten, /nameToReplaceund dann ausführen :Ctl, und die nächste Suchübereinstimmung wird name_to_replace. Der Befehl wird in das @@Register eingetragen, sodass Sie die Aktion durch Drücken von wiederholen können @@.

Jake
quelle