Yanıtlar:
Bu, içinde tanımlanır company-active-map
. Bu haritadaki dönüş anahtarını kaldırabilirsiniz:
(define-key company-active-map (kbd "<return>") nil)
Ancak, birden fazla aday olduğunda dönüş ve sekmenin farklı şeyler yaptığını unutmayın. Sekme bağlı company-complete-common
, dönüş ise bağlı company-complete-selection
. Dönüş anahtarını açarsanız , listeden bir tamamlama seçemez M-n
ve kullanamazsınız M-p
.
Kullanmak için başka bir anahtar seçmek isteyebilirsiniz company-complete-selection
, örneğin:
(with-eval-after-load 'company
(define-key company-active-map (kbd "<return>") nil)
(define-key company-active-map (kbd "RET") nil)
(define-key company-active-map (kbd "C-SPC") #'company-complete-selection))
Bu can sıkıcı varsayılan davranışı düzeltmek için eksiksiz kurulumum:
;;; Prevent suggestions from being triggered automatically. In particular,
;;; this makes it so that:
;;; - TAB will always complete the current selection.
;;; - RET will only complete the current selection if the user has explicitly
;;; interacted with Company.
;;; - SPC will never complete the current selection.
;;;
;;; Based on:
;;; - https://github.com/company-mode/company-mode/issues/530#issuecomment-226566961
;;; - https://emacs.stackexchange.com/a/13290/12534
;;; - http://stackoverflow.com/a/22863701/3538165
;;;
;;; See also:
;;; - https://emacs.stackexchange.com/a/24800/12534
;;; - https://emacs.stackexchange.com/q/27459/12534
;; <return> is for windowed Emacs; RET is for terminal Emacs
(dolist (key '("<return>" "RET"))
;; Here we are using an advanced feature of define-key that lets
;; us pass an "extended menu item" instead of an interactive
;; function. Doing this allows RET to regain its usual
;; functionality when the user has not explicitly interacted with
;; Company.
(define-key company-active-map (kbd key)
`(menu-item nil company-complete
:filter ,(lambda (cmd)
(when (company-explicit-action-p)
cmd)))))
(define-key company-active-map (kbd "TAB") #'company-complete-selection)
(define-key company-active-map (kbd "SPC") nil)
;; Company appears to override the above keymap based on company-auto-complete-chars.
;; Turning it off ensures we have full control.
(setq company-auto-complete-chars nil)
( daha da geliştirilmiş ancak bu noktadan oldukça karmaşık olan mevcut yapılandırmaya bağlantı )
( bu soruya göre güncellenir )
(define-key company-active-map (kbd "C-RET") #'company-complete-selection)
ama işe yaramadı. Bunun mümkün olup olmadığını ve nasıl başarılacağını biliyor musunuz?
TAB
ilk öğeyi 'etkileşime' gerek kalmadan seçmek için kullanabilirsiniz . Ama sorunuzu cevaplamak için bahse girerim ki terminaliniz gönderemez C-RET
(benimki gönderemez ). C-h k C-RET
Emacs'ın aslında C-RET
sadece sinyali alıp almadığını görmeye çalışın RET
.
(define-key company-active-map (kbd "TAB") #'company-complete-common-or-cycle)
ama sağınıza benziyor, C-RET dışında bir şeye geçtiğimde istenen davranışı aldım. Teşekkürler.
M-p
ve M-n
veya ile birlikte arama yapabilir C-s
veya doğrudan bir adayı M-1
içinden seçebilirsiniz M-0
(ayarlarsanız sayılar gösterilir company-show-numbers
).
Aynı problem için bir çözüm ararken bunu gördüm (benim için sinir bozucu anahtarlar olmasına rağmen SPC
ve .
).
nil
Rahatsız edici anahtarları @glucas ve @Radon Rosborough tarafından önerilen şekilde bağlamanın, o zaman hızlı yazım için yıkıcı olan şirket açılır menüsünü manuel olarak iptal etmeniz gerektiği için hoş bir UX olmadığını görüyorum.
Yani, şirket aktif hale gelir ve nil
hiçbir şeye bağlı bir anahtar yazarsanız . Bir karakter yazarken beklediğiniz bu değil. Karakterin eklenmesini beklersiniz.
Bunun yerine, emacs'ın otomatik olarak araması company-abort
ve ardından yazdığınız karakteri sizin için eklemesi çok daha uygundur . İşte benim çözümüm:
(defun company--my-insert-spc() (interactive) (company-abort)(insert-char #10r32))
(defun company--my-insert-dot() (interactive) (company-abort)(insert-char #10r46))
(define-key company-active-map (kbd "SPC") 'company--my-insert-spc)
(define-key company-active-map (kbd ".") 'company--my-insert-dot)
Bunu yerine RET
arayarak kolayca genişletebilirsiniz düşünüyorum , (Ben bunu denemek için çünkü ben seçmek için kullanmayın çünkü ).(newline)
(insert-char)
RET
Aslında use-package
bu benim init var ne olduğunu kullanıyorum :
(use-package company
:config
(global-company-mode)
(setq company-minimum-prefix-length 3)
(setq company-auto-complete t)
(setq company-show-numbers t)
:bind
(("C-<tab>" . company-complete)
:map company-active-map
("ESC" . company-abort)
;; prevent company from completing on its own when we type regular characters
("SPC" . company--my-insert-spc)
("." . company--my-insert-dot)
)
)