Par exemple, je veux convertir "CamelCasedName" en "camel_cased_name". Existe-t-il un moyen de le faire dans emacs?
Par exemple, je veux convertir "CamelCasedName" en "camel_cased_name". Existe-t-il un moyen de le faire dans emacs?
Réponses:
Ce petit morceau de code de cette page , avec une fonction wrapper et un trait de soulignement remplaçant le tiret par un trait de soulignement, pourrait facilement être transformé en une commande pour ce faire. (Vérifiez qu'il traite les majuscules pour vous convenir):
Exemple de code EmacsLisp pour décompresser une chaîne (à partir 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)))
Emacs a un mode lunettes qui affiche les noms des chameaux avec des soulignements entre les deux. (Voir aussi http://www.emacswiki.org/emacs/GlassesMode ).
Si vous souhaitez réellement modifier le texte du fichier M-x query-replace-regexp
est probablement approprié.
Moritz Bunkus a écrit une fonction elisp pour basculer entre CamelCase et c_style
string-inflection
est plus complet maintenant: github.com/akicho8/string-inflection (note qu'il ya aussi string-inflection-camelize-lower
des changements hello_world
à helloWorld
).
À des fins d'affichage uniquement, vous pouvez utiliser ceci:
M-x glasses-mode
Si vous voulez un script qui convertit réellement le texte, j'imagine que vous devrez écrire un peu d'élisp. Cette question est mieux posée en cas de débordement de pile.
J'ai pu le faire rapidement sur un fichier entier avec juste une requête remplacer regexp .
Le modèle de recherche est \([a-z]+\)\([A-Z]\)\([a-z]+\)
et le remplacement est \1_\,(downcase \2)\3
.
Le modèle de remplacement utilise elisp directement dans le modèle. Cela nécessite Emacs 22 ou une version ultérieure.
Dans le style de documentation emacs:
M-C-% \([a-z]+\)\([A-Z]\)\([a-z]+\) RET \1_\,(downcase \2)\3