0

我的问题的标题是对emacs 中健全的选项卡的引用。

基本上我想要的是全局设置标签和缩进以某种统一的方式工作。我觉得 emacs 比 TextMate 或 BBEdit 要好得多,但实际上它们处理缩进的方式很简单,而且非常适合我的目的。在 emacs 中,如果您使用的选项卡/空格方案与您使用的次要模式强制执行的方案不同,那么您就有麻烦了。

当我按下回车键时,我想移动到下一行,使用制表符缩进到正确的位置。如果我也可以吃蛋糕并吃掉它,那么如果文件的其余部分以这种方式组成,我希望使用空格缩进。

我也尝试过这些:
在 emacs 中执行制表符
强制 emacs 使用制表符

感谢任何可以帮助我实现这一目标的人。

-麦克风

4

4 回答 4

4

也许(global-set-key (kbd "RET") 'newline-and-indent)是你想要的?(或者reindent-then-newline-and-indent如果可用,或者您可以直接点击C-j而不是 Enter 键。)

于 2009-06-09T02:01:11.747 回答
2

对于您问题的这一部分:

如果我也可以吃蛋糕并吃掉它,那么如果文件的其余部分以这种方式组成,我希望使用空格缩进。

这是你想要的吗?

(defun dtrt-indent ()
  (setq indent-tabs-mode  
        (save-excursion
          (goto-char (point-min))
          (search-forward "\t" nil t))))
(add-hook 'text-mode-hook #'dtrt-indent)
(add-hook 'c-mode-hook #'dtrt-indent)
; etc for all modes you care about

因此,如果缓冲区中的任何地方都有制表符,请使用制表符缩进;如果没有制表符,则使用空格缩进。

于 2009-06-09T05:50:29.223 回答
0

如果您按照描述进行设置:

(setq indent-tabs-mode t)
(setq-default indent-tabs-mode t)
(setq tab-width 4) ;; 8 is way too many
(setq default-tab-width 4) ;; 8 is way too many
(global-set-key (kbd "RET") 'newline-and-indent)

这个indent-tabs-mode东西会告诉emacs通过使用TABS和SPACES来创建你的缩进来组成所需的缩进(由单个模式定义)。这意味着,如果您想插入 TAB 而不是 TABS/SPACES,则需要将模式配置tab-width为用作缩进。

例如,如果您使用c-modeand selectcc-mode作为缩进样式(使用 4 选择C-c .),它使用 4 作为缩进值,newline-and-indent将插入空格。

总结:

  1. 检查您的模式是否tab-width用作缩进
  2. 检查您的模式是否不会覆盖indent-tabs-modepython-mode似乎这样做)

虽然我个人不喜欢 TABS 祝你旅途好运 :)

于 2009-06-09T08:20:07.393 回答
0

最好的策略是说服您选择的编程模式以您喜欢的方式缩进。这通常很容易;我对缩进很挑剔,我的 emacs 总是自动做正确的事情。(这意味着“缩进区域”也总是做我想要的,这非常方便。)

于 2009-06-09T12:44:07.703 回答