Emacs25 + lsp-mode + lsp-ui + company-lsp
ディストリビュージョンを変えたので、Emacs使ってGo言語の開発を作ろうとしたら、gocodeを利用したパッケージたちが動かない。
前は出来たはずだが・・なんか間違えたか??
自分の設定が悪いのか否か・・・と悩んだが、結局の所、gocodeがgo言語の新しい仕様にマッチしなくなっちゃった事が原因らしい。
んで、別の解決策が模索されているとのこと。
ネタ元 →
Big Sky :: gocode やめます(そして Language Server へ)
パッケージの導入
MELPAでインストール
M-x package-list-packages
インストールしたパッケージ達
lsp-mode : language server protocolモード
company :単語補完ライブラリ
company-lsp : language server protocolモードの単語補完パッケージ
company-quickhelp :auto-completeで言うところのツールチップなウィンドウを表示するもの
flycheck :シンタックスチェック
lsp-ui :lsp-modeのUIをリッチにしてくれる
go-dlv :Go言語のソースをEmacsバッファ上でデバッグできるようになる
導入パッケージの設定
init.elに設定
;; company-modeによる単語補完 (when (require 'company nil t) (global-company-mode) ; 全バッファで有効にする (setq company-auto-expand t) ; 1個目を自動的に補完 (setq company-complete-on-edit t) ; 文字を打っているときに自動的に補完ウィンドウを出す (setq company-idle-delay 0) ; 遅延なしにすぐ表示 (setq company-minimum-prefix-length 4) ; デフォルトは4 (setq company-selection-wrap-around t) ; 候補の最後の次は先頭に戻る (setq completion-ignore-case t) (setq company-dabbrev-downcase nil) (setq company-transformers '(company-sort-by-backend-importance)) ;; ソート順 (global-set-key (kbd "C-M-i") 'company-complete) (define-key company-active-map (kbd "C-n") 'company-select-next) ;; 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) ;; C-sで絞り込む (define-key company-active-map (kbd "C-i") 'company-complete-selection) ;; TABで候補を設定 (define-key company-active-map [tab] 'company-complete-selection) ;; TABで候補を設定 (define-key company-active-map (kbd "C-f") 'company-complete-selection) ;; C-fで候補を設定 (define-key emacs-lisp-mode-map (kbd "C-M-i") 'company-complete) ;; 各種メジャーモードでも C-M-iで company-modeの補完を使う ;; 未選択項目 (set-face-attribute 'company-tooltip nil :foreground "#36c6b0" :background "#244f36") ;; 未選択項目&一致文字 (set-face-attribute 'company-tooltip-common nil :foreground "white" :background "#244f36") ;; 選択項目 (set-face-attribute 'company-tooltip-selection nil :foreground "#a1ffcd" :background "#007771") ;; 選択項目&一致文字 (set-face-attribute 'company-tooltip-common-selection nil :foreground "white" :background "#007771") ;; スクロールバー (set-face-attribute 'company-scrollbar-fg nil :background "#4cd0c1") ;; スクロールバー背景 (set-face-attribute 'company-scrollbar-bg nil :background "#002b37") ;; QuickHelp表示 (company-quickhelp-mode t) ) (require 'lsp-mode) (require 'lsp-ui) (require 'company-lsp)
デバッガ設定
GDBのようにデバッグしたい。
当然ながらEmacsでできます。
;; 環境変数を引き継ぐ (when (require 'exec-path-from-shell nil t) (exec-path-from-shell-initialize) (exec-path-from-shell-copy-envs '("PATH" "GOROOT" "GOPATH"))) ;; Golang Debugger 有効 (require 'go-dlv)
Goのソースを開き、デバッグしたい関数の内側にカーソルを移動。
その後、M-x dlv-current-func を実行すると、デバッガが起動する。
※注意!!→メニューからEmacsを起動すると、.bashrcや.zshrcの環境変数設定が取り込まれない。
exec-path-from-shell-XXX が必要なのはそのため。
それでもうまく行かない場合は・・・メニューからではなくshellからEmacsを起動すると完璧。