emacs里的cua-mode
的列填充只支持整数序列,在一些需要小数的场景没法用。下面写了一个自定义的函数,放在~/.emacs
里,实现了小数递增递减的功能。
简单来讲,
先获取选中的矩形块的行列坐标
从minibuffer读取start、incr、小数点保留几位等参数
移动光标到矩形块的每一行开始处,用insert
插入提前计算好的小数值
循环操作
下面是全部代码:
;; incr col
(defun incr-col ()
"incr col"
(interactive)
(progn
(setq rb (region-beginning))
(setq re (region-end))
(setq x1 (line-number-at-pos (region-beginning)))
(setq x2 (line-number-at-pos (region-end)))
(setq y2 (current-column))
(goto-char (region-beginning))
(setq y1 (current-column))
;;(message "x1 %s y1 %s x2 %s y2 %s" x1 y1 x2 y2)
(cua-cancel)
(setq start (string-to-number
(read-string (format-prompt "Start value" 0) nil nil "0")))
(setq inc (string-to-number
(read-string (format-prompt "Increment" 1) nil nil "1")))
(setq pcs (read-string (format-prompt "Precision" 3) nil nil "3"))
(setq fmt (concat "%." pcs "f"))
(goto-char rb)
(insert (format fmt start))
(setq N (- x2 x1))
(dotimes (i N)
(progn
(forward-line 1)
(move-to-column y1)
(setq v (+ start (* inc (1+ i))))
(insert (format fmt v))
) ;;progn
) ;;dotimes
)
)