Debian上のエディタに、emacs(26.1)をメインに使用している。 まあ、vimが周辺をサポートしているのだが。
org-modeでメモが主用途。それと、少し長めのpythonスクリプト。 素人なので、コピペ基本の設定。
最近、expandregion, smartparens, yasnippet, companyが うまく機能してないように感じ始めている。
なので、まず補完のcompanyを見直してみた。のだったが。
package managerは、use-package。ivy-mode + company 環境。
まず、eclipse,c,c++はやらないので、以下のようにbackendを変更しようとした。
;; https://github.com/company-mode/company-mode/issues/407 + others
(setq company-backends
'(company-ispell
company-yasnippet
(company-dabbrev-code company-gtags company-keywords)
; grouping分らん、 withとかなんとか
; company-keywords ; keywords by company default
; company-bbdb ; database for mail address......
; company-gtags ; あまり使用感がない?
company-files ; files & directory
company-capf ; completion-at-point-functions
;company-dabbrev-code ; dabbrev for code
;company-oddmuse ; WikiWiki engine Oddmuse such as emacswiki.org
;company-abbrev ; 静的略称展開
company-dabbrev ; 動的略称展開
))
だが、この設定はglobal-modeで有効になるようだが、 company-webでは反映されなかった。ようだ。 company-safe-backendsを使っているようで、 こいつは触らない方が良いみたい。
This variable may be risky if used as a file-local variable.
ただ既に、ispellが含まれてたりする。 標準に含まれてないbackendを使おうとする場合、 その作法というか、色々あるのかもしれない。あくまで想像だが。
なので、 パッケージに含まれる company-ispell と conpany-yasnippet を company-backend に 追加して、company-other-backend を指定する方法にしてみた。
;; C-h v company-backends から ;; ‘company-begin-backend’ can be used to start a specific backend, ;; ‘company-other-backend’ will skip to the next matching backend in the list.
現状、以下。
(use-package company :ensure t
:diminish company-mode
:bind (
("C-c y /" . company-yasnippet) ;; [201907]
;; backend 切り替えできないので
; :map company-mode-map ; 通常 On なので注意
:map company-active-map ; 選択している最中
("M-p" . nil) ; ミスタッチ予防
("M-n" . nil)
([tab] . company-complete-common-or-cycle)
("C-n" . company-select-next)
("C-p" . company-select-previous)
("C-o" . company-other-backend)
;; 他のbackend候補を表示させる。firsrがispellだから。
;; firstを変更するキーバインドが欲しいかも
("C-v" . company-next-page)
("M-v" . company-previous-page)
("C-s" . company-filter-candidates) ;; flx みたいに絞りこめる。
:map company-search-map ; company-filter-candidatesでの設定かと。
("C-p" . company-select-previous)
("C-n" . company-select-next)
;("C-o" . company-other-backend) ; ダメ、機能しない。
; これが使えると嬉しいかも。
)
:init (global-company-mode)
:config
; optionの設定
(setq company-show-numbers nil
;; company-auto-expand t (20190410)
company-auto-complete nil ;; (20190410)
;; company-transformers '(
;; company-sort-by-occurrence
;; company-sort-by-backend-importance
;; );; Original value was nil
company-transformers nil ;; set nil for speed up
company-selection-wrap-around t
company-idle-delay 0.1
completion-ignore-case t
company-dabbrev-downcase nil
company-dabbrev-other-buffers t
; use only buffers with same major-mode for company-dabbrev
; company-minimum-prefix-length 3 ; 2文字ならyasnippetを直接
company-minimum-prefix-length 1 ; C-o で他の候補になるから。
company-selection-weap-around t
company-tooltip-align-annotations t ; align to the right border
;; company-sort-by-occurrence t (20190410)
company-tooltip-limit 10)
(add-to-list 'company-backends 'company-yasnippet)
(add-to-list 'company-backends 'company-ispell)
; start backend
(setq company-begin-backend 'company-ispell)
; 普段はメモとかだからispellにしておく。
; elpy-mode : firstはispellではない。companyを使ってない?
; web-mode : firstはispellのまま。
; skip to the next matching backend in the list.
(setq company-other-backend '(company-etags company-eclim company-bbdd
company-xcode company-cmake company-oddmuse))
; たまにhtmlを直接編集するからcompany-webを追加。
; company-safe-backendsに追加されるが、company-web-htmlはリストにない。
; [201907] うまく動いてないので、一旦削除。
;
;(use-package company-web :ensure t
; :config
; (add-hook 'web-mode-hook
; (lambda ()
; (add-to-list (make-local-variable 'company-backends)
; 'company-nxml)
; (add-to-list (make-local-variable 'company-backends)
; 'company-web-html)
; (add-to-list (make-local-variable 'company-backends)
; 'company-css)
; ))
; )
; company-prescient レスポンスがかなり低下するので止め 20190414
; company-flx うまく動かない。company-filter-candidatesでよしとする。
; custom face ;; T510の貧相な発色にあわせてる。
(set-face-attribute 'company-tooltip nil
:foreground "black" :background "gray75")
(set-face-attribute 'company-tooltip-common nil
:foreground "black" :background "gray55")
(set-face-attribute 'company-tooltip-common-selection nil
:foreground "white" :background "DodgerBlue4")
(set-face-attribute 'company-tooltip-selection nil
:foreground "black" :background "DodgerBlue3")
(set-face-attribute 'company-preview nil
:foreground "gray90" :background "RoyalBlue4" :underline t)
(set-face-attribute 'company-preview-common nil
:foreground "white" :background "DodgerBlue4" :underline t)
(set-face-attribute 'company-scrollbar-fg nil
:background "orange")
(set-face-attribute 'company-scrollbar-bg nil
:background "gray40")
)
pythonには、elpyを使っている。elpy-modeでは elpy-module-companyが勝手に設定してくれるようで (https://github.com/jorgenschaefer/elpy/issues/1397)、 jedi-coreをemacs側にインストして、必要なpythonのモジュールをインストして環境を整えれば、まあ動いているようだ。
とりあえず、少しは良くなったみたい。
しかし、私には難しすぎるし時間がかかった。 smartparenとか、他にも調べたいのがあるが、ハードル高い。 しばらくこれで様子見か。
[201907] : 上記の設定は、デフォの設定であって、 modeに応じて変更させる時は、localな設定にするのかも、と試してみる。
(use-package company-web :ensure t
:after company
:hook (
(web-mode . (lambda () (add-to-list (make-local-variable 'company-safe-backends) '(company-web-html . "WEB"))))
(css-mode . (lambda () (add-to-list (make-local-variable 'company-safe-backends) '(company-css . "CSS"))))
)
)
ompany-safe-backends には追加されるようなので、一応継続。
調べながら使うのが基本なので、
問題にならなかったのだろう。ちゃんと調べないと、と反省。
GTAGS が無いとエラーになるので、面倒でも作成しないといけない。
きっと、設定方法があるのだろうけど。
0 件のコメント:
コメントを投稿