Gibt es eine Möglichkeit, Namen mit Kamelhülle in Unterstriche in Emacs umzuwandeln?

8

Zum Beispiel möchte ich "CamelCasedName" in "camel_cased_name" konvertieren. Gibt es eine Möglichkeit, dies in Emacs zu tun?

Jason Baker
quelle
4
Die kurze Antwort auf jede Frage der Form "Gibt es eine Möglichkeit, _____ in Emacs?" ist immer "JA"
Brian Postow

Antworten:

4

Dieses kleine Stück Code von dieser Seite mit einer Wrapper-Funktion und einem Unterstrich, der den Bindestrich durch einen Unterstrich ersetzt, könnte leicht in einen Befehl umgewandelt werden, um dies zu tun. (Überprüfen Sie, ob die führenden Kappen zu Ihnen passen):

Beispiel für einen EmacsLisp-Code zum Entfernen von CamelCase für eine Zeichenfolge (von 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
quelle
4

Emacs hat brillen Modus die Displays Namen mit Unterstrichen Camelcase dazwischen. (Siehe auch http://www.emacswiki.org/emacs/GlassesMode ).

Wenn Sie den Text der Datei tatsächlich ändern möchten, M-x query-replace-regexpist dies wahrscheinlich geeignet.

Allen
quelle
2

Sie können dies nur zu Anzeigezwecken verwenden:

M-x glasses-mode

Wenn Sie ein Skript möchten, das den Text tatsächlich konvertiert, müssen Sie wahrscheinlich etwas Elisp schreiben. Diese Frage wird beim Stapelüberlauf besser gestellt.

Trey Jackson
quelle
2

Ich war in der Lage, dies über eine ganze Datei schnell mit nur einer Abfrage zu tun, um regulären Ausdruck zu ersetzen .

Das Suchmuster ist \([a-z]+\)\([A-Z]\)\([a-z]+\)und der Ersatz ist \1_\,(downcase \2)\3.

Das Ersatzmuster verwendet elisp direkt im Muster. Dies erfordert Emacs 22 oder höher.

Im Emacs-Dokumentationsstil:

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