Existe-t-il un moyen de convertir les noms en chameau pour utiliser des traits de soulignement dans emacs?


8

Par exemple, je veux convertir "CamelCasedName" en "camel_cased_name". Existe-t-il un moyen de le faire dans emacs?


4
La réponse courte à toute question du formulaire "Y a-t-il un moyen de _____ dans emacs?" est toujours "OUI"
Brian Postow

Réponses:


4

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



2

À 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.


2

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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.