Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/css/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Emacs CSS模式赢得';t跨多行缩进值_Css_Emacs_Indentation_Smie - Fatal编程技术网

Emacs CSS模式赢得';t跨多行缩进值

Emacs CSS模式赢得';t跨多行缩进值,css,emacs,indentation,smie,Css,Emacs,Indentation,Smie,当我的CSS文件中的一行看起来太长时(通常是一个属性后跟一堆值),我想将它们拆分成几行,如下所示(很抱歉我的声誉太低): 但我必须在行之前手动输入空格才能实现这一点。实际上,当我用光标在url行上点击TAB时,我得到的是: 最糟糕的是,在手动插入空格后,当我再次点击同一行上的TAB时,由于缩进区域,它返回到丑陋的格式 这不是一个重大问题,但它确实让我感到痛苦,我真的希望我们能在这里找到一个体面的解决方案。提前谢谢 M-x版本: GNU Emacs 25.1.1 (x86_64-apple-d

当我的CSS文件中的一行看起来太长时(通常是一个属性后跟一堆值),我想将它们拆分成几行,如下所示(很抱歉我的声誉太低):

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

最糟糕的是,在手动插入空格后,当我再次点击同一行上的TAB时,由于
缩进区域
,它返回到丑陋的格式

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

M-x版本:

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文件的web模式和xah css模式。它们都不起作用。

css模式
使用
smie
进行缩进。看起来该场景中的
标记为“:-property”。一个选项是更改
css 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 rule ***
    (`(:after . ":-property") css-indent-offset)))
有一个命令
smie config show indent
,用于确定在给定点使用的缩进规则。

@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)))
语法是非常自我解释的

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

请参阅Jenesaikoi的答案,以获得我们现在可以获得的最佳解决方案


我在Github中为
web模式
打开了一个问题,
web模式
的作者现在正在研究它。我们很快就会看到对我在问题中提到的缩进的集成支持。

非常感谢您提出
smie
这件事。没有你的帮助,我永远都不可能知道这些幕后的秘密。复制和粘贴代码并没有立即解决问题,但我尝试对代码片段稍加调整,最终解决了问题。您的
smie配置show indent也帮了大忙。谢谢当我使用
smie config show indent
时,似乎从未显示
:-property
,只显示
。这与版本差异有关吗?@tsktsktsk64是的,我刚查过。显然,这是在emacs 25和26之间添加的。因此,如果您升级到26(或者只是将较新的
css模式
拉到您的emacs中),如果您不介意在这件小事上花费更多的时间,上述功能应该可以使用。。。我刚刚编辑了这个问题,当我有两行以上的话,这就是我的方式给我的。我完全不知道smie是如何工作的,现在我被卡住了。我将尝试升级到26。。。同时,请您看看我目前的进展情况好吗?@tsktsktsk64如果我是您,我会在您的网站lisp中选择cherry。
:-property
似乎是一个理想的解决方案,您可能不想自己做这件事,这会给您在图片中添加的缩进吗?这不适合我,但我在Emacs26上,可能css包已经改变了。规则可能会缩短为
`(:after.,(或“:”)css缩进偏移量)
@jenesaisquoi老实说,我现在遇到了问题。现在我正在潜入解析器,然后。。。无论什么我会试着到处玩玩,并以此作为学习的机会。。。