¿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?


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



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.


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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.