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
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
を忘れずに。
- C++環境 on Emacs - DummyWittyの日記
- company-ironyを使ってemacsでC/C++の補完 - Qiita
- auto-completeユーザのための company-modeの設定 - Qiita
- よく使うEmacs拡張 - 情弱ログ
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の設定
- Flycheck の In file included from 警告を消す - びぃえるくぅと。
- c++ - Configuring Flycheck to work with C++11 - Stack Overflow
(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 設定
自動改行をする/しない
(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)