LSP и DAP для Python, Golang, Rust и Typescript/Javascript.
Обзор
В предыдущей статье я разработал конфигурацию Emacs для начинающих. В этой статье продолжим настройку LSP (Language Server Protocol) и DAP (Debug Adapter Protocol). В частности, я сосредоточусь на языках Python, Golang, Rust и Typescript.
Установка языковых серверов
Я собираюсь использовать те же языковые серверы в своей предыдущей статье о настройке Neovim LSP с использованием Lua.
питон
Для Python установим pyright.
$ npm install -g pyright
Голанг
Для Golang установим gopls.
$ GO111MODULE=on go get golang.org/x/tools/gopls@latest
Ржавчина
Для Rust воспользуемся rust_analyzer. Самый простой способ установки — скачать бинарник, скопировать в папку и добавить папку в PATH окружения.
Машинопись
Для Typescript установим typescript-language-server.
$ npm install -g typescript-language-server $ npm install -g typescript
lsp-режим и dap-режим
Я собираюсь использовать режим lsp и режим dap для Emacs.
Создайте файл с именем lang.el
в папке elisp
со следующим содержимым.
Помимо lsp-mode
, в этом пакете я установил dap-mode
, dap-node
, dap-gdb-lldb
и dap-go
.
В init.el,
требуется этот пакет.
(require 'lang) ;; base extensions
Python LSP и DAP
Создайте файл с именем lang-python.el
в папке elisp
и запросите его у init.el
.
dap-mode
использует отладку. Убедитесь, что вы установили его.
# pip install debugpy
Перезапустите Emacs, и теперь LSP и DAP должны работать.
Golang LSP и DAP
Создайте файл с именем lang-go.el
в папке elisp
и запросите его у init.el
.
dap-mode
использует копаться. Убедитесь, что вы установили его.
$ go install github.com/go-delve/delve/cmd/dlv@latest
Перезапустите Emacs, и теперь LSP и DAP должны работать.
Убедитесь, что вы выбрали «Перейти к конфигурации неоптимизированного пакета отладки» в меню dap-debug
.
Rust LSP и DAP
Создайте файл с именем lang-rust.el
в папке elisp
и запросите его у init.el
.
dap-mode
использует gdb или lldb. Убедитесь, что вы их установили.
Перезапустите Emacs, и теперь LSP и DAP должны работать.
Для отладки создайте шаблон запуска, выбрав dap-debug-edit-template.
Обратитесь к Документации по режиму DAP для более подробной информации.
Машинописный LSP и DAP
Создайте файл с именем lang-typescript.el
в папке elisp
и запросите его у init.el
.
Перезапустите Emacs, и теперь LSP и DAP должны работать.
Для отладки создайте шаблон запуска, выбрав dap-debug-edit-template.
Образец шаблона, который я использовал.
(dap-register-debug-template "hello" (list :type "node" :cwd "/Users/alpha2phi/workspace/development/alpha2phi/python-apps/debugging" :request "launch" :program "/Users/apha2phi/workspace/development/alpha2phi/python-apps/debugging/hello.js" :name "hello"))
плющ-posframe
Лично я использую ivy-posframe для отображения меню в центре кадра.
В completion.el
я добавил эти строки
(use-package ivy-posframe :config (setq ivy-posframe-display-functions-alist '((t . ivy-posframe-display-at-frame-center))) (ivy-posframe-mode 1))
Сопоставление клавиш с использованием general.el
Я также использую general.el для сопоставления некоторых общих функций с Space-XX
.
In keymappings.el
.
(use-package general :after evil :config (general-create-definer alpha2phi/leader-keys :keymaps '(normal insert visual emacs) :prefix "SPC" :global-prefix "C-SPC") (alpha2phi/leader-keys "t" '(:ignore t :which-key "theme") "tt" '(counsel-load-theme :which-key "choose theme") "p" '(:ignore t :which-key "project") "pp" '(counsel-projectile-switch-project :which-key "choose project") "pc" '(projectile-command-map :which-key "choose action") "f" '(:ignore t :which-key "find") "ff" '(counsel-fzf :which-key "fuzzy find") "fx" '(counsel-M-x :which-key "M-x") "g" '(:ignore t :which-key "git") "gs" '(magit-status :which-key "git status") "d" '(:ignore t :which-key "debug") "dd" '(dap-debug :which-key "start debugging") "dba" '(dap-breakpoint-add :which-key "add breakpoint") "dbd" '(dap-breakpoint-delete :which-key "delete breakpoint") "dr" '(dap-ui-repl :which-key "repl") "du" '(dap-ui-mode :which-key "ui") )) (provide 'keymappings)
Это позволяет мне легко переключаться между разными проектами, используя снаряд (SPC-p-p
), выполнять нечеткий поиск файлов (SPC-f-f
) и отладку (SPC-d-d
).
Резюме
Изучать и взламывать Emacs не так уж и просто, но это весело, когда вы заставите его работать так, как вы хотите.
Точечные файлы, которые я использовал, можно найти в этом репозитории.
Другие статьи, которые могут быть вам интересны.
использованная литература
Если вы еще не являетесь участником Medium и хотите им стать, нажмите здесь. (Часть вашей абонентской платы будет использована для поддержки alpha2phi.)