Emacsの設定
Font設定
- RIcty-Diminisedを別途インストールしておく。
- Option-Set Default FontからGUIでフォントを設定する。
- scratchバッファで(frame-parameter nil 'font)でフォント名を確認する。
- その文字列を下記のように追記する。
(add-to-list 'default-frame-alist '(font . "-PfEd-Ricty Diminished-normal-normal-normal-*-15-*-*-*-*-0-iso10646-1"))
基本設定
(package-initialize) (setq package-archives '(("gnu" . "http://elpa.gnu.org/packages/") ("melpa" . "http://melpa.org/packages/") ("org" . "http://orgmode.org/elpa/"))) ;; Preference & Misc settings (load-theme 'deeper-blue t) (tool-bar-mode 0) (setq inhibit-startup-message t) (setq make-backup-files nil) (setq ring-bell-function 'ignore) (show-paren-mode t) (setq frame-title-format "%f") (column-number-mode t) (line-number-mode t) ;; Key bindings (define-key global-map "\C-h" 'delete-backward-char) (define-key global-map "\C-z" 'undo) (global-set-key [C-tab] 'next-multiframe-window) (global-set-key [C-S-iso-lefttab] 'previous-multiframe-window) ;; font (add-to-list 'default-frame-alist '(font . "-PfEd-Ricty Diminished-normal-normal-normal-*-15-*-*-*-*-0-iso10646-1")) ;; Install use-package.el (when (not (package-installed-p 'use-package)) (package-refresh-contents) (package-install 'use-package))
拡張パッケージ
(Caskはプロキシ周りでハマるのでパッケージ管理は,package.elとuse-package.elに変更した。)
補完関係(company, irony(c/c++), jedi(python))
- 補間がauto-completeよりもcompanyの例を見るのでそっちにする.特に,C/C++ようにirony-modeも入れておく.Pythonにはcompany-jediを入れておく(jediは入れない).
- Caskでcompany, company-ironyを指定しておく.
- 初回起動時にはirony-install-server(c/c++), jedi:install-server(Python)を実行する.(この時にlibClangが無いとエラーになるので,libClang-devを入れておく.Macだとllvm --with-clangで入っている。Cmakeも必要なので注意。)
- elpyのコード内移動(定義元へジャンプなど)は内部ではjediを使っている。よって,elpyでコード内移動がうまく動いていないときはjediの設定が間違っている。M-x elpy-configでjediがちゃんと見つかっているかチェックする。また,Ubuntu18.04はpythonがpython2がまだデフォルトなので,RPCもpython3を指定するようにする。
スニペット
- 最低限の設定は下記。最近のバージョンはTABが展開キーだと指定する必要がある。
- 下記の設定だと標準のyas-installed-snippet-dir内のsnippetと、自分で追加したsnippet(.emacs.d/snippet)が使用される。
- 使い方としては、(キーバインドを変えているけど)、例えばpythonモードで、classでTABを打つとクラス定義のテンプレートを生成してくれるし、ifmでTABを押すとif name == 'main':を展開してくる。
- 新しくsnippetを生成するときは、'C-x i i'でYasnippet編集バッファに移動して、名前(ファイル名)と、キー(TABで展開する指定文字)を決めて、その後ろに展開したいコードを書く。C-c, C-cで保存する。モードとか、フォルダを聞いてくるので適時応える。
dotemacs (use-package)
(require 'yasnippet) (setq yas-snippet-dirs '("~/.emacs.d/snippets" yas-installed-snippets-dir)) (define-key yas-minor-mode-map (kbd "C-x i i") 'yas-insert-snippet) (define-key yas-minor-mode-map (kbd "C-x i n") 'yas-new-snippet) (define-key yas-minor-mode-map (kbd "C-x i v") 'yas-visit-snippet-file) (yas-global-mode 1) (custom-set-variables '(yas-trigger-key "TAB")) ;; Company (except for Python mode) (use-package company :commands global-company-mode :init (progn (global-company-mode) (setq company-global-modes '(not python-mode cython-mode sage-mode)) ) :config (progn (setq company-tooltip-limit 20) ; bigger popup window (setq company-idle-delay .3) (setq company-minimum-prefix-length 3) (setq company-echo-delay 0) ; remove annoying blinking (setq company-begin-commands '(self-insert-command)) )) ;; ;(define-key company-mode-map (kbd "TAB") 'company-complete) ;; (define-key company-active-map (kbd "TAB") 'company-complete-common) ;; (define-key company-active-map (kbd "M-h") 'company-show-doc-buffer)) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Python ;; Python (use-package flycheck :ensure t :init (global-flycheck-mode t) :config (setq flycheck-python-flake8-executable "flake8")) ;; Standard Jedi.el setting (use-package jedi :ensure t :init (add-hook 'python-mode-hook 'jedi:setup) (setq jedi:complete-on-dot t) :config (use-package company-jedi :ensure t :init (add-hook 'python-mode-hook (lambda () (add-to-list 'company-backends 'company-jedi))) (setq company-jedi-python-bin "python"))) (use-package elpy :ensure t :init (with-eval-after-load `python (elpy-enable)) :config (progn ;; Use Flycheck instead of Flymake (when (require 'flycheck nil t) (remove-hook 'elpy-modules 'elpy-module-flymake) (remove-hook 'elpy-modules 'elpy-module-yasnippet) (remove-hook 'elpy-mode-hook 'elpy-module-highlight-indentation) (add-hook 'elpy-mode-hook 'flycheck-mode)) (elpy-enable) ;; jedi is great (setq elpy-rpc-python-command "python3") (setq python-shell-interpreter "ipython3") (setq python-shell-interpreter-args "-i --simple-prompt") (setq elpy-rpc-backend "jedi")))
Cask編(もう使っていないけどメモとして残しておく)
package.elではなく,caskかEl-docというので管理するのが主流らしい. caskを使ってみる.
インストール
$ curl -fsSkL https://raw.github.com/cask/cask/master/go | python # ubuntu $ brew install cask # OSX $ export PATH="/home/nobunaga/.cask/bin:$PATH"
初期設定と使い方
$cd .emacs.d $ cask init # 初期化時に一度だけ実行.Caskというファイルが生成される. $ cask install # Caskの指定にしたがって必要なパッケージをインストール. $ cask update # updateがあれば更新する.
Caskの書き方
- (depends-on "package-name") でpackage-nameのパッケージが.emacs.d/.cask以下に保存される
init.elの設定
- 下記を記入しておくと,Caskに書いたファイルを自動でrequireしてくれる.
(require 'cask "~/.cask/cask.el") ; Ubuntu (require 'cask) ; OSX (cask-initialize)
(global-company-mode 1) ;; c/c++ (add-hook 'c-mode-hook 'irony-mode) (add-hook 'c++-mode-hook 'irony-mode) (add-hook 'irony-mode-hook 'irony-cdb-autosetup-comile-options) (add-to-list 'company-backends 'company-irony) ;; python (require 'jedi-core) (setq jedi:complete-on-dot t) (setq jedi:use-shortcuts t) (add-hook 'python-mode-hook 'jedi:setup) (add-to-list 'company-backends 'company-jedi) ;; general (setq comany-idle-delay 0) (setq comany-minimum-prefix-length 2) (setq comany-selection-wrap-around t) ;; (setq company-idle-delay nil) ; 自動補完をしない (global-set-key (kbd "C-M-i") 'company-complete) (define-key company-active-map (kbd "C-n") 'company-select-next) (define-key company-active-map (kbd "C-p") 'company-select-previous) (define-key company-search-map (kbd "C-n") 'company-select-next) (define-key company-search-map (kbd "C-p") 'company-select-previous) (define-key company-active-map (kbd "<tab>") 'company-complete-selection)
Yasnippet
(require 'yasnippet) (setq yas-snippet-dirs '("~/.emacs.d/snippets" yas-installed-snippets-dir)) (define-key yas-minor-mode-map (kbd "C-x i i") 'yas-insert-snippet) (define-key yas-minor-mode-map (kbd "C-x i n") 'yas-new-snippet) (define-key yas-minor-mode-map (kbd "C-x i v") 'yas-visit-snippet-file) (yas-global-mode 1) (custom-set-variables '(yas-trigger-key "TAB"))