Conversión de camelcase a_en emacs
elisp camelcasing (4)
¿Hay una función de emacs para convertir una palabra en camello en subrayado? Algo como:
longVariableName
Mx
to-underscore
long_variable_name
Lo uso al convertir código C # a PHP.
(defun un-camelcase-word-at-point ()
"un-camelcase the word at point, replacing uppercase chars with
the lowercase version preceded by an underscore.
The first char, if capitalized (eg, PascalCase) is just
downcased, no preceding underscore.
"
(interactive)
(save-excursion
(let ((bounds (bounds-of-thing-at-point ''word)))
(replace-regexp "//([A-Z]//)" "_//1" nil
(1+ (car bounds)) (cdr bounds))
(downcase-region (car bounds) (cdr bounds)))))
Y luego en mi php-mode fn:
(local-set-key "/M-/C-C" ''un-camelcase-word-at-point)
(progn (replace-regexp "//([A-Z]//)" "_//1" nil (region-beginning) (region-end))
(downcase-region (region-beginning) (region-end)))
Uso lo siguiente para alternar entre camelcase y guiones bajos:
(defun toggle-camelcase-underscores ()
"Toggle between camelcase and underscore notation for the symbol at point."
(interactive)
(save-excursion
(let* ((bounds (bounds-of-thing-at-point ''symbol))
(start (car bounds))
(end (cdr bounds))
(currently-using-underscores-p (progn (goto-char start)
(re-search-forward "_" end t))))
(if currently-using-underscores-p
(progn
(upcase-initials-region start end)
(replace-string "_" "" nil start end)
(downcase-region start (1+ start)))
(replace-regexp "//([A-Z]//)" "_//1" nil (1+ start) end)
(downcase-region start (cdr (bounds-of-thing-at-point ''symbol)))))))
Use el paquete de inflexión de cadenas, disponible en MELPA, o en https://github.com/akicho8/string-inflection .
Accesos directos de teclado útiles, copiados de https://www.emacswiki.org/emacs/CamelCase :
;; Cycle between snake case, camel case, etc.
(require ''string-inflection)
(global-set-key (kbd "C-c i") ''string-inflection-cycle)
(global-set-key (kbd "C-c C") ''string-inflection-camelcase) ;; Force to CamelCase
(global-set-key (kbd "C-c L") ''string-inflection-lower-camelcase) ;; Force to lowerCamelCase
(global-set-key (kbd "C-c J") ''string-inflection-java-style-cycle) ;; Cycle through Java styles