Esiste un modo per convertire i nomi in maiuscolo per utilizzare i caratteri di sottolineatura in emacs?


8

Ad esempio, voglio convertire "CamelCasedName" in "camel_cased_name". C'è un modo per farlo in emacs?


4
La breve risposta a qualsiasi domanda del modulo "Esiste un modo per _____ in emacs?" è sempre "SÌ"
Brian Postow,

Risposte:


4

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)))



2

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.


2

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
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.