elpy, flycheck, irony, company-modeなどなどのインストール

emacsのpackage-installから。 パッケージ名は[elpy, flycheck, irony, company, company-irony, company-irony-c-hedears, smartrep, py-yapf]

exec-path-from-shell, cmake-mode, yaml-mode, yatex, use-package, ivy, counselなどもインストール。

dumb-jumpは少なくともFortranを読むのに必要。

dumb-jump

GitHub - jacktasia/dumb-jump: an Emacs "jump to definition" package for 50+ languages rgはbrew install ripgrepで入る。

elpyの導入

IDE Features — Elpy 1.35.0 documentation

個人的な Python 用の Emacs の設定 | org-技術

Emacs: The Best Python Editor? – Real Python

elpyの設定メモ - ししちにじゅうはち 4x7=28

pip install flake8 importmagic yapf jedi

M-x elpy-configでインストールしたパッケージが正しくelpyに読み込まれているか確認する必要がある。Macのアイコンから起動するemacsでは、shellの設定が読み込まれない。これはexec-path-from-shellパッケージをインストールして.emacs内でinitializeすることで詠みこまれるようになる。

M-x package-refresh-contents
M-x package-install exec-path-from-shell
(exec-path-from-shell-initialize)

company-ironyの導入

M-x irony-install-server RET

を忘れずに。

rtags

インストールや設定はここに書いているように行う。

macOSの場合

rtagsをmakeする環境としてcmakeとllvmが必要。ない場合は次のようにインストールする。

% brew install llvm cmake bear

macOSのclangとlibcryptoではなく、brewのものを見るようにパスを通す。

export PATH=/usr/local/opt/llvm/bin:$PATH
export OPENSSL_ROOT_DIR=/usr/local/opt/openssl

Ubuntu & conda-forgenの場合

% conda install -c conda-forge clang libclang-cpp clangdev libllvm11 lit llvm llvm-tools llvmdev

コンパイル

% git clone --recursive https://github.com/Andersbakken/rtags.git
% mkdir build
% cd build
% cmake -DCMAKE_VERBOSE_MAKEFILE:BOOL=ON -DCMAKE_EXPORT_COMPILE_COMMANDS=1 -DCMAKE_INSTALL_PREFIX="" ..
% export MAKEFLAGS=-j8
% cmake --build .

BUILDPATH/rtags/build/binにPATHを通すと、必要に応じて勝手にサーバを起動してくれる。

rc -Jでインデックスをつくための設定ファイルcompile_commands.jsonをcmakeで生成する。

% cd SOME_PROJECT_DIR
% mkdir build && cd build
% cmake -DCMAKE_EXPORT_COMPILE_COMMANDS=1 ..
% rc -J .

emacsでrtagsとflycheck-rtags, company-rtags, rtags-xrefをpackage-installする。 設定はこんな感じか。

;; rtags
(use-package rtags
  :ensure t
  :init
  (add-hook 'c-mode-hook 'rtags-start-process-unless-running)
  (add-hook 'c++-mode-hook 'rtags-start-process-unless-running)
  (add-hook 'objc-mode-hook 'rtags-start-process-unless-running)
  (setq rtags-autostart-diagnostics t)
  :config
  (setq rtags-completions-enabled t)
  (push 'company-rtags company-backends)
  (define-key c-mode-base-map (kbd "<C-tab>") (function company-complete))
)

(use-package flycheck-rtags
  :ensure t
  :init
  (defun my-flycheck-rtags-setup ()
    (flycheck-select-checker 'rtags)
    (setq-local flycheck-highlighting-mode nil)
    (setq-local flycheck-check-syntax-automatically nil))
  (add-hook 'c-mode-hook #'my-flycheck-rtags-setup)
  (add-hook 'c++-mode-hook #'my-flycheck-rtags-setup)
  (add-hook 'objc-mode-hook #'my-flycheck-rtags-setup)
  :config
  (setq rtags-display-result-backend 'ivy))

(use-package rtags-xref
  :init
  (add-hook 'c-mode-common-hook #'rtags-xref-enable)
)

flycheck c++ 11の設定

(require 'rtags)
(add-hook 'c-mode-hook 'rtags-start-process-unless-running)
(add-hook 'c++-mode-hook 'rtags-start-process-unless-running)
(add-hook 'objc-mode-hook 'rtags-start-process-unless-running)
(setq rtags-completions-enabled t)
(require 'company)
(global-company-mode)
(push 'company-rtags company-backends)
(define-key c-mode-base-map (kbd "<C-tab>") (function company-complete))
(require 'flycheck-rtags)
(setq rtags-autostart-diagnostics t)
(defun my-flycheck-rtags-setup ()
  (flycheck-select-checker 'rtags)
  (setq-local flycheck-highlighting-mode nil) ;; RTags creates more accurate overlays.
  (setq-local flycheck-check-syntax-automatically nil))
(add-hook 'c-mode-hook #'my-flycheck-rtags-setup)
(add-hook 'c++-mode-hook #'my-flycheck-rtags-setup)
(add-hook 'objc-mode-hook #'my-flycheck-rtags-setup)

その他 emacs 設定

Emacsの設定 - nobUnagaの日記

自動改行をする/しない

(c-toggle-auto-newline 1)

swiperの挙動が気に入らないなあ→自分の設定ミス

swiperのminibufferのC-jとかC-sの挙動が気に入らないなあ、と思ったら設定ミスだったようだ。

C-jはicomplete-modeの残骸が悪さをしていた(消した)。

C-sはswiperからswiper-isearchにすると思った通りに動くようになった。マニュアル(Ivy User Manual )ちゃんと読まなあかん。

(global-set-key (kbd "C-s") 'swiper-isearch)

マニュアルを見て、これを加えてみた。

(global-set-key (kbd "C-x b") 'ivy-switch-buffer)
(global-set-key (kbd "C-c v") 'ivy-push-view)
(global-set-key (kbd "C-c V") 'ivy-pop-view)

素晴らしく快適。emacs最高。

emacs widnow間とframe間の移動

(global-set-key (kbd "C-c <left>")  'windmove-left)
(global-set-key (kbd "C-c <right>") 'windmove-right)
(global-set-key (kbd "C-c <up>")    'windmove-up)
(global-set-key (kbd "C-c <down>")  'windmove-down)
(global-set-key (kbd "C-<tab>") 'other-frame)

YaTeX関連情報リンク

[備忘録]use-packageを使ったYaTeXのインストール - Qiita