2009-01-15 14 views
9

de Vim Ctrl +N normalmente funciona así: escribo letras, golpeó Ctrl +N, y Vim me proporciona terminaciones en base a mis palabras todos los buffers abiertos.¿Cómo lograr el equivalente de la Ctrl-n de Vim en GNU Emacs?

La solución para Emacs no tiene por qué ser idéntica. Lo uso principalmente así: declaro variable, luego la uso en código posterior. Pero me gusta el enfoque liviano de no analizando el código fuente.

+0

Buen consejo, no sabía acerca de Ctrl-n! –

Respuesta

3

Uso personalmente AutoComplete Le da una buena caja desplegable. Puede seleccionar la cantidad de letras que desea escribir antes de que se active y personalizar lo que desea que aparezca, incluidas las cosas en dabbrev-expand.

2
;; Allow tab to autocomplete 

(defun indent-or-expand (arg) 
    "Either indent according to mode, or expand the word preceding point." 
    (interactive "*P") 
    (if (and 
     (or (bobp)  (= ?w (char-syntax (char-before)))) 
     (or (eobp) (not (= ?w (char-syntax (char-after)))))) 
     (dabbrev-expand arg) 
    (tab-to-tab-stop))) 

(defun my-tab-fix() 
    (local-set-key [tab] 'indent-or-expand)) 

(add-hook 'as-mode-hook   'my-tab-fix) 
(add-hook 'java-mode-hook  'my-tab-fix) 
(add-hook 'c-mode-hook   'my-tab-fix) 
(add-hook 'sh-mode-hook   'my-tab-fix) 
(add-hook 'emacs-lisp-mode-hook 'my-tab-fix) 
13

intento hippie-expandir, con destino a su llave favorita

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

En lugar de presentar una terminación de vinos, golpeando repetidamente los ciclos de clave enlazado a través de las terminaciones en el lugar.

¿Por qué "hippie" -expandir? No tengo ni idea, y en realidad evité mirar la función porque el nombre era poco informativo y desagradable, hasta que leí the write-up at 'Life Is Too Short For Bad Code'. (El EmacsWiki entry on hippie-expand también pregunta "¿por qué 'hippie?'" Pero tampoco puedo responderlo)

19

Quiere expandir dabbrev, vinculado a M-/por defecto. No he usado Vim, pero según tu descripción, hace exactamente lo mismo.

+2

También vale la pena señalar que si M-/no da lo que desea la primera vez, al presionarlo repetidamente pasará por las coincidencias. – Boojum

+0

Esta debería ser la primera respuesta, con alternativas en segundo lugar. – drozzy

0

El asunto, en mi opinión es que la finalización de emacs que probé no se completa en relación con el contexto.

Por ejemplo, si escribe algún OOP con un método foobar() y un argumento foo, M-/le sugerirá tanto foo como foobar.

Pero sería genial si está llamando a un método de objeto, no para proporcionar la terminación "foo".

¿Alguien tiene una solución?

+0

No es un gran problema para mí. La finalización confiable para C++ es muy difícil. –

0

Aif> Esto requiere mucho más de lo que "hippie expand" tiene para ofrecer. Si codifica C/C++, PODRÍA usar ECB http://ecb.sourceforge.net/ pero, francamente, el proyecto está bastante muerto y este complemento no es muy confiable. Si necesita una terminación inteligente realmente buena, debe probar Eclipse (CDT). Pero si codifica Python, entonces Emacs (rope + flymake) es tan bueno como Eclipse (PyDev).

Cuestiones relacionadas