जवाबों:
इसमें परिभाषित किया गया है company-active-map
। आप उस मानचित्र में वापसी कुंजी को हटा सकते हैं:
(define-key company-active-map (kbd "<return>") nil)
ध्यान दें कि जब कई उम्मीदवार होते हैं तो रिटर्न और टैब अलग-अलग काम करते हैं। टैब बाध्य है company-complete-common
, जबकि वापसी के लिए बाध्य है company-complete-selection
। यदि आप वापसी कुंजी को अनबाइंड करते हैं तो आप उपयोग नहीं कर पाएंगे M-n
और M-p
सूची से पूर्णता प्राप्त कर सकते हैं।
आप company-complete-selection
उदाहरण के लिए उपयोग करने के लिए कुछ अन्य कुंजी चुन सकते हैं :
(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))
इस कष्टप्रद डिफ़ॉल्ट व्यवहार को ठीक करने के लिए मेरा पूरा सेटअप है:
;;; 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)
( वर्तमान विन्यास से लिंक , जिसे और बेहतर बनाया गया है लेकिन इस बिंदु से काफी जटिल है)
( इस सवाल के अनुसार अद्यतन )
(define-key company-active-map (kbd "C-RET") #'company-complete-selection)
लेकिन यह काम नहीं किया। क्या आप जानते हैं कि क्या यह संभव होगा और कैसे प्राप्त किया जाएगा?
TAB
'इंटरेक्ट' की आवश्यकता के बिना सूची में पहले आइटम का चयन करने के लिए उपयोग कर सकते हैं । लेकिन आपके सवाल का जवाब देने के लिए, मुझे यकीन है कि आपका टर्मिनल नहीं भेज सकता है C-RET
(मेरा नहीं हो सकता)। कोशिश करें C-h k C-RET
और देखें कि क्या वास्तव में Emacs C-RET
को केवल इसके बजाय संकेत मिलता है RET
।
(define-key company-active-map (kbd "TAB") #'company-complete-common-or-cycle)
लेकिन यह आपके अधिकार की तरह दिखता है, जब मैं सी-आरईटी के अलावा किसी अन्य चीज में बदल गया तो मुझे वांछित व्यवहार मिला। धन्यवाद।
M-p
और M-n
, या iSearch उन लोगों के साथ C-s
है, या सीधे के साथ एक उम्मीदवार का चयन M-1
के माध्यम से M-0
(यदि आप सेट संख्या दिखाई जाती हैं company-show-numbers
)।
बस इसी समस्या के समाधान की तलाश में इसे देखा (हालांकि मेरे लिए कष्टप्रद चाबियाँ थीं ) SPC
और .
।
मुझे लगता है कि nil
@glucas और @Radon Rosborough द्वारा प्रस्तावित अपमानजनक कुंजियों को बांधना एक अच्छा UX नहीं है क्योंकि तब आपको कंपनी ड्रॉपडाउन को मैन्युअल रूप से समाप्त करना होगा जो गति टाइपिंग के लिए विघटनकारी है।
यही है, अगर कंपनी सक्रिय हो जाती है और आप एक कुंजी टाइप करते हैं तो nil
कुछ भी नहीं होगा। ऐसा नहीं है जब आप एक चरित्र टाइप करते हैं तो आप क्या उम्मीद करेंगे। आप उम्मीद करेंगे कि चरित्र डाला जाएगा।
इसके बजाय, Emacs को स्वचालित रूप से कॉल करना company-abort
और फिर आपके लिए टाइप किया गया वर्ण सम्मिलित करना बहुत अधिक सुविधाजनक है । यहाँ मेरा समाधान है:
(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)
मुझे लगता है कि आप इसके बजाय RET
कॉल करके आसानी से इसे बढ़ा सकते हैं (हालांकि मैंने कोशिश नहीं की है क्योंकि मैं चयन करने के लिए उपयोग करता हूं )।(newline)
(insert-char)
RET
वास्तव में मैं इसका उपयोग कर रहा हूं use-package
, यही मेरे पास है।
(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)
)
)