24
14

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

EmacsAdvent Calendar 2023

Day 1

Markdown Modeと久々に向き合う

Last updated at Posted at 2023-12-01

こんにちは! Emacs Advent Calendarです! メリークリスマス!

Advent Calendarの季節なのでみなさんも20個くらい記事を書く羽目になっているのではないかと思うのですが、私も最近いろいろあって執筆環境を整えてモチベを高めようという気になってきました。

EmacsでMarkdownを書くならMarkdown Modeを使うのが定石ですが、長年何も考えずに使ってきてMarkdown ModeのMarkdown Modeらしい使いかたをしてこなかったので長い12月の最初に向き合ってみようかと思いました。

Markdown Modeのインストール

Markdown ModeはEmacsに標準では付属していませんが、M-x package-install markdown-modeとかで入ります。Emacs 28以降ではNonGNU ELPAが最初から設定されているので、特別な設定は何もしなくても入ります。

それ以前のEmacs向けにはREADMEを読んで package-archives の追加をしてください。
いままで"melpa"/"melpa-stable"/"nongnu"のどれかを追加していて非標準のパッケージがインストールできていれば追加の設定は必要ありません。

Markdown Modeの設定

設定項目はREADMEやドキュメントにいっぱい書いてあります。

みなさんもう既にEmacs 29を使ってると思うのでsetoptで設定すると便利です。
これはカスタム変数を設定するための機能で、custom-set-variablesと同等のものですが、setqと似た使いかたができるようになったものです。

以下の設定はleaf.elが使える環境向けに書かれています。
leafについては2020年代のEmacs入門などもご参照ください。

(leaf markdown-mode :ensure t
  :mode ("\\.md\\'" . gfm-mode)
  :config
  (setopt markdown-command '("pandoc" "--from=markdown" "--to=html5"))
  (setopt markdown-fontify-code-blocks-natively t)
  (setopt markdown-header-scaling t)
  (setopt markdown-indent-on-enter 'indent-and-new-item)
  (leaf-key "<S-tab>" #'markdown-shifttab markdown-mode-map))

leafを使わずに古いEmacs向けの同等の設定も比較してみましょう。

(add-to-list 'auto-mode-alist '("\\.md\\'" . gfm-mode))
(with-eval-after-load 'markdown-mode
  (custom-set-variables
   '(markdown-command '("pandoc" "--from=markdown" "--to=html5"))
   '(markdown-fontify-code-blocks-natively t)
   '(markdown-header-scaling t)
   '(markdown-indent-on-enter 'indent-and-new-item))
  (define-key markdown-mode-map (kbd "<S-tab>") #'markdown-shifttab))
  • 拡張子 .md のファイルに対して markdown-mode ではなく gfm-mode を使う
    • これはどちらでも機能に大きな差があるわけではないのだが、GitHub拡張向けが有効になる
    • 世の中のMarkdownは暗黙的にGFM(GitHub Flavored Markdown)準拠なので大きな問題は起こらない
  • markdown-command: MarkdownをHTMLに変換するコマンドを設定する
  • markdown-fontify-code-blocks-natively: コードブロックに対応する言語で色付けする
  • markdown-header-scaling: 見出し部のフォントをおっきくする
    • Emacsで文字の大きさを変えるような変更は好き嫌いがあると思います
  • markdown-indent-on-enter: RETを押したときの振る舞いを制御する
    • 'indent-and-new-item を設定すると、改行するときに「いい感じ」になる
  • leaf-key/define-key: Shift + Tabを押したときの動きをいい感じにする
    • もともとは本来は (kbd "<backtab>") として設定されているのだけれど、私が使っているmacOSのEmacsでは動作しないので明示的に設定した

あとは私は長年Markdown で表(テーブル)を描くの設定を使ってorg-table-mode(orgtbl)をむりやり使ってたのですが… 2017年にMarkdown Modeに実装されていたことをたったいま知りました。

スクリーンショット

スクリーンショット 2023-12-01 8.52.37.png


というわけで、EmacsでばりばりMarkdownを弄れるようになりました。

俺たちの執筆道はこれからだ!

みなさまもよい年末を🎉

24
14
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
24
14

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?