2

当我的 CSS 文件中的一行看起来太长(通常是一个属性后跟一堆值)时,我想将它们分成几行这样的新行(对不起,我的声誉很低):

https://i.stack.imgur.com/bxXvv.png

但是我必须在行前手动输入空格来实现这一点。实际上,当我用光标url在行上按 TAB 时,我得到的是:

https://i.stack.imgur.com/r4nxa.png

最糟糕的是,在手动插入空格后,当我在同一行再次按 TAB 时,由于indent-region.

这不是一个重要的问题,但它真的让我很痛苦,我真的希望我们能在这里找到一个体面的解决方案。提前致谢!

MX版本:

GNU Emacs 25.1.1 (x86_64-apple-darwin16.1.0, NS appkit-1504.60 Version 10.12.1 (Build 16B2555)) of 2016-11-27

编辑:还为 css 文件和 xah-css-mode 尝试了 web-mode。他们都没有成功。

4

2 回答 2

2

css-mode用于smie缩进。看起来:在那种情况下被标记为“:-property”。一种选择是更改css-smie-rules以包含另一个用于在该标记之后缩进的规则。

评估以下重新定义似乎给出了你想要的缩进,

(defun css-smie-rules (kind token)
  (pcase (cons kind token)
    (`(:elem . basic) css-indent-offset)
    (`(:elem . arg) 0)
    (`(:list-intro . ,(or `";" `"")) t) ;"" stands for BOB (bug#15467).
    (`(:before . "{")
     (when (or (smie-rule-hanging-p) (smie-rule-bolp))
       (smie-backward-sexp ";")
       (smie-indent-virtual)))
    (`(:before . ,(or "{" "("))
     (if (smie-rule-hanging-p) (smie-rule-parent 0)))
    ;; *** Additional rule ***
    (`(:after . ":-property") css-indent-offset)))

有一个命令smie-config-show-indent可用于确定在给定点使用的缩进规则。

于 2017-04-24T14:57:16.113 回答
0

@jenesaisquoi 提到smie并提供了一个非常有用的示例。这是我对自己问题的最终解决方案。

将这些添加到init.el文件中:

(require 'smie)
(defun css-smie-rules (kind token)
  (pcase (cons kind token)
    (`(:elem . basic) css-indent-offset)
    (`(:elem . arg) 0)
    (`(:list-intro . ,(or `";" `"")) t) ;"" stands for BOB (bug#15467).
    (`(:before . "{")
     (when (or (smie-rule-hanging-p) (smie-rule-bolp))
       (smie-backward-sexp ";")
       (smie-indent-virtual)))
    (`(:before . ,(or "{" "("))
     (if (smie-rule-hanging-p) (smie-rule-parent 0)))
    ;; *** Additional rules below ***
    (`(:after . ":") css-indent-offset)
    (`(:after . ",") css-indent-offset)))

语法非常不言自明。

也许有一些方法可以在不重写函数的情况下修改它,但我还不熟悉所有建议的东西,所以如果我找到更优雅的方法,我会回来编辑。

转到 jenesaiquoi 的答案以获得我们现在可以拥有的最佳解决方案。

我已经web-mode在 Github 中打开了一个问题,作者web-mode现在正在处理它。我们很快就会看到对我在问题中提到的缩进的集成支持。

于 2017-04-25T03:55:50.280 回答