将点移动到 Emacs 中的下一个制表位



我正在尝试在Emacs中创建一个主要模式。在此模式下,Tab 键应按如下方式工作:

  • 我定义一个数字,例如 (setq my-tab-stop 10)
  • 当我按 Tab 键时,该点移动到可被 my-tab-stop 整除的下一列,即
  • 如果current-column等于 0,1,2,..,9,则该点应移至第 10 列,
  • 如果current-column等于 10,11,12,..,19,则该点应移动到第 20 列,依此类推。

注意:不应插入空格或制表符(如tab-to-tab-stop),只有点移动,但是,如果点移动超过当前行的长度,则应插入空格以使行更长)

如何做到这一点?

这是代码:

(defvar tabtab-val 10)
(defun tabtab/forward-char (n)
  (let ((space (- (line-end-position) (point))))
    (if (> space tabtab-val)
        (forward-char n)
      (move-end-of-line 1)
      (insert (make-string (- n space) ? )))))
(defun tabtab ()
  (interactive)
  (let ((shift (mod (current-column) tabtab-val)))
    (tabtab/forward-char (- tabtab-val shift))))

只需将密钥绑定到move-to-tab-stop即可。

您可以使用以下命令轻松配置固定间隔 N 列的制表位表:

(setq tab-stop-list (number-sequence N MAX N))

相关内容

最新更新