2010-01-19 14 views
9

Vim completa palabras y líneas con CTRL-X P y CTRL-L. Hay un complemento de Emacs llamado modo Company pero este complemento interfiere y causa conflictos con muchas cosas dentro de Emacs (con linum y yasnippets globales). Sé que puedo completar palabras con CTRL-/en Emacs. ¿Pero es posible tomar líneas previamente escritas para completar el código?¿Emacs tiene finalización de palabras y líneas (como la finalización del modo de inserción de Vim)?

+0

Creo que es más cuestión de superusuario – notnoop

+0

@notnoop <- ¿Esto es un bot? porque creo que mi pregunta es acerca de la programación – alexchenco

+1

, la pregunta es acerca de los atajos para el editor de propósito general de emacs. Esa es una pregunta de superusuario. Sin embargo, entiendo que, por lo general, desee dicha funcionalidad mientras codifica. Si la pregunta es sobre la escritura de una extensión de emacs, o cómo manejar la finalización del código (con yasnippets), entonces creo que está relacionada con la programación. – notnoop

Respuesta

7

Quizás esté buscando hippie-expand? A partir de esa página web (a partir de este escrito, de todos modos):

HippieExpand mira a la palabra antes de punto y trata de expandirlo en diversas maneras incluyendo la expansión de una lista fija (como expand-abbrev), la expansión del texto coincidente encontrado en un búfer (como dabbrev-expand) o expandiéndose de formas definidas por sus propias funciones . Cuál de estos intenta y en qué orden está controlado por una lista de funciones configurable .

Para obtener una lista completa de todas las opciones de configuración, visite el emacs wiki page on completion.

+2

Para obtener el comportamiento similar a 'Ctrl-X Ctrl-L' de vim, debe agregar 'try-expand-line-all-buffers' a' hippie-expand-try-functions-list'. Esto se ampliará por líneas desde todos los búferes en lugar de solo el búfer actual. – ymln

3

Hay un montón de maneras de completar en Emacs. Algunos son específicos del modo, algunos en línea, algunos configurables y otros. Here es una lista de modos que pueden ayudarte.

1

También vale la pena señalar: si su administrador de ventanas no roba Alt-tab, emacs se auto-completará con Alt-tab (configuré mi administrador de ventanas para usar la "clave de Windows" en lugar de alt por este mismo motivo) .

2

Utilice el argumento numérico para completar por línea, digamos M-5 M-/ completará por línea, mientras que M-/ solo completará la forma normal.

hippe-expend función tiene una característica muy útil que es:

With a positive numeric argument, jumps directly to the ARG next function in this list. With a negative argument or just C-u, undoes the expansion.

personalizar las funciones de expansión en hippie-expand-try-functions-list y poner la función try-expand-line como quinto elemento de la lista, entonces se podría usar M-5 M-/a completa por linea

Este consejo es muy práctico y útil, y lo recomiendo encarecidamente.

+0

FYI 'try-expand-line' es el 5º elemento predeterminado de' hippie-expand-try-functions-list'. – ocodo

0

Si está utilizando evil, esta es la solución vim-como la mayoría utilizo:

(defun my-expand-lines() 
    (interactive) 
    (let ((hippie-expand-try-functions-list 
      '(try-expand-line-all-buffers))) 
     (call-interactively 'hippie-expand))) 

    (define-key evil-insert-state-map (kbd "C-x C-l") 'my-expand-lines) 

De esta manera puede utilizar nuestro viejo amigo C-x C-l en modo de inserción para toda la línea Todos los tampones finalización.

Gracias @ymln por la sugerencia de usar try-expand-line-all-buffers.

Cuestiones relacionadas