スネークケースって打ちづらいですよね?
アンダースコアを余分に打たないといけないし、アンダースコアが遠くて打ちづらいし。
そこで、
アッパーキャメルケースの末尾で関数を実行すると、大文字のスネークケースに変換、
ローワーキャメルケースの末尾で関数を実行すると、小文字のスネークケースに変換
する関数を作りました。
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))))))))