代码之家  ›  专栏  ›  技术社区  ›  chris

如何按文件类型设置Emacs选项卡设置?

  •  20
  • chris  · 技术社区  · 15 年前

    我需要能够为以下文件类型设置选项卡设置:

    • .css、.html.erb:4个空格选项卡

    我尝试了以下操作,但似乎没有一个更改每种文件类型的默认选项卡设置。

    ;; js-mode-hook has also been tried
    (add-hook 'javascript-mode-hook 
          '(lambda() 
            (setq tab-width 4)))
    
    (add-hook 'css-mode-hook 
          '(lambda() 
            (setq tab-width 4)))
    
    (add-hook 'html-mode-hook 
          '(lambda() 
            (setq tab-width 8)))
    

    5 回复  |  直到 15 年前
        1
  •  30
  •   VitoshKa    15 年前

    在emacs中,每个模式都有自己的缩进样式。要缩进的主命令(绑定到 桌棋类游戏 )是 indent-for-tab-command . 此命令调用在变量中找到的特定于模式的缩进函数 indent-line-function

    对于Ruby(对于我的emacs 2是默认的):

     (setq ruby-indent-level 2)
    

    对于CSS(同样,我的默认值是4):

     (setq css-indent-offset 4)
    

    查看的源代码 sgml-calculate-indent

    我个人觉得很奇怪。我不是在写HTML,但是你可以尝试修改 功能自己:)。学点口齿不清的语言。

    我使用的是js2模式,默认情况下它缩进得很好。对于js,您必须搜索js缩进级别或类似的内容。

    干杯。

        2
  •  7
  •   cristobalito    15 年前

    (from the manual ) :

    Emacs通常同时使用制表符和 用于缩进行的空格。如果你愿意, 仅限空格。要请求这个,设置 缩进制表符模式为零。这是一个 变量只影响当前 缓冲区,但有一个默认值

    但是,要指定缩进级别,还需要设置 c-basic-offset value

    (add-hook 'html-mode-hook 
          '(lambda() 
            (setq c-basic-offset 4)
            (setq indent-tabs-mode nil))
    

    在您的情况下,您可能只需要c-basic-offset,但请尝试一些组合,看看什么最有效。

        3
  •  6
  •   unhammer    14 年前

    js-indent-level 所以放 (setq js-indent-level 4) 进入你的~/.emacs(甚至不应该在钩子中,但是如果你想知道,它是js模式钩子,而不是javascript模式钩子)。

    C-h f js-mode ,单击链接“js.el”,然后搜索“indent”,从顶部第二次点击。


    但是,如果你和其他人合作很多,通常最好在文件的顶部放一个cookie。我通常是这样 // -*- tab-width: 8 -*-

    (defvaralias 'c-basic-offset 'tab-width)
    (defvaralias 'cperl-indent-level 'tab-width)
    (defvaralias 'perl-indent-level 'tab-width)
    (defvaralias 'js-indent-level 'tab-width)
    

    这样我可以处理的变量就更少了(而且不必得到关于文件局部变量不安全的警告,或者如果模式编写器忘记声明它是安全的,则不必得到任何警告)

        4
  •  0
  •   Dangelov    13 年前

    如果将ELPA的css-mode.el与emacs 23.1.1一起使用,则可以通过执行以下操作,为css文件的tab width参数化全局设置tab width: 1) 键入M-x自定义变量, 2) 然后键入css indent level, 3) 然后,根据您的喜好更改变量后,您将执行“保存以备将来的会话”。

        5
  •  0
  •   method    9 年前

    对于HTML和erb:如果您使用 web-mode (Spacemacs提供的模式)可以简单到:

    (setq-default web-mode-code-indent-offset 2 web-mode-markup-indent-offset 2)

    markup-indent-offset 指的是实际的标签和 code-indent-offset