$ git clone https://github.com/mahito1594/dotemacs.git ~/.emacs.d
init.el
では elisp/config.el
および elisp/local-conf.el
を読み込んでいます。
elisp/local-conf.el
は Git 管理されていません。
マシンごとの設定はこちらに記述します。
以下の外部コマンドを利用することがあります。
M-x restart-emacs
で Emacs を再起動できるようにします.
自動バックアップとオートセーブファイルを .emacs.d/backups
に集めます.
.
を押下することで 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)))
バッファ内で C-v
を押下することで hydra-navi
による移動ができるようになります.
lice はファイルヘッダにライセンスをコメントとして自動挿入してくれます.
M-x lice
とします.
新しいライセンスを追加する場合は ~/.emacs.d/lice
以下にファイルを保存してください.
いくつかの言語では Language Server Protocol を用いて補完・文法チェックを行います. 詳細は各言語の設定を参照してください.
ここでは lsp-mode を利用します. 補完には company-lsp を,文法チェックには lsp-ui を利用します. 大きいプロジェクトを開くと flycheck が重くなるという話もあり,flymake を利用することにしました.
TeX 文書の作成には AUCTeX を利用します.
AUCTeX は tex.el
, latex.el
, tex-buf.el
および font-latex.el
などを提供します.
変数 TeX-parse-self
を t
にすることで,TeX 文書内を解析して用いているパッケージを調べます.
変数 TeX-electric-sub-and-superscript
を t
にすることで ^
または _
を入力後に自動的に {...}
が挿入されます.
変数 TeX-source-correlate-mode
を t
にすることで常に SyncTeX を利用するようにします.
C-c C-c
(TeX-command-master
) から latexmk を呼べるように TeX-command-list
に追加しておきます.
LaTeX 文書を執筆する際は,インライン数式の記述に \(...\)
を用います.
変数 LaTeX-electric-left-right-brace
を t
に設定することで, \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
を参照してください.
引用符の挿入等の操作についてまとめます.
key | action |
---|---|
" | Insert `` or '' |
$ | Insert $$ or \(\) |
C-c { | Insert {} |
リージョン選択中に $
を押下すると,選択範囲を $...$
または \(...\)
で囲みます.
また続けて $
を押下することで別行立て数式・非数式・インライン数式をトグルします.
また,リージョン選択中に C-c {
を押下することで選択範囲を {...}
で囲みます.
リージョンを \left
と \right
などで囲みたい場合は C-c C-m
(TeX-insert-macro
) を利用するのが良いでしょう.
フォントに関する制御綴の挿入についてまとめます.
prefix は C-c C-f
です.
key | action |
---|---|
[prefix] C-b | Insert \textbf{} |
[prefix] C-i | Insert \textit{} |
[prefix] C-e | Insert \emph{} |
[prefix] C-s | Insert \textsl{} |
[prefix] C-r | Insert \textrm{} |
[prefix] C-f | Insert \textsf{} |
[prefix] C-t | Insert \texttt{} |
[prefix] C-c | Insert \textsc{} |
[prefix] C-d | Delete innermost font specifire |
LaTeX-mode 中では以下のコマンドが利用可能なように設定しています.
key | action |
---|---|
[prefix] m | Insert \textmc{} |
[prefix] g | Insert \textgt{} |
section 型命令や環境の挿入についてまとめます.
key | action |
---|---|
C-c C-s | Insert a sectioning command |
C-c C-e | Insert a environment command |
C-c ] | Insert a suitable \end{...} |
C-M-a | Move to suitable \begin{...} |
C-M-e | Move to suitable \end{...} |
また,環境内で C-u C-c C-e
とすれば環境を変更できます.
C-c ~
で LaTeX-math-mode
に入ります.
LaTeX-math-mode
中で `
を押下すると数式マクロが簡単に入力できるようになります.
ユーザ辞書は LaTeX-math-list
で設定できます.
C-c *
で現在いる section 全体をマークします.
同様に C-c .
は現在いる environment 全体をマークします.
C-c ;
は選択中のリージョンをコメントまたはアンコメントします.
また C-c %
は現在のパラグラフをコメントまたはアンコメントします.
TeX 文書をコンパイルするには C-c C-c
(TeX-command-master
) を用います.
他にも選択中のリージョンや,現在のバッファをコンパイルするコマンドがあります.
key | function | action |
---|---|---|
C-c C-c | TeX-command-master | Compile the master file (See the variable TeX-master ). |
C-c C-r | TeX-command-region | Compile the selected region. |
C-c C-b | TeX-command-buffer | Compile the current buffer. |
C-c C-z | TeX-command-section | Compile the current section. |
C-c C-a | TeX-command-run-all | Compile 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-DVI
がnil
の状況で C-c C-c LaTeX
とすれば良いはずです.
また,たとえば LuaLaTeX で PDF を直接生成するためには
- 変数
TeX-engine
をluatex
にセットし,かつ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'")
を渡します.
コンパイルして得られた生成物を見るには C-c C-v
(TeX-view
) とします.
SyncTeX を利用するには TeX-source-correlate-mode
になっている必要があります.
これは C-c C-t C-s
でトグルできます.
ビューアとして使われるプログラムは AUCTeX が判断します.
参考文献や相互参照のために RefTeX を利用します.
Key | Action |
---|---|
C-c = | Show table of contents |
C-c ) | Insert \ref |
C-c [ | Insert \cite |
相互参照に cleveref を利用するには次の 2 通りの方法があります.
- 関数
reftex-cleveref-cref
を利用する. - カスタム変数
reftex-ref-style-default-list
を("Cleveref")
に変更する.
BibTeX データベースの簡単な編集,および後述の Ebib が利用する設定を記述します.
特に citation key を <第一著者の姓><出版年>:<論文タイトルの最初の1語>
の形に自動作成するため,
bibtex-autokey-*
を適当に設定します.
文献管理には Ebib を利用します. 以下の記述には古いキーバインド・関数が含まれています,適宜公式のマニュアルを参照してください.
基本的には ~~/texmf/bibtex/bib~ 以下の .bib
ファイルに文献情報を記述していきます.
論文の PDF は ~~/BibFile~ 以下に適切に配置し,Dropbox 等で同期します.
Index buffer での基本操作は次の通りです.
Key | Action |
---|---|
o | Open .bib file |
f | Open file |
u | Browse URL |
a | Add entry |
e | Edit entry |
E | Edit entry-key |
m | Mark current entry |
M | Mark all entries |
x | Export marked entries |
! | Auto-generate entry-key |
s | Save |
z | Pause |
q | Quit |
Entry buffer での基本操作は次のとおりです.
Key | Action |
---|---|
a | Add field |
e | Edit field |
m | Edit multiline buffer |
d | Delete field |
q | Quit |
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 を追加することも可能です.
各プログラミング言語用メジャーモードについて,特筆すべき事項があればここに追記します.
Language Server には typescript-language-server を利用する.
M-x lsp-install-server
M-x ts-ls
でインストールするか,
npm でインストールする.
Eclipse JDT LS を利用して Java の編集を行う. インストールは lsp-mode が勝手に行ってくれる.
ただし最新の LS を動かすためには Java 11 以降が必要なため,
適宜 lsp-java-jdt-download-url
や lsp-java-server-install-dir
を指定してやる必要がある。
elisp/local-conf.example.el
を参照のこと.
フォントの設定は 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-size
と my-change-font-family
を利用してインタラクティブにフォントサイズやファミリを変更することもできます.
例えば次のような設定が考えられます.
(add-hook 'after-init-hook
#'(lambda ()
(setq my-font-size 12
my-font-family "Cica")
(my-font-initialize)))
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-h
を DEL
と入れ替えます.
help-for-help
は C-x ?
にバインドします.
(define-key key-translation-map (kbd "C-h") (kbd "DEL"))
(define-key global-map (kbd "C-x ?") 'help-for-help)
elisp/local-conf.el
にマシン・環境ごとの設定を記述します.
設定例として elisp/local-conf.example.el
を用意しています。
本設定ファイルは GNU General Public License (バージョン 3 または以降の任意のバージョン) で公開しています.