概要
Prerequisites
- Ubuntu 22.04 (Native or WSL環境)
- Ubuntu 22.04(WSL) に OpenJDK 17 をインストール
- Ubuntu 22.04 に Maven を install
設定方法
;---- lsp-mode ---- (when (locate-library "lsp-mode") (require 'lsp-mode) (global-set-key [?\C-,] 'xref-go-back) ; (setq lsp-keymap-prefix "C-c l") ; (global-set-key "\M-t" 'lsp-goto-implementation) ; (global-set-key "\M-r" 'lsp-find-references) ; (global-set-key "\M-s" 'lsp-find-definition) (global-set-key "\C-cli" 'lsp-goto-implementation ) (global-set-key "\C-cld" 'lsp-find-definition ) (global-set-key "\C-clr" 'lsp-find-references ) (global-set-key "\C-clh" 'lsp-describe-thing-at-point) ; (setq lsp-enable-symbol-highlighting t) ; 1. Symbol highlighting ; (setq lsp-ui-doc-enable t) ; 2. lsp-ui-doc - on hover dialogs. * disable via ; (setq lsp-ui-doc-show-with-cursor nil) ; * disable cursor hover (keep mouse hover) ; (setq lsp-ui-doc-show-with-mouse nil) ; * disable mouse hover (keep cursor hover) ; (setq lsp-lens-enable t) ; 3. Lenses ; (setq lsp-headerline-breadcrumb-enable t) ; 4. Headerline ; (setq lsp-ui-sideline-enable t) ; 5. Sideline code actions * disable whole sideline via (setq lsp-ui-sideline-show-code-actions t) ; * hide code actions ; (setq lsp-ui-sideline-enable t) ; 6. Sideline hover symbols * disable whole sideline via ; (setq lsp-modeline-code-actions-enable t) ; 7. Modeline code actions ; (setq lsp-diagnostics-provider :auto) ; 8. Flycheck (or flymake if no flycheck is present) ; (setq lsp-ui-sideline-enable t) ; 9. Sideline diagnostics * disable whole sideline via ; (setq lsp-ui-sideline-show-diagnostics t) ; * hide only errors ; (setq lsp-eldoc-enable-hover t) ; 10. Eldoc ; (setq lsp-modeline-diagnostics-enable t) ; 11. Modeline diagnostics statistics ; (setq lsp-signature-auto-activate nil) ; 12. Signature help ; '(lsp-signature-auto-activate '(:on-trigger-char :on-trigger-char));; you could manually request them via `lsp-signature-activate` ; (setq lsp-signature-render-documentation t); 13. Signature help documentation (keep the signatures) ; (setq lsp-completion-provider :capf) ; 14. Completion (company-mode) ; (setq lsp-completion-show-detail t) ; 15. Completion item detail ; (setq lsp-completion-show-kind t) ; 16. Completion item kind (when (locate-library "lsp-java") (require 'lsp-java) (add-hook 'java-mode-hook #'lsp) (when (locate-library "lsp-ui") (use-package lsp-ui) ) (when (locate-library "dap-mode") (use-package dap-mode :after lsp-mode :config (dap-auto-configure-mode)) (global-set-key "\C-cpdd" 'dap-java-debug) (global-set-key "\C-cpdm" 'dap-java-debug-test-method) (global-set-key "\C-cpdc" 'dap-java-debug-test-class ) (global-set-key "\C-cprm" 'dap-java-run-test-method ) (global-set-key "\C-cprt" 'dap-java-run-last-test ) (global-set-key "\C-cprc" 'dap-java-run-test-class ) ) ) )
companyの設定
;---- company ---- (when (locate-library "company") (require 'company) (global-company-mode t) (setq company-transformers '(company-sort-by-backend-importance)) ;; sort order (setq company-idle-delay 0) ; Default is 0.5 (setq company-minimum-prefix-length 3) ; Default is 4 (setq company-selection-wrap-around t) ; Back to the top when going to the below further on the most candidate bottom (setq completion-ignore-case t) (setq company-dabbrev-downcase nil) (global-set-key (kbd "C-M-i") 'company-complete) (define-key company-active-map (kbd "C-n") 'company-select-next) ;; Select next or privious candidate with C-n, C-p (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 "C-s") 'company-filter-candidates) ;; Narrow down with C-s (define-key company-active-map (kbd "C-i") 'company-complete-selection) ;; Determin the candidate with TAB (define-key company-active-map [tab] 'company-complete-selection) ;; Determin the candidate with TAB (define-key company-active-map (kbd "C-f") 'company-complete-selection) ;; Determin the candidate with C-f (define-key emacs-lisp-mode-map (kbd "C-M-i") 'company-complete) ;; Use company-mode completion with C-M-i on various major-mode )
使用方法
Language Server のインストール
GitHub – projava17/examples のサンプルコードを例にしています。
最初にmavenのプロジェクトを開きますと、インストールする Language Server を聞かれますので、jdtlsを選択します。(TABキーを押すと自動的に入力されます) Language Serverは自動的にインストールされます。(便利!)
Language Serverのインストールが必要なのは初回のみです。
Project のインポート
その後、下記のように聞かれますので、”i” を選択します。
ForEachArraySample.java is not part of any project.
i ==> Import project root ~/project/projava17_examples/
I ==> Import project by selecting root directory interactively
. ==> Import project at current directory /home/wurly/project/projava17_examples/part-3/chapter-10-foreach/src/main/java/projava/
d ==> Do not ask again for the current project by adding ~/project/projava17_examples/ to lsp-session-folders-blacklist
D ==> Do not ask again for the current project by selecting ignore path interactively
n ==> Do nothing: ask again when opening other files from the current project
Select action:
使用方法
実際に実行するコマンドについては、前記の init.el 設定中の global-set-key を参照ください。
例えば、上記サンプルコードの場合、String にカーソルを置き、lsp-goto-implementation を実行すると、String の実装(implementation)を見ることができます。
(自動的にダウンロード、decompileされるようです。)
また、main 内で dap-java-debug を実行すると実際にプログラムが実行されます。
参考
A guide on disabling/enabling lsp-mode features - LSP Mode - LSP support for Emacs
Language Server Protocol Support for Emacs
下記の記述を見つけました。
(setq lsp-ui-sideline-show-code-actions nil)
Installation - LSP Mode - LSP support for Emacs
Language Server Protocol Support for Emacs
LSP Mode のインストール方法など
lsp-modeのlsp-keymap-prefixのデフォルト値がよくわからないという話 - CLOVER????
lsp-modeのドキュメントにKeybindingsというページがあり、主な機能に対するショートカットが定義されています。 Keybindings - LSP Mode - LSP support for Emacs こちらを使う時に入力するlsp-keymap-prefixで指定されたデフォルトのprefixがs-...
s-l
の件
その他の参考
- lsp-mode 麦汁’s Emacs Config
- Emacsでhelm-grep-agでジャンプした後xref-pop-marker-stackで履歴マーカーを辿って元に戻る設定 – ncaq
- .emacs.d/init.el at master – .emacs.d – Codeberg.org
lsp-mode のキーアサイン等
直接lspは出てきませんが、auto-completeとcompanyの比較など、参考になりました。
私はcompanyを使っていますが、このような選択肢もあるようです。