読者です 読者をやめる 読者になる 読者になる

牌語備忘録 -pygo

あくまでもメモです。なるべくオフィシャルの情報を参照してください。

牌語備忘録 -pygo

Emacsの『scss-mode』

Emacs CSS

scss-modeでインデントが効かない場合

前回、試した時は上手く行かなかったのだけど、原因判明。
結論からいうと、Emacs-lispのパスの通ったところにデフォルトのcss-modeではない『css-mode.el』ファイルが置いてあった。
init.elで設定をしなくても、これを読み込んでしまうのが原因。
ケアレスミス。

EmacsCSS-MODE

Lars version

数年前はEmacsCSSというと、このcss-mode.elがよく使われてた。

デフォルトのcss-mode

いつの間にかEmacsの数バージョン前から、別のcss-modeがデフォルトで入るように。
しかし、デフォルトのcss-modeは喧々諤々してるらしく、ver23のはcss-modeが入っているけど初期状態で設定はオフになってるみたい。

ややこしいので Lars version の css-mode.el はパスの通ってないところへ引退していただくことにした。

scss-mode設定

前提としてauto-completeとyasnippetの設定済みで。
それからちょっとカスタム

  1. パスの通ったところにscss-mode.elを置く。
  2. cssとscssどちらもscss-modeで開くように。
  3. auto-completeのcss-modeの補完を使えるように、ac-dictの『css-mode』ファイルをコピーして『scss-mode』とリネーム。
  4. それからオムニ補完も
  5. すべてのバッファから補完
  6. インデントを2に
  7. flymakeで構文チェック*1
  8. 『;』を入力すると『;+改行』に
  9. 『{』を入力すると下記のように
body //<- ここで『M-{』押すと
body {
  //<- ここにカーソルがくる(ネストしてても)
}
;; ;; CSS
(defun my-css-electric-pair-brace ()
  (interactive)
  (insert "{")(newline-and-indent)
  (newline-and-indent)
  (insert "}")
  (indent-for-tab-command)
  (previous-line)(indent-for-tab-command)
  )

(defun my-semicolon-ret ()
  (interactive)
  (insert ";")
  (newline-and-indent))

;; ;; scss-mode
;; ;; https://github.com/antonj/scss-mode
(autoload 'scss-mode "scss-mode")
;; (add-to-list 'auto-mode-alist '("\\.scss\\'" . scss-mode))
(add-to-list 'auto-mode-alist '("\\.\\(scss\\|css\\)\\'" . scss-mode))
(add-hook 'scss-mode-hook 'ac-css-mode-setup)
(add-hook 'scss-mode-hook
          (lambda ()
            (define-key scss-mode-map "\M-{" 'my-css-electric-pair-brace)
            (define-key scss-mode-map ";" 'my-semicolon-ret)
            (setq css-indent-offset 2)
            (setq scss-compile-at-save nil)
            (setq ac-sources '(ac-source-yasnippet
                               ;; ac-source-words-in-same-mode-buffers
                               ac-source-words-in-all-buffer
                               ac-source-dictionary
                               ))
            (flymake-mode t)
            ))
(add-to-list 'ac-modes 'scss-mode)

とりあえずこんな感じで。




*1:20120111