Emacs

カーソル前のキャメルケースをスネークケースに変換

More than 5 years have passed since last update.

スネークケースって打ちづらいですよね?

アンダースコアを余分に打たないといけないし、アンダースコアが遠くて打ちづらいし。

そこで、

アッパーキャメルケースの末尾で関数を実行すると、大文字のスネークケースに変換、

ローワーキャメルケースの末尾で関数を実行すると、小文字のスネークケースに変換

する関数を作りました。

UpperCamelCase

=> UPPER_CAMEL_CASE

lowerCamelCase
=> lower_camel_case

(global-set-key (kbd "M-u") 'camel-to-snake-backward-word)

(defun camel-to-snake-backward-word ()
(interactive)
(let ((case-fold-search nil)
(s (buffer-substring
(point) (save-excursion (forward-word -1) (point)))))
(delete-region (point) (progn (forward-word -1) (point)))
(insert (funcall (if (= (string-to-char s) (downcase (string-to-char s)))
'downcase 'upcase)
(replace-regexp-in-string
"\\([A-Z]\\)" "_\\1"
(store-substring s 0 (downcase (string-to-char s))))))))