Emacs CSS模式赢得';t跨多行缩进值
当我的CSS文件中的一行看起来太长时(通常是一个属性后跟一堆值),我想将它们拆分成几行,如下所示(很抱歉我的声誉太低): 但我必须在行之前手动输入空格才能实现这一点。实际上,当我用光标在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
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老实说,我现在遇到了问题。现在我正在潜入解析器,然后。。。无论什么我会试着到处玩玩,并以此作为学习的机会。。。