¿Hay alguna forma de convertir nombres en camello para usar guiones bajos en emacs?

8

Por ejemplo, quiero convertir "CamelCasedName" a "camel_cased_name". ¿Hay alguna manera de hacer esto en emacs?

Jason Baker
fuente
44
La respuesta corta a cualquier pregunta de la forma "¿Hay alguna forma de _____ en emacs?" Siempre es "SÍ"
Brian Postow

Respuestas:

4

Este pequeño fragmento de código de esta página , con una función de contenedor y un guión bajo que reemplaza el guión por un guión bajo, podría convertirse fácilmente en un comando para hacerlo. (Compruebe que trata las tapas principales a su medida):

Ejemplo de código de EmacsLisp para quitar una CamelCase de una cadena (de 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)))
JRobert
fuente
3

Moritz Bunkus escribió una función elisp para alternar entre CamelCase y c_style

Natan Yellin
fuente
el paquete string-inflectiones más completa ahora: github.com/akicho8/string-inflection (nota que hay también string-inflection-camelize-loweral cambio hello_worlda helloWorld).
Ehvince
2

Solo para fines de visualización, puede usar esto:

M-x glasses-mode

Si quieres un script que realmente convierta el texto, imagino que tendrías que escribir algo de elisp. Esa pregunta se hace mejor en el desbordamiento de pila.

Trey Jackson
fuente
2

Pude hacer esto en todo un archivo rápidamente con solo una consulta reemplazar regexp .

El patrón de búsqueda es \([a-z]+\)\([A-Z]\)\([a-z]+\)y el reemplazo es \1_\,(downcase \2)\3.

El patrón de reemplazo usa elisp directamente en el patrón. Esto requiere Emacs 22 o posterior.

En el estilo de documentación de emacs:

M-C-% \([a-z]+\)\([A-Z]\)\([a-z]+\) RET \1_\,(downcase \2)\3
derekv
fuente