scss を使う上での設定をここではまとめている。長いこと手を入れてないので今はより良い設定がありそうな気がする。
rainbow-mode はカラーコードを入力した際に、そのカラーコード部分の背景色をカラーコードの色に変化させるパッケージ。ぱっと見で大体どんな色かわかって便利なやつ
自分はel-get で入れている。
(el-get-bundle rainbow-mode)
ELPA に登録されているので package-install でもいける
scss-mode は Emacs 組込みの css-mode の中で定義されているメジャーモード。なのでインストール不要で使えるし
.scss
という拡張子なら自動的に scss-mode で開いてくれるようになっている。
インデントはデフォルトだと半角空白 4 つとなっているが麦汁さん的には 2 の方が良いのでそのように変更している。
(with-eval-after-load 'scss-mode
(setq css-indent-offset 2))
with-eval-after-load
を使っているが
css-indent-offset
は defcustom
で定義されているので
custom-set-variables
を使うように修正した方が良さそう
stylelint v14 以降は –style オプションが使えないので上書き https://github.com/flycheck/flycheck/pull/1944 が取り込まれたらこれも要らなさそうだけど。
(with-eval-after-load 'flycheck
(flycheck-define-checker scss-stylelint
"A SCSS syntax and style checker using stylelint.
See URL `http://stylelint.io/'."
:command ("stylelint"
(eval flycheck-stylelint-args)
(option-flag "--quiet" flycheck-stylelint-quiet)
(config-file "--config" flycheck-stylelintrc))
:standard-input t
:error-parser flycheck-parse-stylelint
:predicate flycheck-buffer-nonempty-p
:modes (scss-mode)))
scss を使う上で hook を使って色々有効化したりしている。
(defun my/scss-mode-hook ()
(flycheck-mode 1)
(setq-local lsp-prefer-flymake nil)
(lsp)
(lsp-ui-mode -1)
(smartparens-strict-mode 1)
;; lsp-ui とかより後に設定しないと上書きされるのでここに移動した
(setq-local flycheck-checker 'scss-stylelint)
(setq-local flycheck-check-syntax-automatically '(save new-line idle-change))
(origami-mode 1)
(company-mode 1)
(setq-local company-backends
'((company-capf company-keywords company-dabbrev-code) company-yasnippet company-files company-dabbrev))
(subword-mode 1)
(copilot-mode 1)
(display-line-numbers-mode 1)
(rainbow-mode))
(add-hook 'scss-mode-hook 'my/scss-mode-hook)
外部コマンドで fetch-color-var というのを定義してそいつにカラーコードを渡すとプロジェクトで使ってる CSS Variable を返してくるようにしている。
で、それを Emacs から叩いて使えるようにしているのが以下のコマンド
(defun my/replace-var (point mark)
(interactive "r")
(let* ((str (buffer-substring point mark))
(cmd (concat "fetch-color-var '" str "'"))
(response (shell-command-to-string cmd)))
(delete-region point mark)
(insert response)))
設定しているけど使ってないなあ……。
(with-eval-after-load 'major-mode-hydra
(major-mode-hydra-define scss-mode (:quit-key "q" :title (concat (all-the-icons-alltheicon "css3") " CSS"))
("Edit"
(("v" my/replace-var "replace-var")))))
Key | 効果 |
---|---|
v | リージョンの値で CSS 変数を検索して置き換えるやつ。自作コマンドを利用している |