#author("2020-08-05T11:37:13+00:00","","") #topicpath /////////////////////////////////////////////////////////////////////////////// * 目次 [#ca2176d1] #contents(); //////////////////////////////////////////////////////////////////////////////// * lsp-mode [#t8d40694] //============================================================================== ** 環境構築 [#ce2f6586] + パッケージをインストールする apt-get install clang-tools-7 clang-format + clang-tools のパスを通す export PATH=/usr/lib/llvm-7/bin:${PATH} + emacs 向けパッケージの設定 -- package-install を使う場合 M-x package-install lsp-mode lsp-ui company-lsp dash-el elpa-f s-el elpa-markdown-mode dash-el --- これとは別途、パッケージが存在しない ht.el を、下記と同様に取得する。 -- 個別に lisp を取ってくる場合 +++ 以下のリポジトリを取得する: |~package name |~package repository URI |~remark | |lsp-mode |http://github.com/emacs-lsp/lsp-mode.git |各種LSPの言語モードを実装している。 C/C++ の設定もここに含まれる。 | |lsp-ui |https://github.com/emacs-lsp/lsp-ui.git |補完を担うcompany-modeのLSP向け設定 | |company-lsp |https://github.com/tigersoldier/company-lsp.git |ドキュメントの表示など各種アクションを実装している。 | |elpa |https://git.savannah.gnu.org/git/emacs/elpa.git |elpa/packages/cl-generic 等を使用する為に取得する。サイズが大きいので注意。 | |ht |https://github.com/Wilfred/ht.el.git |debian9のパッケージには存在しない。lsp-mode の動作に必要 | |dash |https://github.com/magnars/dash.el | | |f |https://github.com/rejeep/f.el | | |s |https://github.com/magnars/s.el | | |markdown-mode |https://github.com/jrblevin/markdown-mode.git | | |flycheck-mode |https://github.com/flycheck/flycheck | | |projectile |https://github.com/bbatsov/projectile | | ~ +++ 上記各リポジトリを tag で checkout する |~package name |~tag |~remark | |lsp-mode |refs/tags/7.0 | | |lsp-ui |refs/tags/7.0 | | |company-lsp |refs/tags/2.1.0 | | |elpa |(HEAD) |tagは試行中。動かなかったら検討する。 | ~ +++ 上記各リポジトリのファイルが emacs から見える場所に配置する。~ ${HOME}/.emacs.d/init.el への記述例 ;;; ~/.emacs/init.el ;;; ~/.emacs.d/site-lisp 配下に各リポジトリを配置した場合の設定例 (setq load-path (cons (expand-file-name "~/.emacs.d/site-lisp/dash") load-path)) ; dash (setq load-path (cons (expand-file-name "~/.emacs.d/site-lisp/elpa/packages/cl-generic") load-path)) ; cl-generic (setq load-path (cons (expand-file-name "~/.emacs.d/site-lisp/ht") load-path)) ; ht.el (setq load-path (cons (expand-file-name "~/.emacs.d/site-lisp/elpa/packages/hydra") load-path)) ; lv.el (setq load-path (cons (expand-file-name "~/.emacs.d/site-lisp/elpa/packages/spinner") load-path)) ; spinner.el (setq load-path (cons (expand-file-name "~/.emacs.d/site-lisp/elpa/packages/company") load-path)) ; company.el (setq load-path (cons (expand-file-name "~/.emacs.d/site-lisp/markdown-mode") load-path)) ; markdown-mode (setq load-path (cons (expand-file-name "~/.emacs.d/site-lisp/flycheck") load-path)) ; flycheck (setq load-path (cons (expand-file-name "~/.emacs.d/site-lisp/projectile") load-path)) ; projectile (require 'projectile) (setq load-path (cons (expand-file-name "~/.emacs.d/site-lisp/lsp-mode") load-path)) (require 'lsp-mode) (setq load-path (cons (expand-file-name "~/.emacs.d/site-lisp/lsp-ui") load-path)) (require 'lsp-ui) (setq load-path (cons (expand-file-name "~/.emacs.d/site-lisp/company-lsp") load-path)) (require 'company-lsp) ~ + 設定を記載する ;;; lsp-mode ;; https://qiita.com/false-git@github/items/3cb6ebd7f4d6f77acc54 (setq lsp-clients-clangd-executable "/usr/bin/clangd-7") ;; hooks (add-hook 'c++-mode-hook 'company-mode) ; 補完用 (add-hook 'c-mode-hook 'company-mode) ; 補完用 (add-hook 'c++-mode-hook 'flycheck-mode) ; チェック用 (add-hook 'c-mode-hook 'flycheck-mode) ; チェック用 (add-hook 'c++-mode-hook #'lsp) (add-hook 'c-mode-hook #'lsp) (with-eval-after-load 'lsp-mode (custom-set-variables '(lsp-prefer-flymake nil)) ; flycheckを優先する (define-key lsp-mode-map (kbd "C-c C-d") 'lsp-describe-thing-at-point) (define-key lsp-mode-map (kbd "C-c C-e") 'lsp-workspace-restart) (define-key lsp-mode-map (kbd "C-c C-i") 'lsp-format-buffer) (define-key lsp-mode-map (kbd "C-c C-n") 'lsp-rename) (define-key lsp-mode-map (kbd "C-c C-r") 'lsp-execute-code-action) ) //============================================================================== ** 参考 URI [#o4291b31] - [[EmacsのC/C++開発環境を整える [lsp-mode, ccls] | | meda-log>https://blog.medalotte.net/archives/473]] - f.el -- [[モダンなファイル、ディレクトリを扱うAPIのf-elのインストールと設定>https://emacs.tsutomuonoda.com/f-el/]] -- [[Emacsのモダンなライブラリ4+1選 (2013年版)>https://qiita.com/pogin503/items/01005402dc7cfd375b55]] - ht.el -- [[Emacsのハッシュテーブルライブラリht-elのインストールと設定>https://emacs.tsutomuonoda.com/ht-el/]] -- [[Emacsのモダンなライブラリ4+1選 (2013年版)>https://qiita.com/pogin503/items/01005402dc7cfd375b55]] -- [[ht.el : 【Rubyist歓喜】ハッシュテーブルを超絶使いやすくするライブラリ>http://emacs.rubikitch.com/ht/]] - markdown-mode -- [[markdown-modeで“GitHub Flavored Markdown”を実現する>https://qiita.com/ybiquitous/items/34a4c3cb33f26136f670]]