2010-01-27 4 views
12

Lorsque vous effectuez un M-x describe-mode dans un fichier .el, j'ai remarqué que le mode Emacs-Lisp exécute effectivement le code. Cependant, lisp-complete-symbol est lié à M-TAB. Dans Windows, cette liaison de touches est prise par Windows pour basculer la fenêtre active. La plupart des IDE utilisent C-SPC, mais cela est également pris dans Emacs. Qu'est-ce qu'une bonne liaison de clé relativement courante pour l'achèvement du code?Liaisons de touches de complétion de code dans Emacs

+5

Bien sûr, vous pouvez taper 'ESC TAB'. –

+1

+1 Vous avez raison. Pourquoi cela fonctionne-t-il? ESC = Meta? – User1

+0

Oui, c'est pourquoi. – jrockway

Répondre

8

Si vous aimez l'achèvement de toutes sortes, je recommande M-/ et de liaison qui à hippie-expand.

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

Il ne une variété de complétions, qui sont contrôlés par la hippie-expand-try-functions-list variable. Dans les fichiers .el, vous pouvez définir cela pour faire le 'try-complete-lisp-symbol en premier pour obtenir le comportement que vous demandez ci-dessus, ainsi que toutes les autres extensions fournies par hippie-expand.

Cela ferait pour vous:

(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)))) 
+0

Hippie-expand sons intéressants. Pourquoi avez-vous choisi M-/au lieu de M-SPC (comme indiqué sur la page EmacsWiki)? Aussi comment faites-vous cette boîte fraîche autour du M- /? – User1

+1

@ User1 'M- /' est la liaison par défaut de 'dabbrev' (pour lequel hippe-expand est un remplacement). De plus 'M-SPC' est par défaut lié' 'just-one-space'' que j'utilise tout le temps. Et enfin, la cool box est faite en utilisant l'étiquette KEY

+0

+1 Cela me semble logique. Vous êtes un génie d'Emacs! – User1

2

J'utilise:

(define-key function-key-map [(control tab)] [?\M-\t]) 
1

J'utilise M-. et M-/ pour les deux modes d'achèvement - hippie-expand et les emacs standard d'un.

3

C-M-i; aucune personnalisation requise.

7

Comme Trey Jackson mentionné, hippie-expand est le chemin à parcourir, mais avec le liant à M-/, je aime aussi avoir la TAB touche tout mon travail d'achèvement pour moi. J'ai donc cela du Emacs-Wiki dans mon emacs fichier:

;;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) 

Vous pourriez avoir hippie élargir les paramètres comme suit:

;;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)) 
0

Mettez dans votre .emacs pour que Windows donne Emacs l'utilisation de M-TAB :

(when (fboundp 'w32-register-hot-key) (w32-register-hot-key [M-tab])) 
Questions connexes