Привязки клавиш автозавершения кода в Emacs

Выполняя режим описания M-x в файле .el, я заметил, что режим Emacs-Lisp фактически выполняет завершение кода. Однако lisp-complete-symbol привязан к M-TAB. В Windows эта привязка клавиш используется Windows для переключения активного окна. Большинство IDE используют C-SPC, но это также используется в Emacs. Что такое хорошая, довольно распространенная привязка клавиш для завершения кода?


person User1    schedule 27.01.2010    source источник
comment
Конечно, вы можете ввести ESC TAB.   -  person Aidan Cully    schedule 27.01.2010
comment
+1 Ты прав. Почему это работает? ESC=Мета?   -  person User1    schedule 28.01.2010


Ответы (6)


Если вам нравится завершение всех видов, я рекомендую M-/ и привязать его к hippie -развернуть.

(global-set-key (kbd "M-/") 'hippie-expand)

Он выполняет множество дополнений, которые контролируются переменной hippie-expand-try-functions-list. В файлах .el вы можете установить это, чтобы сначала выполнить 'try-complete-lisp-symbol, чтобы получить поведение, о котором вы просите выше, наряду со всеми другими расширениями, которые предоставляет hippie-expand.

Это сделает это для вас:

(add-hook 'emacs-lisp-mode-hook 'move-lisp-completion-to-front)
(defun move-lisp-completion-to-front ()
  "Adjust hippie-expand-try-functions-list to have lisp completion at the front."
  (make-local-variable 'hippie-expand-try-functions-list)
  (setq hippie-expand-try-functions-list 
        (cons 'try-complete-lisp-symbol
              (delq 'try-complete-lisp-symbol hippie-expand-try-functions-list)))
  (setq hippie-expand-try-functions-list 
        (cons 'try-complete-lisp-symbol-partially
              (delq 'try-complete-lisp-symbol-partially hippie-expand-try-functions-list))))
person Trey Jackson    schedule 27.01.2010
comment
Хиппи-расширение звучит интересно. Почему вы выбрали M-/ вместо M-SPC (как показано на странице EmacsWiki)? И как сделать эту крутую коробку вокруг M-/? - person User1; 28.01.2010
comment
@User1 M-/ — это привязка по умолчанию для dabbrev (заменой которой является hippe-expand). Также M-SPC по умолчанию привязан к 'just-one-space, который я использую все время. И, наконец, холодильник создается с помощью тега ‹kbd›KEY‹/kbd›. - person Trey Jackson; 28.01.2010
comment
Кстати, вы можете применить delq к результату delq и сэкономить время на копировании и вставке: (cons 'a (cons 'b (delq 'a (delq 'b list)))) - person jrockway; 28.01.2010
comment
M-/ также является привязкой, рекомендованной GNU : обычно хиппи-расширение связывается с M-/ с помощью dabbrev-expand, стандартной привязки M-/, что обеспечивает одну из возможностей расширения. - person user650654; 22.08.2019

Как упомянул Трей Джексон, hippie-expand — это то, что нужно, но наряду с привязкой его к M-/ мне также нравится, когда клавиша TAB выполняет всю мою завершающую работу за меня. . Итак, у меня есть это из Emacs-Wiki в моем файле .emacs:

;;function to implement a smarter TAB (EmacsWiki)
(defun smart-tab ()
  "This smart tab is minibuffer compliant: it acts as usual in
    the minibuffer. Else, if mark is active, indents region. Else if
    point is at the end of a symbol, expands it. Else indents the
    current line."
  (interactive)
  (if (minibufferp)
      (unless (minibuffer-complete)
        (hippie-expand nil))
    (if mark-active
        (indent-region (region-beginning)
                       (region-end))
      (if (looking-at "\\_>")
         (hippie-expand nil)
        (indent-for-tab-command)))))
(global-set-key (kbd "TAB") 'smart-tab)

Вы можете расширить настройки хиппи следующим образом:

;;settings for hippie-expand
(setq hippie-expand-try-functions-list
       '(try-complete-lisp-symbol
         try-complete-lisp-symbol-partially
         try-expand-dabbrev
         try-expand-dabbrev-from-kill
         try-expand-dabbrev-all-buffers
         try-expand-line
         try-complete-file-name-partially
         try-complete-file-name))
person vedang    schedule 07.02.2010

C-M-i; не требуется настройка.

person huaiyuan    schedule 29.01.2010

Я использую:

(define-key function-key-map [(control tab)] [?\M-\t])
person P-Nuts    schedule 27.01.2010

Я использую M-. и M-/ для двух режимов завершения - хиппи-расширения и стандартного emacs.

person Paul Nathan    schedule 28.01.2010

Поместите это в свой .emacs, чтобы Windows предоставила Emacs использование M-TAB:

(when (fboundp 'w32-register-hot-key) (w32-register-hot-key [M-tab]))
person Drew    schedule 21.08.2011