在文本模式下在Emacs中设置4个空格缩进
我已经在使用主模式text-mode
缓冲区按下TAB的时候,使Emacs从8个空格标签切换到4个空格标签,这是不成功的。 我已经将以下内容添加到我的.emacs
:
(setq-default indent-tabs-mode nil) (setq-default tab-width 4) ;;; And I have tried (setq indent-tabs-mode nil) (setq tab-width 4)
无论如何更改我的.emacs
文件(或我的缓冲区的本地variables) TABbutton始终做同样的事情。
- 如果上面没有文字,缩进8个空格
- 如果上一行有文本,则缩进第二个单词的开头
就像我爱Emacs一样,这让人讨厌。 有没有办法让Emacs在上一行没有文本的时候至less缩进4个空格?
(customize-variable (quote tab-stop-list))
或在.emacs文件中将制表符停止列表项添加到自定义设置variables中:
(custom-set-variables ;; custom-set-variables was added by Custom. ;; If you edit it by hand, you could mess it up, so be careful. ;; Your init file should contain only one such instance. ;; If there is more than one, they won't work right. '(tab-stop-list (quote (4 8 12 16 20 24 28 32 36 40 44 48 52 56 60 64 68 72 76 80 84 88 92 96 100 104 108 112 116 120))))
简短的回答:
关键是告诉emacs插入任何你想要的,这是通过改变indent-line-function来完成的。 将其更改为插入一个选项卡,然后将选项卡更改为4个空格而不是将其更改为插入4个空格更容易。 以下configuration将解决您的问题:
(setq-default indent-tabs-mode nil) (setq-default tab-width 4) (setq indent-line-function 'insert-tab)
说明:
从主模式控制的缩进@ emacs手册 :
每个主要模式的一个重要function是定制要正确缩进正在编辑的语言的键。
[…]
indent-line-functionvariables是由(和各种命令,如调用缩进区域时)使用的缩进当前行的函数。 indent-by-to-mode命令只不过是调用这个函数。
[…]
默认值是许多模式的缩进相对。
来自indent-relative @ emacs手册:
在前一个非空行中的下一个缩进点之前的缩进相关空间。
[…]
如果前面的非空行没有超过列点的缩进点开始,则改为“tab-to-tab-stop”。
只需将indent-line-function的值更改为insert-tab函数,并将tab插入configuration为4个空格即可。
当number-sequence
function正坐在那里等待使用时,它总是会让我轻微看到像(setq tab-stop-list 4 8 12 ................)
这样的东西。
(setq tab-stop-list (number-sequence 4 200 4))
要么
(defun my-generate-tab-stops (&optional width max) "Return a sequence suitable for `tab-stop-list'." (let* ((max-column (or max 200)) (tab-width (or width tab-width)) (count (/ max-column tab-width))) (number-sequence tab-width (* tab-width count) tab-width))) (setq tab-width 4) (setq tab-stop-list (my-generate-tab-stops))
您可能会发现如下设置您的选项卡更容易:
Mx customize-group
在“ Customize group:
提示inputindent
。
您将看到一个屏幕,您可以在其中设置所有缩进选项,并将其设置为当前会话或保存为以后的所有会话。
如果你这样做,你会想要build立一个自定义文件 。
(setq tab-width 4) (setq tab-stop-list '(4 8 12 16 20 24 28 32 36 40 44 48 52 56 60 64 68 72 76 80)) (setq indent-tabs-mode nil)
(defun my-custom-settings-fn () (setq indent-tabs-mode t) (setq tab-stop-list (number-sequence 2 200 2)) (setq tab-width 2) (setq indent-line-function 'insert-tab)) (add-hook 'text-mode-hook 'my-custom-settings-fn)
这个问题不是由于缺less制表位造成的; 这是emacs有一个(新?)选项卡方法称为缩进相对似乎devise为排列表格数据。 TAB键被映射到indent-for-tab-command方法,该方法调用variablesindent-line-function设置的任何方法,这是用于文本模式的缩进相关方法。 我没有想出一个很好的方式来重写indent-line-functionvariables(文本模式钩子不工作,所以也许它是在模式挂钩运行后重置?),但一个简单的方法来摆脱这一点行为就是通过将TAB设置为更简单的tab-to-tab-stop方法来查找tab-command-intent-command方法:
(define-key text-mode-map(kbd“TAB”)'制表符到制表符停止)
尝试这个:
(add-hook 'text-mode-hook (function (lambda () (setq tab-width 4) (define-key text-mode-map "\Ci" 'self-insert-command) )))
这将使TAB总是插入每4个字符(但仅限于文本模式)的制表符Tab停止的文字制表符。 如果这不是你所要求的,请描述你想看到的行为。
您可以将这些代码行添加到.emacs文件中。 它为文本模式添加一个钩子来使用insert-tab而不是indent-relative。
(custom-set-variables '(indent-line-function 'insert-tab) '(indent-tabs-mode t) '(tab-width 4)) (add-hook 'text-mode-hook (lambda() (setq indent-line-function 'insert-tab)))
我希望它有帮助。
只要改变风格对于我来说就足够了。
(setq-default indent-tabs-mode nil) (setq-default tab-width 4) (setq indent-line-function 'insert-tab) (setq c-default-style "linux") (setq c-basic-offset 4) (c-set-offset 'comment-intro 0)
这也适用于C ++代码和里面的注释
将此添加到您的.emacs文件中:
这将设置一个标签显示的宽度为2个字符(将数字2更改为任何你想要的)
(setq default-tab-width 2)
要确保emacs实际上使用制表符而不是空格:
(global-set-key (kbd "TAB") 'self-insert-command)
顺便说一句,退格时,emacs的默认值是将其转换为空格,然后删除空格。 这可能是烦人的。 如果你想只是删除标签,你可以这样做:
(setq c-backspace-function 'backward-delete-char)
请享用!
最好的答案不工作,直到我写在.emacs文件中:
(global-set-key (kbd "TAB") 'self-insert-command)
这是唯一的解决scheme,保持从我的插入标签,没有一个序列或标签转换为空格。 这两个看起来都不错,但浪费了:
(setq-default indent-tabs-mode nil tab-width 4 tab-stop-list (quote (4 8)) )
请注意, quote
需要两个数字来工作(但不是更多!)。
另外,在大多数主要模式(例如Python
)中,缩进在Emacs中是自动的。 如果您需要在自动缩进外部缩进,请使用:
M – 我
定制可以影响(setq tab width 4)
所以要么使用setq-default
要么让Customize知道你在做什么。 我也有类似于OP的问题,并单独用它来修复它,不需要调整tab-stop-list
或任何insert
函数:
(custom-set-variables '(tab-width 4 't) )
发现它是有用的后添加(从emacsWiki提示):
(defvaralias 'c-basic-offset 'tab-width) (defvaralias 'cperl-indent-level 'tab-width)
你有没有尝试过
(setq tab-width 4)
(setq-default tab-width 4) (setq-default indent-tabs-mode nil)
顺便说一下,对于C模式 ,我将(setq-default c-basic-offset 4)
到.emacs。 有关详细信息,请参阅http://www.emacswiki.org/emacs/IndentingC 。
从我的init文件,不同,因为我想空间而不是制表符:
(加钩'sql-mode-hook (lambda() (progn这个 (setq-default tab-width 4) (setq indent-tabs-mode nil) (setq indent-line-function'tab-to-tab-stop) (modify-syntax-entry?_“w”); 现在“_”不被视为单词分隔符 (modify-syntax-entry? - “w”); 现在“ - ”不被视为单词分隔符 )))