Ad esempio, voglio convertire "CamelCasedName" in "camel_cased_name". C'è un modo per farlo in emacs?
Ad esempio, voglio convertire "CamelCasedName" in "camel_cased_name". C'è un modo per farlo in emacs?
Risposte:
Questo piccolo frammento di codice di questa pagina , con una funzione wrapper e un carattere di sottolineatura che sostituisce il trattino con un carattere di sottolineatura, potrebbe essere facilmente trasformato in un comando per farlo. (Verifica che tratti i tappi principali in base alle tue esigenze):
Codice di EmacsLisp di esempio per annullare il camelCase di una stringa (da http://www.friendsnippets.com/snippet/101/ ):
(defun un-camelcase-string (s &optional sep start)
"Convert CamelCase string S to lower case with word separator SEP.
Default for SEP is a hyphen \"-\".
If third argument START is non-nil, convert words after that
index in STRING."
(let ((case-fold-search nil))
(while (string-match "[A-Z]" s (or start 1))
(setq s (replace-match (concat (or sep "-")
(downcase (match-string 0 s)))
t nil s)))
(downcase s)))
Emacs ha la modalità occhiali che mostra i nomi delle camelcase con caratteri di sottolineatura in mezzo. (Vedi anche http://www.emacswiki.org/emacs/GlassesMode ).
Se si desidera effettivamente modificare il testo del file M-x query-replace-regexp
è probabilmente adatto.
Moritz Bunkus ha scritto una funzione elisp per alternare tra CamelCase e c_style
string-inflection
è ora più completo: github.com/akicho8/string-inflection (nota che c'è anche string-inflection-camelize-lower
da cambiare hello_world
in helloWorld
).
Solo a scopo di visualizzazione, è possibile utilizzare questo:
M-x glasses-mode
Se vuoi uno script che converta effettivamente il testo, immagino che dovresti scrivere un po 'di elis. È meglio porre questa domanda in caso di overflow dello stack.
Sono stato in grado di farlo rapidamente su un intero file rapidamente con solo una query di sostituzione regexp .
Il modello di ricerca è \([a-z]+\)\([A-Z]\)\([a-z]+\)
e la sostituzione è \1_\,(downcase \2)\3
.
Il pattern di sostituzione utilizza elisp proprio nel pattern. Ciò richiede Emacs 22 o successivo.
Nello stile di documentazione di emacs:
M-C-% \([a-z]+\)\([A-Z]\)\([a-z]+\) RET \1_\,(downcase \2)\3