mahito1594 / dotemacs

My init file for Emacs.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

My configuration file for Emacs

Quick start

$ git clone https://github.com/mahito1594/dotemacs.git ~/.emacs.d

init.el では elisp/config.el および elisp/local-conf.el を読み込んでいます。 elisp/local-conf.el は Git 管理されていません。 マシンごとの設定はこちらに記述します。

External Commands

以下の外部コマンドを利用することがあります。

Memorandum

Restart

M-x restart-emacs で Emacs を再起動できるようにします.

Backup files

自動バックアップとオートセーブファイルを .emacs.d/backups に集めます.

dired

. を押下することで Hydra を用いた dired-mode の操作をできるようにします.

(leaf dired
  :custom ((dired-recursive-copies . 'always))
  :config
  (put 'dired-find-alternate-file 'disabled nil))

(leaf dired-x
  :after (dired)
  :bind ((:dired-mode-map
          ("." . hydra-dired/body)))
  :custom ((dired-omit-files . "^\\.?#\\|^\\.$\\|^\\.\\.$\\|^\\..+$"))
  :require t
  :hydra (hydra-dired
          (:hint nil)
          "
^Navigate^          ^Edit^            ^Mark^               ^Command^           ^Misc^
^^^^^^^^^^-----------------------------------------------------------------------------------------
_n_: next           _+_: mkdir        _m_: mark            _Z_: compress file  _(_: details
_p_: previous       _C_: copy         _u_: unmark          ^ ^                 _)_: hide some files
_J_: up directory   _R_: rename       _U_: unmark all      ^ ^                 _g_: refresh
^ ^                 _D_: delete       _t_: toggle marks    _M_: chmod
_f_: open file      ^ ^               _E_: extension mark  _G_: chgrp          _q_: quit window
_v_: view file      _Y_: rel symlink  _F_: find marked     _O_: chown
_a_: open in        _S_: symlink
^ ^    current buf  ^ ^               ^ ^                  _!_: shell command  _._: toggle Hydra
"
          ;; Navigate
          ("n" dired-next-line)
          ("p" dired-previous-line)
          ("g" revert-buffer)
          ("J" dired-up-directory)
          ("f" dired-find-file)
          ("v" dired-view-file)
          ("a" dired-find-alternate-file)
          ;; Edit
          ("+" dired-create-directory)
          ("C" dired-do-copy)
          ("R" dired-do-rename)
          ("D" dired-do-delete)
          ("Y" dired-do-relsymlink)
          ("S" dired-do-symlink)
          ;; Mark
          ("m" dired-mark)
          ("u" dired-unmark)
          ("U" dired-unmark-all-marks)
          ("t" dired-toggle-marks)
          ("E" dired-mark-extension)
          ("F" dired-do-find-marked-files)
          ("Z" dired-do-compress)
          ("M" dired-do-chmod)
          ("G" dired-do-chgrp)
          ("O" dired-do-chown)
          ("!" dired-do-shell-command)
          ;; Misc
          ("(" dired-hide-details-mode)
          (")" dired-omit-mode)
          ("g" revert-buffer)
          ("q" quit-window)
          ("." nil)))

Navigation

バッファ内で C-v を押下することで hydra-navi による移動ができるようになります.

lice

lice はファイルヘッダにライセンスをコメントとして自動挿入してくれます. M-x lice とします.

新しいライセンスを追加する場合は ~/.emacs.d/lice 以下にファイルを保存してください.

Language Server Protocol

いくつかの言語では Language Server Protocol を用いて補完・文法チェックを行います. 詳細は各言語の設定を参照してください.

ここでは lsp-mode を利用します. 補完には company-lsp を,文法チェックには lsp-ui を利用します. 大きいプロジェクトを開くと flycheck が重くなるという話もあり,flymake を利用することにしました.

TeX/LaTeX

AUCTeX

TeX 文書の作成には AUCTeX を利用します.

Settings

AUCTeX は tex.el, latex.el, tex-buf.el および font-latex.el などを提供します. 変数 TeX-parse-selft にすることで,TeX 文書内を解析して用いているパッケージを調べます. 変数 TeX-electric-sub-and-superscriptt にすることで ^ または _ を入力後に自動的に {...} が挿入されます. 変数 TeX-source-correlate-modet にすることで常に SyncTeX を利用するようにします.

C-c C-c (TeX-command-master) から latexmk を呼べるように TeX-command-list に追加しておきます.

LaTeX 文書を執筆する際は,インライン数式の記述に \(...\) を用います. 変数 LaTeX-electric-left-right-bracet に設定することで, \left\right など対応する括弧類を自動的に挿入します. この機能は electric-pair-mode と相性が悪いので LaTeX-mode では electric-pair-mode を OFF にしておきます.

AUCTeX は section 型環境を挿入 (C-c C-s) 後に \label を自動的に挿入します(LaTeX-section-label). しかし,この挿入には改行を伴うため,後述する RefTeX の reftex-label (C-c () を利用することにします.

C-c C-e で挿入される環境の補完候補から eqnarray を削除します(参考 TeX Stack Exchange). これは eqnarray 環境には不具合があり非推奨となっているためです. amsmath パッケージを利用するべきです.

入力補完に TexLab という Language Server を利用します. 実行バイナリを PATH の通ったディレクトリにダウンロードしておく必要があります.

TeXLab の実行バイナリが見つからなかった場合は company-math を利用します. また日本語 LuaLaTeX 文書を開くと lsp-mode がエラーを吐く場合があります. work around としては my-LaTeX-mode-hook を参照してください.

Insertion of Quotes, Dollars and Braces

引用符の挿入等の操作についてまとめます.

keyaction
=”=Insert `` or ~”~
$Insert $$ or \(\)
C-c {Insert {}

リージョン選択中に $ を押下すると,選択範囲を $...$ または \(...\) で囲みます. また続けて $ を押下することで別行立て数式・非数式・インライン数式をトグルします. また,リージョン選択中に C-c { を押下することで選択範囲を {...} で囲みます.

リージョンを \left\right などで囲みたい場合は C-c C-m (TeX-insert-macro) を利用するのが良いでしょう.

Font specifiers

フォントに関する制御綴の挿入についてまとめます. prefix は C-c C-f です.

keyaction
[prefix] C-bInsert \textbf{}
[prefix] C-iInsert \textit{}
[prefix] C-eInsert \emph{}
[prefix] C-sInsert \textsl{}
[prefix] C-rInsert \textrm{}
[prefix] C-fInsert \textsf{}
[prefix] C-tInsert \texttt{}
[prefix] C-cInsert \textsc{}
[prefix] C-dDelete innermost font specifire

LaTeX-mode 中では以下のコマンドが利用可能なように設定しています.

keyaction
[prefix] mInsert \textmc{}
[prefix] gInsert \textgt{}

Sectioning/Environment

section 型命令や環境の挿入についてまとめます.

keyaction
C-c C-sInsert a sectioning command
C-c C-eInsert a environment command
C-c ]Insert a suitable \end{...}
C-M-aMove to suitable \begin{...}
C-M-eMove to suitable \end{...}

また,環境内で C-u C-c C-e とすれば環境を変更できます.

Math

C-c ~LaTeX-math-mode に入ります. LaTeX-math-mode 中で ` を押下すると数式マクロが簡単に入力できるようになります. ユーザ辞書は LaTeX-math-list で設定できます.

Mark region/Comment and Uncomment

C-c * で現在いる section 全体をマークします. 同様に C-c . は現在いる environment 全体をマークします.

C-c ; は選択中のリージョンをコメントまたはアンコメントします. また C-c % は現在のパラグラフをコメントまたはアンコメントします.

Compile

TeX 文書をコンパイルするには C-c C-c (TeX-command-master) を用います. 他にも選択中のリージョンや,現在のバッファをコンパイルするコマンドがあります.

keyfunctionaction
C-c C-cTeX-command-masterCompile the master file (See the variable TeX-master).
C-c C-rTeX-command-regionCompile the selected region.
C-c C-bTeX-command-bufferCompile the current buffer.
C-c C-zTeX-command-sectionCompile the current section.
C-c C-aTeX-command-run-allCompile the current document until it is finished.

コンパイル時のコマンドは TeX-command-list から選ぶことができます. 利用する (La)TeX エンジンはカスタム変数 TeX-engine で指定できます. これはバッファローカル変数です. デフォルトで用意されているエンジンは

  • default (TeX-command, LaTeX-command, ConTeXt-engine から決まる)
  • XeTeX
  • LuaTeX
  • Omega

です.

たとえばデフォルトの設定で pdflatex を利用するには

  • TeX-PDF-mode (C-c C-t C-p でトグルできます) であり,かつ変数 TeX-PDF-from-DVInil

の状況で C-c C-c LaTeX とすれば良いはずです. また,たとえば LuaLaTeX で PDF を直接生成するためには

  • 変数 TeX-engineluatex にセットし,かつ TeX-PDF-mode になっている

状況で C-c C-c LaTeX とすれば良いはずです. ここで TeX-PDF-mode バッファローカルなマイナーモードで,デフォルトで有効になっています.

カスタム変数 TeX-engin-alist を利用することで,エンジンの設定ができます. TeX-engin-alist には次の形のリスト

(SYMBOL "ENGINE NAME" "COMMAND FOR `plain TeX'" "COMMAND FOR `latex'" "COMMAND FOR `ConTeXt'")

を渡します.

Viewing outputs

コンパイルして得られた生成物を見るには C-c C-v (TeX-view) とします. SyncTeX を利用するには TeX-source-correlate-mode になっている必要があります. これは C-c C-t C-s でトグルできます. ビューアとして使われるプログラムは AUCTeX が判断します.

RefTeX

参考文献や相互参照のために RefTeX を利用します.

KeyAction
C-c =Show table of contents
C-c )Insert \ref
C-c [Insert \cite

相互参照に cleveref を利用するには次の 2 通りの方法があります.

  1. 関数 reftex-cleveref-cref を利用する.
  2. カスタム変数 reftex-ref-style-default-list("Cleveref") に変更する.

BibTeX

BibTeX データベースの簡単な編集,および後述の Ebib が利用する設定を記述します.

特に citation key を <第一著者の姓><出版年>:<論文タイトルの最初の1語> の形に自動作成するため, bibtex-autokey-* を適当に設定します.

Ebib

文献管理には Ebib を利用します. 以下の記述には古いキーバインド・関数が含まれています,適宜公式のマニュアルを参照してください.

基本的には ~~/texmf/bibtex/bib~ 以下の .bib ファイルに文献情報を記述していきます. 論文の PDF は ~~/BibFile~ 以下に適切に配置し,Dropbox 等で同期します.

Index buffer での基本操作は次の通りです.

KeyAction
oOpen .bib file
fOpen file
uBrowse URL
aAdd entry
eEdit entry
EEdit entry-key
mMark current entry
MMark all entries
xExport marked entries
!Auto-generate entry-key
sSave
zPause
qQuit

Entry buffer での基本操作は次のとおりです.

KeyAction
aAdd field
eEdit field
mEdit multiline buffer
dDelete field
qQuit

PDF 閲覧のために次のような関数を定義しておきます.

;;; For Ebib
(defun my-ebib-name-transform-function (key)
  "Serach file of the form
       SEARCH-DIRS/FIRST-AUTHOR/ENTRY-KEY"
  (format "%s/%s"
          (substring key (string-match "[A-Za-z]+" key) (match-end 0))
          (replace-regexp-in-string ":" "" key)))

index buffer で K a を押下することで直接 keywords を追加できます. マークした enrtry 全てに keywords を追加することも可能です.

Programming Languages

各プログラミング言語用メジャーモードについて,特筆すべき事項があればここに追記します.

JavaScript

Language Server には typescript-language-server を利用する. M-x lsp-install-server M-x ts-ls でインストールするか, npm でインストールする.

Java

Eclipse JDT LS を利用して Java の編集を行う. インストールは lsp-mode が勝手に行ってくれる.

ただし最新の LS を動かすためには Java 11 以降が必要なため, 適宜 lsp-java-jdt-download-urllsp-java-server-install-dir を指定してやる必要がある。 elisp/local-conf.example.el を参照のこと.

Font

フォントの設定は local-conf.el で次の変数

  • my-font-size
  • my-font-family

をセットし, after-init-hook などに関数 my--font-initialize を追加します.

(defvar my-font-size 10
  "Font size.")
(defvar my-font-family ""
  "Font family.")

(defun my--font-initialize ()
  "Initialize font settings.

After setting the variables `my-font-size' and `my-font-family',
run this function.  For instance, add to `after-init-hook' in `local-conf.el'."
  (let* ((fheight (round (* 10 my-font-size))))
    (set-face-attribute 'default nil
                        :family my-font-family
                        :height fheight)
    (message "Font setting...done")))

また関数 my-change-font-sizemy-change-font-family を利用してインタラクティブにフォントサイズやファミリを変更することもできます. 例えば次のような設定が考えられます.

(add-hook 'after-init-hook
          #'(lambda ()
              (setq my-font-size 12
                    my-font-family "Cica")
              (my-font-initialize)))

Global keybindings

global-map のキーバインドを次のように変更します.

(define-key global-map (kbd "C-m") #'newline-and-indent)
(define-key global-map (kbd "C-2") #'set-mark-command)
(define-key global-map (kbd "C-t") #'other-window)
(define-key global-map (kbd "C-;") #'comment-line)
(define-key global-map (kbd "C-v") #'hydra-navi/body)

また C-hDEL と入れ替えます. help-for-helpC-x ? にバインドします.

(define-key key-translation-map (kbd "C-h") (kbd "DEL"))
(define-key global-map (kbd "C-x ?") 'help-for-help)

Local configuration

elisp/local-conf.el にマシン・環境ごとの設定を記述します. 設定例として elisp/local-conf.example.el を用意しています。

License

本設定ファイルは GNU General Public License (バージョン 3 または以降の任意のバージョン) で公開しています.

About

My init file for Emacs.

License:GNU General Public License v3.0


Languages

Language:Emacs Lisp 100.0%