我一直在尝试配置Emacs,使其在缩进Ruby代码时插入一个"制表符",而不是一系列"空格"。
到目前为止,我已经尝试过将变量ruby-indent-tabs-mode
设置为t
,这样,根据文档,它将"在ruby模式下插入制表符,如果这是非nil"。
我也尝试过通过Easy customisation
定制它,它在我的init.el
中插入了以下代码:
(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.
'(ruby-indent-tabs-mode t))
(custom-set-faces
;; custom-set-faces 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.
)
通过C-h v检查变量后,它报告变量设置为t
,但按TAB键会继续插入空格。
我甚至试着编辑ruby模式的.el
文件,然后重新编译它,但没有效果。
我们会很感激的。
- ----编辑-----*
以下是通过C-h m报告的激活次要模式:
启用的次要模式:缩写自动完成自动组合
自动压缩自动加密文件名阴影字体锁定
全局自动完成全局字体锁定信息拼音行号菜单栏
显示-智能括号显示-智能括号-全局智能括号
智能括号-全局 transient 标记init.el
文件当前具有:
(require 'cask "/Users/snowingheart/.cask/cask.el")
(cask-initialize)
(require 'pallet)
(add-to-list 'load-path "~/elisp")
(load "php-mode")
(add-to-list 'auto-mode-alist
'("\\.php[34]?\\'\\|\\.phtml\\'" . php-mode))
(global-set-key (kbd "C-x <up>") 'windmove-up)
(global-set-key (kbd "C-x <down>") 'windmove-down)
(global-set-key (kbd "C-x <right>") 'windmove-right)
(global-set-key (kbd "C-x <left>") 'windmove-left)
(require 'package)
(add-to-list 'package-archives
'("marmalade" .
"http://marmalade-repo.org/packages/"))
(package-initialize)
(global-set-key (kbd "C-x >") 'mc/mark-next-like-this)
(global-set-key (kbd "C-x <") 'mc/mark-previous-like-this)
(global-set-key (kbd "C-c C-<") 'mc/mark-all-like-this)
(global-set-key (kbd "C-S-c C-S-c") 'mc/edit-lines)
(require 'smartparens-config)
(require 'smartparens-ruby)
(require 'smartparens-erb)
(smartparens-global-mode)
(show-smartparens-global-mode t)
(sp-with-modes '(rhtml-mode)
(sp-local-pair "<%=" "%>")
(sp-local-pair "<%-" "%>"))
(require 'auto-complete-config)
(add-to-list 'ac-dictionary-directories
"~/.emacs.d/.cask/24.3.50.1/elpa/auto-complete-20130724.1750/dict")
(ac-config-default)
(setq ac-ignore-case nil)
(add-to-list 'ac-modes 'enh-ruby-mode)
(add-to-list 'ac-modes 'web-mode)
(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.
'(indent-tabs-mode t)
'(ruby-indent-tabs-mode t))
(custom-set-faces
;; custom-set-faces 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.
)
(setq-default indent-tabs-mode t)
(setq enh-ruby-indent-tabs-mode t)
(smart-tabs-insinuate 'ruby)
(smart-tabs-advice ruby-indent-line ruby-indent-level)
(setq ruby-indent-tabs-mode t)
2条答案
按热度按时间juud5qan1#
尝试将以下内容添加到您的
init.el
(在您已有的自定义项下面):来自
indent-tabs-mode
的文档:如果非空,缩进可以插入制表符。
我不使用
ruby-mode
,所以我不知道indent-tabs-mode
和ruby-indent-tabs-mode
之间可能的交互。将indent-tabs-mode
设置为t
可能就足够了(并删除您对ruby-indent-tabs-mode
所做的自定义)。但是当您将上面的代码片段添加到您的配置中时,Emacs的默认行为将是插入制表符进行缩进。编辑
如图所示,
enh-ruby-mode
定义了一个名为enh-ruby-indent-tabs-mode
的自定义变量,默认值为nil
。稍后,此变量的值将用于覆盖indent-tabs-mode
的值,这就是将indent-tabs-mode
设置为t
对启用enh-ruby-mode
的缓冲区没有影响的原因。因此,除非您启用除
ruby-mode
和enh-ruby-mode
之外的任何其他模式,否则这些模式可能会修改indent-tabs-mode
变量,添加到您的
init.el
应该可以解决您的问题。另一个EDIT(工作溶液)
(致谢:This answer让我走上了正确的道路。)
使用
ruby-mode
版本1.2(内置)enh-ruby-mode
版本20140406.252(通过M-xpackage-install
...安装)我可以通过将以下代码添加到一个**(否则完全为空)**
init.el
文件中来使其工作:这个解决方案适用于Emacs的GUI和控制台版本,它可能会很好地与您的其他定制集成,但您 * 将 * 需要从您上面发布的
init.el
版本中删除custom-set-variables
部分及其以下的所有内容。还要注意,如果您确实遇到Emacs插入空格而不是制表符的情况,您总是可以删除它,并通过C-qTAB强制quoting it插入制表符。
正在收尾
原来
enh-ruby-mode
中有一个bug,当enh-ruby-indent-tabs-mode
设置为t
时,它会导致 * 从第二级开始的块 * 的缩进失败。enh-ruby-mode
的作者/维护者没有修复它的计划,但错误报告中包含了一个据说可以修复这个问题的补丁。xdyibdwo2#
更新的答案Au(Emacs 28.2):
将
indent-tabs-mode
和ruby-indent-tabs-mode
设置为t
。在全球范围内,在您的
~/.emacs.el
中:或者更好的方法是,限制在特定的项目中,例如在
~/src/your-project/.dir-locals.el
文件中: