2017-04-24 6 views
2

CSS 파일의 한 줄이 길어서 (대개 속성 뒤에 많은 값이있는 것처럼 보일 때), 다음과 같이 여러 줄로 나누고 싶습니다 (내 낮은 평판 죄송합니다) :Emacs CSS 모드는 여러 줄에 값을 들여 쓰지 않을 것입니다.

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

하지만 선이 그것을 달성하기 전에 수동으로 공백을 입력해야합니다. 나는 url 라인에 내 커서 TAB을 쳤을 때 실제로, 내가 무엇을 얻을 것은 이것이다 :

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

최악의 일은이다 나도 같은 다시 TAB을 쳤을 때 한 후 수동으로 공간을 삽입, 그 줄을 입력하면 indent-region으로 인해 추한 형식으로 돌아갑니다.

이것은 중요한 문제는 아니지만 정말 고통스럽고 정말 괜찮은 해결책을 찾기를 바랍니다. 미리 감사드립니다!

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 파일과 xah-CSS-모드 또한 시도 웹 모드. 그들 중 누구도 운동하지 못했습니다.

답변

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 있습니다을 줄 것으로 보인다.

+0

'smie' 물건을 가져 주셔서 감사합니다. 당신의 도움이 없었다면 이런 종류의 비하인드 스토리를 결코 알 수 없었을 것입니다. 코드 복사 및 붙여 넣기가 문제를 즉시 해결하지는 못했지만 조금만 수정하면 문제가 해결되었습니다. 'smie-config-show-indent'는 많은 도움이되었습니다. 감사! – tsktsktsk64

+0

'smie-config-show-indent'를 사용할 때': -property'가 절대로 나타나지 않는 것처럼 보입니다. 버전 차이와 관련이 있습니까? – tsktsktsk64

+1

@ tsktsktsk64 예, 방금 확인했습니다. 분명히 그것은 이맥스 25와 26 사이 어딘가에 추가되었습니다. 따라서 26으로 업그레이드하면 위의 코드가 작동합니다 (또는 최신 이머전 시큐리티 코드를 여러분의 이맥스 코드로 가져 가십시오). – jenesaisquoi

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 님의 답변은 지금 가능한 최선의 해결책입니다.

나는 Github에서 web-mode에 대한 문제점을 열었으며 작성자는 web-mode입니다. 우리는 곧 내가 질문에서 언급 한 들여 쓰기에 대한 통합 된 지원을 보게 될 것이다.

+0

그게 그림에 넣은 들여 쓰기를 제공합니까? 그것은 나를 위해 아니지만 이맥스 26에있어, 어쩌면 CSS 패키지가 변경되었습니다. 이 규칙은'\'(: after, (또는 ":" ","), css-indent-offset)' – jenesaisquoi

+0

@ jenesaisquoi로 짧아 질 수 있습니다. 솔직히 말해서, 지금 문제가 있습니다. 이제 저는 파서들과 함께 다이빙을하고 있습니다. 나는 장난감으로 주위를 배우고 그걸 배울 수있는 기회로 삼을 것입니다 ... – tsktsktsk64