2022年9月18日日曜日

Emacs の lsp の設定、なう(202209)

前回さらしてから、はや1年。で、再度晒してみる。誰も興味ないだろうけど。

  • 環境は、Debian(bullseye)+emacs(27.1)。consult + company。 consult になってます。まだ馴染んでません。 embark の恩恵にもあずかってません。頭がついていけない。
  • lsp は、 python, shell, html(追加) で使用。
  • lsp は lsp-mode で、python のクライアントは、lsp-pylsp。 shell は bash-language-server。 html は vscode-langservers-extracted。
  • python のクライアントは整理されたようだ。 pyrigh は、python で完結しないらしいので、私は避けている。
  • flymake ではなく、flycheck。設定は lsp まかせ。
  • 補完は、lsp 経由?の company になってる。ispell も含められてる。 ただ、バックエンドの変更が、時々うまくいかないことがある。
  • フォールディングは、origami だが、あいかわらず使えこなせない。 narrowing で間に合っているかんじ。
  • lsp-ui-peak は、一応設定してあるというレベルで、これも変らず。
  • 新しく追加したのは、sideline-mode と treemacs の2つ。
    • lsp-sideline 見易くなったと思う。
    • lsp-treemacs 画面が広くなったので、試している最中。

最近は、なべると1日1時間ぐらいしか、触ってない。 だからか、変更は少ない。

;; lsp-mode

(leaf sideline :ensure t :require t)
;; 表示を見やすくすため追加。いいかんじ。

