emacs里列编辑时填充小数递增序列
专栏:ExASIC Feb. 8, 2025, 6:25 p.m. 62 阅读
cua-mode不支持列填充小数序列怎么办?自己写个函数

emacs里的cua-mode的列填充只支持整数序列,在一些需要小数的场景没法用。下面写了一个自定义的函数,放在~/.emacs里,实现了小数递增递减的功能。

简单来讲,

  1. 先获取选中的矩形块的行列坐标

  2. 从minibuffer读取start、incr、小数点保留几位等参数

  3. 移动光标到矩形块的每一行开始处,用insert插入提前计算好的小数值

  4. 循环操作

下面是全部代码:

;; 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
    )
  )

 

感谢阅读,更多文章点击这里:【专栏:ExASIC】
最新20篇 开设专栏