如何配置Emacs使其使用指定制表符宽度实现缩进及C-M-\格式化?
Emacs 配置指定制表符宽度解决缩进异常问题
问题描述
我的~/.xemacs文件仅包含一行配置:(setq-default tab-width 4)。但编写代码时Emacs自动缩进异常:换行后光标回到行起始列符合预期,但若打开大括号,下一行缩进仅为2字符而非设置的4个,移光标至该行按TAB也无法修正;此外,使用缩进命令C-M-\格式化代码区域时,同样采用2字符缩进。
解决方案
核心原因
tab-width仅控制单个制表符的显示宽度,代码自动缩进的规则由对应编程语言的**Major Mode(主模式)**单独管控,不同模式有专属的缩进偏移变量,仅设置tab-width无法覆盖这些模式的默认规则。
具体配置
针对特定语言模式设置缩进偏移
不同编程语言模式需要设置对应的变量,示例如下:- C/C++ 模式:
(add-hook 'c-mode-hook (lambda () (setq c-basic-offset 4))) (add-hook 'c++-mode-hook (lambda () (setq c-basic-offset 4))) - Python 模式:
(add-hook 'python-mode-hook (lambda () (setq python-indent-offset 4))) - JavaScript 模式:
(add-hook 'js-mode-hook (lambda () (setq js-indent-level 4)))
- C/C++ 模式:
全局默认缩进配置
可设置全局变量让部分模式继承默认缩进规则,同时推荐用空格代替制表符避免跨环境显示差异:(setq-default tab-width 4) (setq-default standard-indent 4) (setq-default indent-tabs-mode nil) ; 用空格替代制表符缩进修复
C-M-\格式化问题C-M-\调用的indent-region命令完全遵循当前模式的缩进规则,只要设置好对应模式的缩进偏移变量,该命令就会自动使用4字符缩进。
内容的提问来源于stack exchange,提问作者user1479670
相关产品推荐
相关产品推荐

