久々に elisp 書いたよー。
vim だと C-a とかでできるらしいものなんだけど、emacs には無いみたい。
ありそうなんだけどなーと思いつつ、とりあえず書いてみた。
(defun increment-string-as-number (number) "Replace progression string of the position of the cursor by string that added NUMBER. Interactively, NUMBER is the prefix arg. examle: At the cursor string \"12\" M-x increment-string-as-number ;; replaced by \"13\" C-u 10 M-x increment-string-as-number ;; replaced by \"22\" At the cursor string \"-12\" M-x increment-string-as-number ;; replaced by \"-11\" C-u 100 M-x increment-string-as-number ;; replaced by \"89\"" (interactive "P") (if (string=~ "[0-9]" (char-to-string (char-after)) t) (save-excursion (save-restriction (let ((p (if (integerp number) number 1)) begin end augend) (re-search-backward "^\\\|[^0-9]") (if (string=~ "[^-0-9]" (char-to-string (char-after)) t) (forward-char)) (setq begin (point)) (re-search-forward "[0-9]+") (setq end (point)) (narrow-to-region begin end) (setq augend (string-to-number (buffer-string))) (delete-region (point-min) (point-max)) (insert (number-to-string (+ augend p))) (widen) ))) (error "Can't calculation because not number at cursor point")))
おおむね良好な動作だとは思うが、不満としてはインクリメント後に、その数字列の
先頭に移動してしまうこと。narrow -> widen だとカーソル位置覚えてないんだっけ?
一応 save-excursion は入れてるけど・・あんまよくわかりませんね。
まぁ、久々の elisp ってだけで満足してるのでいいです。誰か書き直してください。