【问题标题】:How to minify .emacs configuration file?如何缩小 .emacs 配置文件?
【发布时间】:2011-06-17 06:18:53
【问题描述】:

我想知道是否有人可以帮助我缩小我的 .emacs 文件。

目前我已经将它设置为我使用的每种语言都有一个自定义选项卡,例如,如果我有一个 Java 钩子,它看起来像这样。

;; Java 钩子 (defun e-java-mode-hook () (setq tab-width 4) (setq indent-tabs-mode t) (define-key java-mode-map (kbd "") 'java-insert-tab)) (defun java-insert-tab (&可选参数) (交互式“P”) (插入选项卡 arg)) (add-hook 'java-mode-hook 'e-java-mode-hook)

如果我要添加另一种语言,如 CSS 或 JavaScript,我会为 CSS 添加另一个钩子,为 JavaScript 添加另一个钩子。所以我想知道是否有一种全局方式来设置它以便适用于任何和所有语言?

我目前在 Windows 7 上运行 GNU Emacs 23.2.1。

【问题讨论】:

    标签: emacs emacs23


    【解决方案1】:

    espect.el 正在做你想做的事。

    来自文档:


    此模式可以轻松配置个人设置 具有简洁和可扩展的迷你语言的缓冲区。它抽象 远离常见的配置选择任务,例如检查模式 或文件名,转换为简单的声明性语法。声明条件; 当新缓冲区匹配它们时运行一个函数。这使它 容易做的事情,比如为你最喜欢的打开 flyspell-prog-mode 编程语言,或使所有以 .mkn 结尾的文本模式缓冲区 有特殊的属性。

    【讨论】:

    • 感谢您的回复,我会尝试一下,看看它是如何工作的,不过对我来说可能有点复杂。
    【解决方案2】:

    我不确定你想做什么。如果你想在全局范围内将制表符宽度设置为 4 个空格,那么你可以使用自定义命令来做到这一点:

    M-x customize-variable tab-width <ret>
    

    您在自定义中对制表符宽度所做的任何更改都将全局应用。因此,您无需使用钩子为每种模式单独设置它。

    如果您想将不同的设置应用于不同的模式,则必须在 .emacs 中为每种模式提供特定的代码。

    更一般地说,您似乎正在尝试构建自己的自定义制表符插入命令 - 内置缩进不是您需要的吗?我认为在 Emacs 中自定义缩进设置比在您想要的位置手动插入制表符更容易。

    如果您还没有,请查看有关缩进的手册部分,看看您是否可以在没有大量额外钩子的情况下完成您需要的操作:

    C-h r m 缩进

    (即:h-elp,r-阅读手册,m-enu item 缩进 )

    或:

    (info "(emacs)Indentation")
    

    【讨论】:

    • 好吧,我想做的主要是在全局范围内缩进 4 个空格制表符。如果你以前用过 Visual Studio/DreamWeaver,我有点想这样设置。
    • 如上所述,在自定义中设置制表符宽度,并将 .emacs 减少到一行:(setq indent-tabs-mode t)。
    【解决方案3】:

    我同意泰勒的观点;虽然它有点复杂,但从长远来看,如果您尝试了解和自定义默认缩进功能,您会更好。 Emacs Wiki 有 good resources,在 Stack Overflow 上还有其他 relevant Q&As

    将 Tab 键绑定到 insert-tab 意味着您完全失去了 indent-region 之类的好处,以及主要模式可能提供的任何其他智能行为。

    无论如何,为了解决您的具体问题:

    1) 如果您定义 (java-insert-tab)(css-insert-tab)(javascript-insert-tab) 等,它们都做完全相同的事情......好吧,希望你能看到你实际上不需要超过一个那些功能。只需给它一个更通用的名称,然后重新使用它。

    2) (local-set-key ...)(define-key (current-local-map) ...) 做同样的事情,这意味着您也可以拥有一个通用函数来覆盖选项卡键绑定,而不管主要模式如何。

    (defun my-coding-config ()
        (setq tab-width 4)
        (setq indent-tabs-mode t)
        (local-set-key (kbd "<tab>") 'my-insert-tab))
    
    (defun my-insert-tab (&optional arg)
        (interactive "P")
        (insert-tab arg))
    

    然后您只需将my-coding-config 添加到每个适用的模式挂钩变量即可。如果它们很多,您可以将其包装在这样的列表中:

    ;; Use my coding hook for all programming modes
    (mapcar
     (lambda (language-mode-hook)
       (add-hook language-mode-hook 'my-coding-config))
     '(java-mode-hook
       javascript-mode-hook
       css-mode-hook
       ...))
    

    3) 如果您查看 Ch v tab-width RETindent-tabs-mode,您会注意到它们都说“自动变为缓冲区本地以任何方式设置时。”

    作为已经提到的自定义界面的替代方案,您可以使用(set-default 'indent-tabs-mode t) 为此类变量建立默认值。在没有设置缓冲区本地值的代码的情况下,所有缓冲区都将使用默认值,这可能有助于避免编写不必要的模式挂钩。

    【讨论】:

    • 太棒了,我会试一试,让你知道结果如何。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-06-06
    • 2012-01-26
    • 1970-01-01
    • 2010-09-19
    • 2016-06-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多