GNU Emacs 㧠VS Code ç¸å½ã®ã³ã¼ãã»ãããã°æ¯æ´æ©è½ãè¨å®ãã (2) â Dape
ç¶ã
GNU Emacs 㧠VS Code ç¸å½ã®ã³ã¼ãã»ãããã°æ¯æ´æ©è½ãè¨å®ãã (1) â Eglot ããã®ç¶ãã§ãã
Dape
ã¤ã³ã¹ãã¼ã«
Emacs ã®ããã±ã¼ã¸ ããã¼ã¸ã£ã¼ã§ã¤ã³ã¹ãã¼ã«ã§ãã¾ãã
M-x package-install RET dape RET
ãã¦ã¹ã§ãã¬ã¼ã¯ãã¤ã³ããã»ããã§ããããã«ãã¦ããã¾ããã¾ã repeat-mode
ãæå¹ã«ãã¾ãã
~/.emacs.d/init.el
(use-package dape :bind-keymap ("C-x C-a" . dape-global-map) :config ;; Global bindings for setting breakpoints with mouse (dape-breakpoint-global-mode)) ;; Enable repeat mode for more ergonomic `dape' use (use-package repeat :config (repeat-mode))
DAP ã¢ããã¿ã¼
ãµãã¼ãããã¦ãã DAP ã¢ããã¿ã¼ã®æ å ±ã¯ Supported debug adapters ã«ããã¾ãã
C/C++
- GDB >=14.1
- arm64 macOS ããµãã¼ããã¦ããªã
- codelldb
- cpptools
- ã©ã¤ã»ã³ã¹ ãå¾®å¦
- lldb-dap
ããã§ã¯ codelldb 㨠lldb-dap ãé¸ã³ã¾ãã
codelldb
VS Code ã VSCodium ã® Extensions ãã CodeLLDB ãã¤ã³ã¹ãã¼ã«ãã¦ãªã³ã¯ãå¼µãæ¹ãã¢ãããã¼ãã macOS ãåºãã¦ããã»ãã¥ãªãã¤è¦åã¸ã®å¯¾å¿ã容æã ã¨æãã¾ãã
% cd ~/.emacs.d/debug-adapters/codelldb % ln -s ../../../.vscode-oss/extensions/vadimcn.vscode-lldb-1.11.0-universal
lldb-dap
macOS ã® the command line developer tools ã«ä»å±ã®ãã®ã使ãã¾ãããã ãããã©ã«ã㧠$PATH
ãéã£ã¦ããªãã®ã§éã£ã¦ãããã£ã¬ã¯ããªã¼ãããªã³ã¯ãå¼µã£ã¦ããã¾ãã
% cd ~/.local/bin % ln -s "$(xcrun --find lldb-dap)" .
Python
Homebrew ã«ã¯ debugpy ãè¦å½ãããªãã®ã¨ã¢ã¸ã¥ã¼ã«ã¨ãã¦ä½¿ç¨ããããã pipx
ã使ããªãã®ã§ pip
ã§ã¤ã³ã¹ãã¼ã«ãããããªãããã§ãããã ã PEP 668 and virtual environments ã«å¾ã "virtual environment" ã使ãã¾ãã 12. Virtual Environments and Packages ã VS Code ã® Create a virtual environment ãåèã«ãã¤ã¤ãã¨ãã°
% python3 -m venv ~/Developer/python/tutorial/.venv % source ~/Developer/python/tutorial/.venv/bin/activate (.venv) % python3 -m pip install debugpy (.venv) % deactivate %
Python venv ã§ã® Emacs ã®èµ·å
debugpy ã "system-wide" ã«ã¤ã³ã¹ãã¼ã«ããã¦ããç°å¢ãªã Emacs.app ããã¹ã¯ãããããèµ·åãã¦ãããã¯ãã§ãã "virtual environment" ã®å ´å㯠source activate
ãã shell ãã emacs
ã èµ·åããªã㨠debugpy ãèªèãã¦ããã¾ãã1ã
% source ~/Developer/python/tutorial/.venv/bin/activate (.venv) % emacs &
使ãæ¹ã®è¦ç¹
M-x dape TAB TAB ã§ã³ãã³ãã®ä¸è¦§ãåºã¾ãã C-h f commandname ã§ã³ãã³ãã®èª¬æãåºã¾ãã REPL ã¦ã¤ã³ãã¦ã®éå§è¡ã«ã³ãã³ãã®ç°¡åãªèª¬æã表示ããã¾ãã
M-x | REPL | C-x C-a | 説æ |
---|---|---|---|
dape-info | i | Dape info ã¦ã¤ã³ãã¦ã表示/é表示 | |
dape-repl | R | REPL ã¦ã¤ã³ãã¦ã表示/ã«ç§»å |
ãã¬ã¼ã¯ãã¤ã³ã
ãã¬ã¼ã¯ãã¤ã³ãã¯ãã¤ã§ãã»ãã/ãªã»ããã§ãã¾ããã½ã¼ã¹ ãã¡ã¤ã«ã®å¯¾è±¡ã®è¡ã«ã«ã¼ã½ã«ããã£ã¦ãã C-x C-a b
ã¨ã¿ã¤ããã¾ããã¾ãã¯ãã¦ã¹ãæå¹ã®å ´åãã®è¡ã®å·¦ç«¯ã®ã¦ã¤ã³ãã¦ã®ã¸ãã§ã¯ãªãã¯ãã¾ããããã¨ãã®ããªã« â ãã¤ãã¾ãããªã C/C++ ã§ã¯ -g
ãªãã·ã§ã³ãä»ãã¦ã³ã³ãã¤ã«ãã¦ãããªãã¨ãã¬ã¼ã¯ãã¾ããã
M-x | REPL | C-x C-a | 説æ |
---|---|---|---|
dape-breakpoint-toggle | b | ãã¬ã¼ã¯ãã¤ã³ãã®è¨å®ã»åé¤ | |
dape-breakpoint-remove-all | B | ãã¹ã¦ã®ãã¬ã¼ã¯ãã¤ã³ãã®åé¤ | |
dape-breakpoint-hits | h | ããã ã«ã¦ã³ã ãã¬ã¼ã¯ãã¤ã³ã | |
dape-breakpoint-expression | e | æ¡ä»¶ã¤ããã¬ã¼ã¯ãã¤ã³ã | |
dape-breakpoint-log | l | (ä¸æã§ã¯ãªã) 該å½è¡ã§ã¡ãã»ã¼ã¸åºå |
ãããã° ã»ãã·ã§ã³
対象ã®ã½ã¼ã¹ ãã¡ã¤ã«ã®ã¦ã£ã³ãã¦ã§ M-x dape ã¾ã㯠C-x C-a d ãå
¥åããã¨ãã ãããã¡ã¼ã« Run adapter:
ã¨ããã³ãããåºã¾ãã <tab>/M-C-i ã«ããå¤æ° dape-configs
ã§å®ç¾©ããã¦ãããã®ã®ãã¡ã½ã¼ã¹ ãã¡ã¤ã«ã®ã¢ã¼ãã«ãããããè£å®åè£ã表示ããã¾ãããã¨ãã° codelldb 㨠lldb-dap ãé©åã«ã¤ã³ã¹ãã¼ã«ããã¦ã㦠C/C++ ã¢ã¼ãã§ãã¡ã¤ã«ãéãã¦ããã¨ãã¯
Click on a completion to select it. In this buffer, type RET to select the completion near point. 2 possible completions: codelldb-cc lldb-dap
ã®ããã«è¡¨ç¤ºããã¾ããå¤æ° dape-configs
ã®å
容ã¨èª¬æ㯠C-h v dape-configs ã§èªãã¾ãã python
ã python3
ã¸ã®ãªã³ã¯ã«ãªã£ã¦ããªãç°å¢ã§ã¯è£å®ãå¹ãã¾ããã debugpy command "python3" ã¨æ示çã«å
¥åããå¿
è¦ãããã¾ãã
å¿
è¦ã«å¿ããªãã·ã§ã³ãå
¥åãã¾ãããã¨ãã° C/C++ ã§ã³ã³ãã¤ã«ããããã¡ã¤ã«ãããã©ã«ãã® a.out
ããå¤æ´ãã¦ããå ´å㯠:program programname ã¨å
¥åãã¾ããã·ã³ããªã㯠ãªã³ã¯çµç±ã§éãã¦ããå ´å㯠prefix-local
/prefix-remote
ã調ç¯ããªãã¨ãã¬ã¼ã¯ãã¤ã³ãã§åæ¢ããªããã¨ãããã¾ãã debugpy
ã«å¯¾ãã¦ã¯ :justMyCode t
ã¨å
¥åããæ¹ãããããããã¾ãããã§ãªãã¨å®è¡ããããã° ã¢ã¸ã¥ã¼ã«ã«ã¾ã§ç«ã¡å
¥ãã¨ãã VS Code ã®ããã©ã«ãã¨ç°ãªãæåã«å½æããããããã¾ããã C-c C-k ã§å
é ã®ã³ã³ãã£ã°åã ããæ®ããªãã·ã§ã³ãã¯ãªã¢ã¼ãããã¨ãã§ãã¾ãã M-n/M-p ã§å
¥åå±¥æ´ããã©ãã¾ãã
å
é ã« :
ãã¤ããªãã·ã§ã³ã¯å DAP ã¢ããã¿ã¼ã«æ¸¡ããã®ã§ãã
- codelldb: Starting a New Debug Session
- lldb-dap: Configuration Settings Reference
- debugpy: Debug configuration settings
DAP ãããã¼ã®ãªãã·ã§ã³ã®å¤ã¯ json-parse-string 㧠Elisp ã®è¡¨ç¾ã«å¤æããå¿
è¦ãããã¾ãããã ã true
㯠t
ã false
㯠nil
ã§ãã
*scratch*
(json-parse-string "[null, \"log.txt\", null]") ;; C-j [:null "log.txt" :null]
M-x | REPL | C-x C-a | 説æ |
---|---|---|---|
dape | debug | d | ãããã°ã®éå§ (ãªãã·ã§ã³å ¥åãã) |
dape-restart | restart | r | ååã¨åããªãã·ã§ã³ã§éå§ |
dape-kill | kill | ãããã° ã»ãã·ã§ã³ã®å¼·å¶çµäº | |
dape-disconnect-quit | disconnect | D | ãããã°å¯¾è±¡ã®åä½ã¯ãã®ã¾ã¾ã¢ããã¿ã¼ãå¼·å¶çµäº |
dape-quit | quit | q | Dape ã®çµäº |
å®è¡å¶å¾¡
M-x | REPL | C-x C-a | 説æ |
---|---|---|---|
dape-pause | pause | p | å®è¡ã®ä¸æ |
dape-continue | continue | c | 次ã®ãã¬ã¼ã¯ãã¤ã³ãã¾ã§ç¶ç¶ |
dape-step-in | step | s | ã¹ãããå®è¡ |
dape-next | next | n | ãã¯ã¹ãå®è¡ (é¢æ°å é¨ã«ç«ã¡å ¥ããªã) |
dape-step-out | out | o | ç¾å¨ã®é¢æ°ãã return ããã¾ã§ç¶ç¶ |
dape-stack-select-up | up | < | é¢æ°å¼ã³åºãã®ãã¹ãã®ä¸ã«ç§»å |
dape-stack-select-down | down | > | é¢æ°å¼ã³åºãã®ãã¹ãã®ä¸ã«ç§»å |
dape-select-stack | S | é¢æ°å¼ã³åºãã®ãã¹ãã®é¸æ移å | |
dape-select-thread | t | ã¹ã¬ããã®é¸æ |
å¤ã®è¡¨ç¤º
M-x | REPL | C-x C-a | 説æ |
---|---|---|---|
dape-watch-dwim | w | ã¦ã©ããããå¤æ°ã®è¨å® | |
dape-read-memory | m | ã¡ã¢ãªã¼å 容ã®è¡¨ç¤º | |
dape-evaluate-expression | x | å¼ã®è©ä¾¡ |
è¨å®
Configuration ãåç §ãã¦ä¾¿å©ãããªãã®ãè¨å®ãã¾ãã
ã¢ããã¿ã¼ã®æ§æã®è¦å®å¤
M-x dape ã®ã¨ãã«ãã ãããã¡ã¼ã«å ¥åããã³ã³ãã£ã°ã®ããã©ã«ãå¤ãè¨å®ããæ¹æ³ã¯äºéãããã¾ãã
å¤æ° dape-configs
C-h v dape-configs ã§èª¬æã¨å
容ã表示ããã¾ããå
¨ä½ã¨ãã¦ã¯ alist (association list) ã¨ãããã¼ã¨å¤ã®çµã¿ã®ãªã¹ãã«ãªã£ã¦ãã¾ãããã¼ã¯ codelldb-cc
, debugpy
ãªã©ã®ã³ã³ãã£ã°åã§ããå¤ã¯ plist (property list) ã¨ããããããã£ã¼åã¨ããããã£ã¼å¤ã®çµã¿ã®ãªã¹ãã«ãªã£ã¦ãã¾ãã
ä¸è¨ã®è¨å®ã§ã¯ VS Code ã® The C/C++ extension ã®ããã©ã«ãã«ä¼¼ãã¦ãã¾ãã alist-get
㧠alist ã®å¤ (ããã§ã¯ plist) ãåå¾ã plist-put
ã§ããããã£ã¼åã¨ããããã£ã¼å¤ãã»ãããã¦ãã¾ãããã§ã«ååã®ããããã£ã¼ãåå¨ãã¦ããã¨ãã¯å¤ãæ´æ°ãããã§ãªãã¨ãã¯é
ç®ã追å ããã¾ãã
~/.emacs.d/init.el:
(use-package dape ;; ... :config ;; ... ;; Override the default configs. See `C-h v dape-configs`. (let ((program-file (lambda () (file-name-sans-extension buffer-file-name))) (compile-cmd (lambda () (concat "clang++ -std=c++17 -g -o " (file-name-sans-extension buffer-file-name) " " buffer-file-name))) (dape-config-put (lambda (config-name new-config) (let ((config (alist-get config-name dape-configs))) (cl-loop for (p v) on new-config by 'cddr do (plist-put config p v)))))) (funcall dape-config-put 'codelldb-cc (list 'compile compile-cmd :program program-file)) (funcall dape-config-put 'lldb-dap (list 'compile compile-cmd :program program-file)) (funcall dape-config-put 'debugpy (list :justMyCode t)))
let
ã§ãã¼ã«ã«å¤æ°ã« lambda
ã代å
¥ãã¦ããã®ã¯ Emacs ã»ãã·ã§ã³å
¨ä½ã«å®ç¾©ããããªãããã§ãã
å¤æ° dape-command
ããã¸ã§ã¯ãã®ã«ã¼ã ãã£ã¬ã¯ããªã¼ã« .dir-locals.el
ã¨ãããã¡ã¤ã«ãããããã§è¨å®ãã¾ããããã¸ã§ã¯ãé
ä¸ã«ã®ã¿æå¹ã§ãã
.dir-locals.el
((c++-mode . ((dape-command . (lldb-dap :program "helloworld")))))
è¨å®å¤ãããã°ã©ããã«ã«çæãããã¨ã㯠eval
ã使ãã¾ãã
.dir-locals.el
((c++-mode . ((eval . (setq-local dape-command `(lldb-dap :program ,(file-name-base buffer-file-name)))))))
ãã ã Emacs ãå®å
¨ã§ãªããããããªãæ¨ãåãåããã¦ãã¾ãã !
ã§çããã¨æ¬¡å以éã®åãåãããæå¶ã§ãã¾ãããã®ãã¨ã¯ ~/.emacs.d/init.el
ã«è¨é²ããã¾ãã
ä»é²: æ¨æºå ¥åºåãªãã¤ã¬ã¯ã·ã§ã³
codelldb
:stdio ["in.txt" :null :null]
lldb-dap
(lldb) settings list target.input-path target.input-path -- The file/path to be used by the executable program for reading its standard input. (lldb) settings list target.output-path target.output-path -- The file/path to be used by the executable program for writing its standard output. (lldb) settings list target.error-path target.error-path -- The file/path to be used by the executable program for writing its standard error.
:preRunCommands ["settings set target.input-path in.txt"]
debugpy
Command line arguments passed to the program. For string type arguments, it will pass through the shell as is, and therefore all shell variable expansions will apply. But for the array type, the values will be shell-escaped.
:args "arg1 arg2 arg3 <in.txt >out.txt 2>err.txt"
GNU Emacs 㧠VS Code ç¸å½ã®ã³ã¼ãã»ãããã°æ¯æ´æ©è½ãè¨å®ãã (1) â Eglot
æ¦è¦
GNU Emacs >=29.1 㧠VS Code ç¸å½ã®ã³ã¼ãã»ãããã°æ¯æ´æ©è½ãè¨å®ãã¾ãã VS Code ã¯ã³ã¼ãæ¯æ´æ©è½ã« Language Server Protocol (LSP) ããããã°æ¯æ´æ©è½ã« Debug Adapter Protocol (DAP) ã使ç¨ãã¦ãã¾ãã Emacs ã§ã LSP/DAP ã¯ã©ã¤ã¢ã³ããéçºããã¦ãã¾ãã
ããã§ã¯æ¬¡ã®ããã±ã¼ã¸ã使ãã¾ããçè ãåå¿è ãã¤ãã®ãããªã®ã§ãªãã¹ãã¤ã³ã¹ãã¼ã«ãè¨å®ãæ軽ãããªãã®ãé¸ã³ã¾ãã
ä»å㯠Eglot ã«ã¤ãã¦æ¸ãã¾ãã
å ·ä½ä¾ã®ç°å¢
ä»ã®ç°å¢ã®æ¹ã¯é©å®èªã¿æ¿ãã¦ãã ããã
- macOS Sequoia 15.0.1 (arm64)
- the command line developer tools (
xcode-select --install
) - Homebrew
- GNU Emacs 29.4 (
brew install --cask emacs
) - C/C++
- the command line developer tools ä»å±ã® llvm
- Python
- Python 3.13.0 (
brew install python
)
- Python 3.13.0 (
Eglot
LSP ãµã¼ãã¼ã¨ã®é£æºã«ããä¸è¨ã®ãããªã³ã¼ãæ¯æ´æ©è½ãå©ç¨ã§ããã¨ã®ãã¨ã
- ã³ã¼ãè£å®
- é¢æ°ã»ã¯ã©ã¹ã®å®ç¾©ç®æã¸ã®ç§»å
- èå¥åã®èª¬æ表示
- ãªãã¡ã¯ã¿ãªã³ã° (ã½ã¼ã¹ ã³ã¼ãæ´ç)
- å³æ診æ (ææ³ä¸ã®èª¤ããªã©)
ã¤ã³ã¹ãã¼ã«
Emacs 29 ã«å èµ (built-in) ããã¦ãã¾ããä¸å ·åä¿®æ£ãç®å½ã¦ã« ELPA çã使ãã¾ãã
M-x package-install RET eglot RET
LSP ãµã¼ãã¼
Eglot ã§è¨å®ãã¿ã® LSP ãµã¼ãã¼ã®æ å ±ã Connecting to a server ã«ããã¾ãã
C/C++ ç¨ LSP ãµã¼ãã¼
Eglot 1.17 ã«è¨å®ãã¿ã® C/C++ ç¨ LSP ãµã¼ãã¼ã¯æ¬¡ã®ã¨ããã§ãã
ããã§ã¯ clangd ãé¸ã³ã¾ãã macOS ã® the command line developer tools ã«ä»å±ãã¦ãã¾ãã Homebrew ã® llvm ããã±ã¼ã¸ã«å«ã¾ãã¦ãããã®ã使ããã¨ãã§ãã¾ãã ccls 㯠Homebrew ã«ããã¾ãã
Python ç¨ LSP ãµã¼ãã¼
Eglot 1.17 ã«è¨å®ãã¿ã® Python ç¨ LSP ãµã¼ãã¼ã¯æ¬¡ã®ã¨ããã§ãã
- python-lsp-server (pylsp)
- python-language-server ããã®ãã©ã¼ã¯
- python-language-server (pyls)
- ç¾å¨ã¡ã³ããã³ã¹ããã¦ããªã
- pyright
- jedi-language-server
- ruff-lsp
ãã®ã»ã次ã®ãã®ãããã¾ãã
- basedpyright
- pyright ããã®ãã©ã¼ã¯
- ç»é²æ¹æ³: https://docs.basedpyright.com/latest/installation/ides/#eglot
- anakin-language-server
python-lsp-server, pyright, ruff-lsp, basedpyright 㯠Homebrew ã«ããã¾ããããã§ã¯ python-lsp-server (pylsp) 㨠basedpyright ãé¸ã³ã¾ãã
% brew install python-lsp-server basedpyright
python-lsp-server ã¯ãã©ã°ã¤ã³ã®ãã¨ãèæ
®ãã㨠pipx
ã§ã¤ã³ã¹ãã¼ã«ããã»ããããããããã¾ãã (詳細ã¯æªç¢ºèª) ã
% pipx install python-lsp-server % source ~/.local/pipx/venvs/python-lsp-server/bin/activate (python-lsp-server) % python -m pip install <plug-in> (python-lsp-server) % deactivate
Eglot ãè£å¼·ããããã±ã¼ã¸
- ã³ã¼ãè£å®
- ã³ã¼ãæç
- ããã¥ã¡ã³ã表示
- markdown-mode
- M-x package-install RET markdown-mode RET
- markdown-mode
ã³ã¼ãè£å®ã«ã¤ãã¦ããã§ã¯ Eglot ã®ããã¥ã¡ã³ãã«ä¸ä¾ã¨ãã¦æãããã¦ãã Company ãé¸ã³ã¾ãã
å®è¡
LSP ãµã¼ãã¼ãç¨æã§ãã¦ããã°é©å½ãªã½ã¼ã¹ ãã¡ã¤ã« (ããã§ã®ä¾ã§ã¯ .c
, .cpp
, .py
) ãéã M-x eglot RET
ã¨ã¿ã¤ããã㨠Eglot ãæ©è½ãå§ããã¯ãã§ããä¸æ¦ Eglot ãéå§ããã¨å½è©²ããã¸ã§ã¯ãé
ä¸ã®åé¡ã®ãã¡ã¤ã«ã管çããã®ã§é½åº¦ M-x eglot
ããå¿
è¦ã¯ããã¾ããã
使ãæ¹ã®è¦ç¹
ã³ã¼ãè£å®
Emacs çµã¿è¾¼ã¿
M-x | ãã¼ |
---|---|
complete-symbol | C-M-i |
Company
M-x company-mode ã§æå¹ã«ãã¦ã¿ã¤ããããæååããããããã¨è£å®åè£ãããã ã¢ãããã¾ããæåã§è¡¨ç¤ºãããã«ã¯ M-x company-complete ã
ãã¼ | åä½ |
---|---|
C-n/C-p | åè£ã®é¸æ移å |
<return> | è£å®ç¢ºå® |
<tab> | åè£ãå¯è½ãªéãçµãè¾¼ã |
|
åè£å ãæ¤ç´¢ |
|
ãã£ã«ã¿ã¼ (ãã°ã«) |
|
10 çªç®ã¾ã§ã®åè£ã®ä¸ããç´æ¥é¸æ |
<f1> | é¸æä½ç½®ã®åè£ã®ããã¥ã¡ã³ã表示 |
|
é¸æä½ç½®ã®åè£ã®ã½ã¼ã¹è¡¨ç¤º |
å½æ¹ã®ç°å¢ã¨å©ç¨ç¶æ³ã§ã¯ C-w 㯠No location available
ã¨åºã¦å¹æãè¦ããã¾ããã§ããã
èå¥åã®èª¬æ表示
M-x | ãã¼ |
---|---|
eldoc-doc-buffer | C-h . |
é¢æ°ã»ã¯ã©ã¹ã®å®ç¾©ç®æã¸ã®ç§»å
M-x | ãã¼ |
---|---|
xref-find-definitions | M-. |
xref-go-back | M-, |
imenu | M-g i |
Eglot ã®ã³ãã³ã
詳細㯠3.3 Eglot Commands ãªã©ãåç §ã
èå¥åã®ãªãã¼ã
è¨èªè§£æã«ãã£ã¦ããã®ã§ç½®æã«æ¯ã¹ç¢ºå®ã§ãã
M-x eglot-rename
ãã©ã¼ããã
M-x eglot-format
ãªãã¡ã¯ã¿ãªã³ã°
使ãè¾¼ãã§ããªããã¨ããã詳細ã¯ææ¡ãã¦ãã¾ããã
M-x eglot-code-actions
inlay-hints
é¢æ°ã®ä»®å¼æ°ã C++ 㧠auto
å®ç¾©ããå¤æ°ã®åãªã©ãã³ã¼ãä¸ã«åãè¾¼ã¾ãããã®ããã«è¡¨ç¤ºãã¾ãã python-lsp-server ã§ã¯ãµãã¼ãããã¦ããªãããã§ãã
M-x eglot-inlay-hints-mode ã§ãã°ã«ããã¯ãã§ããæåãç´æçã§ãªãã§ããé表示ã«ããå¾ on ã«ãã¦ãã½ã¼ã¹ ã³ã¼ãã«å¤æ´ããªãã¨å表示ãããªãã§ã (ãã°?) ã
è¨å®
å¤ãã®å ´åã¨ãã«è¨å®ããªãã¦ã使ãå§ãããã¨ãã§ãã¾ããçè
㯠~/.emacs.d/init.el
ã«æ¬¡ã®ããã«æ¸ãã¾ããã use-package ãæ´»ç¨ãã¦ãã¾ãã
~/.emacs.d/init.el
(use-package eglot :init ;; for Emacs 29.4 Built-In 1.12.29 (setq warning-minimum-level :error) :config (add-to-list 'eglot-server-programs `((python-mode python-ts-mode) . ,(eglot-alternatives '("pylsp" ("basedpyright-langserver" "--stdio"))))) :bind (:map eglot-mode-map ("C-c r" . 'eglot-rename) ("C-c f" . 'eglot-format) ("C-c a" . 'eglot-code-actions) ("C-c o" . 'eglot-code-action-organize-imports) ("C-c q" . 'eglot-code-action-quickfix) ("C-c e" . 'eglot-code-action-extract) ("C-c i" . 'eglot-code-action-inline) ("C-c w" . 'eglot-code-action-rewrite) ("C-c m" . 'eglot-inlay-hints-mode) ("C-c h" . 'eldoc)) :hook ((c-mode c++-mode) . eglot-ensure)) (use-package company :bind ("C-c SPC" . 'company-complete) :hook (eglot-managed-mode))
- Emacs 29.4 Built-In 1.12.29 ã§ã¯ Warning ã®ã¦ã¤ã³ãã¦ããã³ãã³éãã®ã§
warning-minimum-level
ã調ç¯ãã¦ãã¾ãã ELPA ææ°çã«ã¯ä¸è¦ã§ãã .py
ãã¡ã¤ã«ãéã M-x eglot ãå®è¡ãã㨠pylsp 㨠basedpyright ããé¸ã¹ãããã«ãªãã¾ã (Variable:eglot-server-programs
) ã <tab> ã§è£å®ãå¹ãã¾ãã- Eglot é¢é£ã³ãã³ãã«ãã¼ããã¤ã³ããã¾ã (
eglot-mode-map
)ã .c
/.cpp
ãã¡ã¤ã«ãéãã ã㧠Eglot ãæå¹ã«ãªãã¾ã (2.2 Starting Eglot) ã
LSP ãµã¼ãã¼ã®è©³ç´°è¨å®
詳細ã確èªãã¦ããªãã®ã§åç §å ã示ãã«çãã¾ãã
Eglot å´ããã® LSP ãµã¼ãã¼ã®è¨å®
LSP ãµã¼ãã¼å´ã§ã®è¨å®
è¨å®ãã¡ã¤ã«ãèªã¿è¾¼ã LSP ãµã¼ãã¼ãããã¾ããããã§åãä¸ãã LSP ãµã¼ãã¼ã¯ãããã該å½ããããã§ããå½ç¶ VS Code ãªã©ã®ä»ã® LSP ã¯ã©ã¤ã¢ã³ãã¨è¨å®ãå ±æãããã¨ã«ãªãã¾ãã
- clangd: Configuration
- python-lsp-server: Configuration
- basedpyright: Config files
ç¶ã
次å 㯠DAP ã¯ã©ã¤ã¢ã³ãã® Dape ã«ã¤ãã¦æ¸ãã¾ãã