Emacs Lisp函数可以在4&之间切换变量'tab-width'。 8

时间:2009-02-09 23:00:13

标签: emacs

我工作的源代码树的文件缩进了不同的选项卡值(更不用说空格)了,我能做的最好的事情就是设置emacs来使用在我修改的代码区域中找到的样式。而不是将M-x set-variable tab-width设置为4或8,用于在这两个值之间切换tab-width的键绑定将有很大帮助。

感谢。

4 个答案:

答案 0 :(得分:12)

;; Obviously substitute your preferred key for <f8>
(global-set-key (kbd "<f8>") 'tf-toggle-tab-width-setting) ; ' "fix" highlighting

(defun tf-toggle-tab-width-setting ()
    "Toggle setting tab widths between 4 and 8"
    (interactive)
    (setq tab-width (if (= tab-width 8) 4 8))
    (redraw-display))

根据建议的评论

编辑添加重绘显示

答案 1 :(得分:5)

没有完全回答这个问题(给出的答案已经足够好了),但您可能需要考虑设置每个文件的本地变量。例如,假设“//”表示使用您的语言发表评论,您可以将以下内容放在文件的第一行行中:

// -*- tab-width: 4 -*-

每当您访问该文件时,emacs都会为您设置变量。有关基于文件的变量的详细信息,请参阅http://www.gnu.org/software/emacs/manual/html_node/emacs/Specifying-File-Variables.html

当然,如果文件是在一个小组之间共享的话,这可能不是一个选择 - 除非你能说服你的大学这个第一行评论完全无害且非常有用!

答案 2 :(得分:1)

感谢所有答案。我添加了一个重绘显示调用,以便立即反映更改。 (尝试将此作为评论发布,但不能。)

(global-set-key (kbd "<f8>") 'tf-toggle-tab-width-setting)
(defun tf-toggle-tab-width-setting ()    "toggle setting tab widths between 4 and 8"
    (interactive)
    (setq tab-width (if (= tab-width 8) 4 8))
    (message "set tab-width to %d." tab-width)
    (redraw-display)
)

沿着同样的路线。 :(

(global-set-key (kbd "<f7>") 'tf-toggle-indent-mode-setting)
(defun tf-toggle-indent-mode-setting ()
    "toggle indenting modes"
    (interactive)
    (setq indent-tabs-mode (if (eq indent-tabs-mode t) nil t))
    (message "Indenting using %s." (if (eq indent-tabs-mode t) "tabs" "spaces"))
)

答案 3 :(得分:0)

将此内容放入.emacs.emacs.d/init.el文件中:

(defun toggle-spaces ()
  "Toggle tab-width between 4 and 8"
  (interactive)
  (if (eq tab-width 4)
      (setq tab-width 8)
    (setq tab-width 4)))

;; This will set Ctrl-g to toggle but you can set it to anything
;; you want.
(global-set-key "\C-g" 'toggle-spaces)