(leaf lsp-mode :ensure t
  :url "https://github.com/emacs-lsp/lsp-mode"
  :hook (
         (python-mode-hook . lsp-deferred)
         (rust-mode-hook . lsp-deferred)    ;; rust-analyzer
         (sh-mode-hook . lsp-deferred)      ;;  yarn global add bash-language-server
         (html-mode . lsp-deferred)         ;;  yarn global add vscode-langservers-extracted
         (css-mode . lsp-deferred)         ;;
         ;; (haskell-mode . lsp-deferred)      ;;
         ;; To defer LSP server startup (and DidOpen notifications) until the buffer is visible
         ;; you can use lsp-deferred instead of lsp:
         (lsp-mode-hook . lsp-enable-which-key-integration) ;; Adds to `which-key-mode'
         (lsp-mode-hook . (lambda () (ggtags-mode -1))) ;; global との共存は止めてみる [2021-06-12]
         (lsp-mode-hook . sideline-mode)
         )
  :custom (
           ;; (add-to-list 'lsp-disabled-clients 'pyright)
           (lsp-log-io             . nil)  ;; print all messages to and from the language server to ~*lsp-log*~.
           ;; (lsp-print-performance  . nil) ;; removed in Relese 8.0
           (lsp-server-trace       . nil)  ;; Request trace mode on the language server.
           ;; general
           (lsp-auto-guess-root . t)  ;; original nil
           ;;   Automatically guess the project root using projectile/project.
           ;;   Do *not* use this setting unless you are familiar with ‘lsp-mode’
           ;;   internals and you are sure that all of your projects are
           ;;   following ‘projectile’/‘project.el’ conventions.
           (lsp-message-project-root-warning . t)

           (lsp-auto-configure . t)  ;;
           ;;   "Auto configure `lsp-mode' main features.
           ;; When set to t `lsp-mode' will auto-configure
           ;;   completion, code-actions, breadcrumb, flycheck, flymake, imenu, symbol highlighting,
           ;;   lenses, links, and so on.

           (lsp-headerline-breadcrumb-enable . t)
           ;; (lsp-headerline-breadcrumb-segments . '(project file symbols))
           ;;
           ;; (lsp-document-sync-method . 'lsp-sync-incremental)  ;; original nil  'inclemental は変更された
           ;; (lsp-document-sync-method . 2)
           ;;
           (lsp-eldoc-render-all . nil)
           ;; ミニバッファでの関数情報    nil: シグニチャだけ,   t: doc-string 本体を表示する
           ;;
           (lsp-idle-delay . 0.5)
           (lsp-response-timeout     . 5)
           (lsp-enable-snippet       . nil)     ;; original t ; yasnippet を直接使っている。
           ;; (lsp-enable-folding       . t)     ;; original t
           (lsp-enable-indentation   . t)   ;; あちこちで設定しているみたいで、気持ち悪い。
           ;;
           (lsp-completion-enable . t)  ;; original t
           (lsp-completion-provider . :capf)  ;;
           ;;
           ;; (lsp-completion-provider . :none)
           ;; (lsp-prefer-capf . t)  ;;  use ‘lsp-completion-provider’ instead.
           ;; (lsp-completion-no-cache . t)  ;;
           ;; (lsp-completion-enable-additional-text-edit  . t)
           (lsp-completion-show-detail . nil)
           ;; (lsp-completion-show-kind . nil)

           ;; (lsp-diagnostics-provider . :auto) ;; default :auto
           (lsp-diagnostics-provider . :flycheck)
           ;; Safe renamed lsp-diagnose to lsp-doctor(Relese 8.0)
           ;;
           ;; (lsp-inhibit-message . t)
           ;; (create-lockfiles . nil)
           (lsp-file-watch-threshold . nil)
           ;;
           (lsp-enable-symbol-highlighting . t)
           (lsp-signature-render-documentation . nil)
           )
  :commands (lsp lsp-deferred)
  ;; :commands (lsp)
  :config
  ;; .venv, .mypy_cache などを watch 対象から外す
  ;;    https://qiita.com/slotport/items/0e9cb2a875fe85bc1735
  (dolist (dir '(
                 "[/\\\\]\\.venv$"
                 "[/\\\\]\\.mypy_cache$"
                 "[/\\\\]__pycache__$"
                 "[/\\\\]_archives$"
                 "[/\\\\]_logs$"
                 "[/\\\\]\\.local\\'"
                 "[/\\\\]\\.cache\\'"
                 ))
    (push dir lsp-file-watch-ignored))
  ;;
  (leaf lsp-ui :ensure t
    :custom
    ;; lsp-ui-doc
    (lsp-ui-doc-enable . t)            ;; original t
    (lsp-ui-doc-header . nil)          ;; original nil
    ;; (lsp-ui-doc-use-childframe . t)
    (lsp-ui-doc-delay  . 1.5)
    (lsp-ui-doc-include-signature . t)   ;; original nil
    (lsp-ui-doc-position . 'bottom)    ;; top bottom at-point
    ;; (lsp-ui-doc-alignment . 'frame)
    ;;   "How to align the doc.
    ;;    only takes effect when `lsp-ui-doc-position' is 'top or 'bottom."
    ;; (lsp-ui-doc-border . "orange")
    ;; (lsp-ui-doc-border (face-foreground 'default))
    ;; (lsp-ui-doc-use-childframe . t)      ;; require 26
    ;;(lsp-ui-doc-max-width . 70)
    ;;(lsp-ui-doc-max-height . 20)
    (lsp-ui-doc-use-webkit . nil)
    (lsp-eldoc-enable-hover . nil)  ;; mini-buffer への表示

    ;; disable cursor hover (keep mouse hover)
    (lsp-ui-doc-show-with-cursor . t)
    ;; disable mouse hover (keep cursor hover)
    (lsp-ui-doc-show-with-mouse . nil)

    ;; lsp-ui-flycheck  ;; autoload ?
    (lsp-ui-flycheck-enable . t)

    (lsp-lens-enable . t)

    ;; lsp-ui-sideline
    ;;    Show informations of the symbols on the current line.
    ;;    It also show flycheck diagnostics and LSP code actions
    ;;
    (lsp-ui-sideline-update-mode . 'line)  ;; line or point
    (lsp-ui-sideline-enable . t)
    ;; (lsp-ui-sideline-show-symbol . t)
    ;; (lsp-ui-sideline-show-code-actions . nil) ;; default nil
    ;; (lsp-ui-sideline-code-actions-prefix . "")
    ;; (lsp-ui-sideline-show-hover . nil)  ;; default nil
    (lsp-ui-sideline-show-diagnostics . t)
    (lsp-ui-sideline-ignore-duplicate . t)
    (lsp-ui-sideline-delay . 0.5)
    ;;
    ;; lsp-ui-imenu
    ;;    "q"                       kill
    ;;    "r"                       refresh
    ;;    "<right>"                 next kind
    ;;    "<left>"                  prev kind
    ;;    "M-RET",  "<M-return>"    visit
    ;;    "RET",    "<return>"      view
    ;;
    (lsp-ui-imenu-enable . t)
    (lsp-ui-imenu-kind-position . 'top)
    ;;     (setq lsp-ui-imenu-colors `(,(face-foreground 'font-lock-keyword-face)
    ;;                                 ,(face-foreground 'font-lock-string-face)
    ;;                                 ,(face-foreground 'font-lock-constant-face)
    ;;                                 ,(face-foreground 'font-lock-variable-name-face)))
    ;;
    ;; lsp-ui-peek
    ;;   like Visual studio peak function.
    (lsp-ui-peek-enable . t)
    (lsp-ui-peek-show-directory . t)
    (lsp-ui-peek-always-show . t)
    ;; (lsp-ui-peek-list-width . 60)
    ;; (lsp-ui-peek-peek-height . 20)
    (lsp-ui-peek-fontify . 'on-demand) ;; never, on-demand, or always

    )

   ;; sideline-mode 対応
   (leaf sideline-flycheck :ensure t :require t)
   (leaf sideline-lsp :ensure t :require t
    :init
    :config
    (setq sideline-backends-right '(sideline-lsp sideline-flycheck))
   )

  :defer-config

  ;; consult 対応
  (leaf consult-lsp :ensure t :require t
    :url "https://github.com/gagbo/consult-lsp"
    :doc ""
    :after consult
    )

  ;; うまく使えていない。
  (leaf lsp-origami :ensure t :require t :disabled nil
    :url "https://github.com/emacs-lsp/lsp-origami"
    :doc "folding range の設定をorigami にやらせるということみたい。これは不要か。"
    :doc "python-mode は hideshow を require. うまく共存できる?"
    ;; :hook lsp-after-open-hook
    ;; :after origami-minor-mode
    :commands lsp-origami-try-enable
    )

  ;; L570 にして画面が少し広くなったので、使ってみている。 lsp-ui-imenu の強化版?
  ;; カスタマイズは今後の課題。ブタに真珠の状態。
  (leaf lsp-treemacs :ensure t :require t
    :doc "LSP treemacs"
    :tag "languages" "emacs>=26.1"
    :added "2022-06-24"
    :url "https://github.com/emacs-lsp/lsp-treemacs"
    :emacs>= 26.1
    :ensure t
    :after treemacs lsp-mode
    )

  )

惰性で使ってて、何かを調べてカスタマイズしよう、とかがない昨今である。

L570になって、画面が広くなったし、 メモリも十分だし、 反応が遅いという印象も少ないので、まあ、いいかな。

最近、python-mode が、時々アップデート(v6.3.1 20220907)されている。 アップデートの中身は理解できないけど、 私が python-mode 自体を使っているという意識が希薄なので、 一度、使い方を調べた方がよいのかもと思っている。 (移動や narrow に必要になる ブロックとかの判定がメインかなあ)

まあ、なんとか emacs を使い続けているので、よしとしましょう。

0 件のコメント:

コメントを投稿

麻のボディタオル

2018年の秋(まだ、自転車を封印してない)、 近江上布伝統産業会館 で、興味からボディタオルを購入した。 お、よかった。: 自然派パン工房 ふるさとの道 ほぼ毎日風呂で使ってきて、ついに寿命がきたようだ。 お店の方に、「糸が痩せて破れてくる」まで使える、と...