2010-01-19 1 views
9

Vim vervollständigt Wörter und Zeilen mit CTRL-X P und CTRL-L. Es gibt ein Emacs Plugin namens Company Mode, aber dieses Plugin interferiert und verursacht Konflikte mit vielen Dingen in Emacs (mit globalen linum und yasnippets). Ich weiß, dass ich mit CTRL-/in Emacs Wörter vervollständigen kann. Aber es ist möglich, vorher geschriebene Zeilen zum vollständigen Code zu nehmen?Hat Emacs Wort- und Zeilenvervollständigung (wie Vim's Insert-Modus-Vervollständigung)?

+0

Ich denke, das ist mehr von Superuser Frage – notnoop

+0

@notnoop <- Ist das ein Bot? weil ich denke, dass meine Frage über Programmierung ist – alexchenco

+1

die Frage betrifft Abkürzungen für den Emacs Allzweck-Editor. Das ist eine Superuser-Frage. Ich verstehe, dass Sie eine solche Funktionalität beim Codieren zwar gerne haben. Wenn die Frage darin besteht, eine Emacs-Erweiterung zu schreiben oder Code-Vervollständigung (mit Yasnippets) zu bearbeiten, dann denke ich, dass es sich um Programmierung handelt. – notnoop

Antwort

7

Vielleicht suchen Sie nach hippie-expand? Von dieser Webseite (als dies geschrieben wurde, jedenfalls):

HippieExpand am Wort vor Punkt sieht und versucht, es in verschiedene Weise zu erweitern, einschließlich von eine feste Liste erweitert (wie expand-abbrev), erweitert von übereinstimmendem Text gefunden in ein Puffer (wie dabbrev-expand) oder Erweiterung auf Weisen, die durch Ihre eigenen Funktionen definiert sind. Welche davon es versucht und in welcher Reihenfolge wird durch eine konfigurierbare Liste von Funktionen gesteuert.

Für eine umfassende Liste von Vervollständigungsoptionen finden Sie auf der emacs wiki page on completion.

+2

Um ein ähnliches Verhalten wie vims 'Ctrl-X Strg-L' zu erhalten, müssen Sie' try-expand-line-all-buffers' zu 'hippie-expand-try-functions-list' hinzufügen. Dies wird durch Linien von allen Puffern anstelle nur des aktuellen Puffers erweitert. – ymln

3

Es gibt eine Vielzahl von Möglichkeiten, die Fertigstellung in Emacs zu tun. Einige sind modusspezifisch, manche inline, manche konfigurierbar und was nicht. Here ist eine Liste von Modi, die Ihnen helfen könnten.

1

Erwähnenswert: Wenn Ihr Fenstermanager nicht Alt-Tab stiehlt, wird Emacs automatisch mit Alt-Tab abgeschlossen (Ich habe meinen Fenstermanager eingerichtet, um den "Windows-Schlüssel" anstelle von alt zu verwenden) .

2

Verwenden Sie numeric Argument, um mit der Zeile abzuschließen, sagen M-5 M-/ wird durch die Zeile abgeschlossen, während M-/ allein immer noch den normalen Weg abgeschlossen.

hippe-expend Funktion eine sehr nützliche Funktion hat, die ist:

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.

die Erweiterungsfunktionen in hippie-expand-try-functions-list anpassen und die Funktion try-expand-line als 5. Listenelement setzen, dann könnte man verwenden M-5 M-/zu Zeile für Zeile

Dieser Tipp ist sehr praktisch und nützlich und ich kann es nur wärmstens empfehlen.

+0

FYI 'try-expand-line' ist das standardmäßige fünfte Element von' hippie-expand-try-functions-list'. – ocodo

0

Wenn Sie evil verwenden, dies ist die vim-ähnliche Lösung, die ich verwenden:

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

Auf diese Weise können unsere alten Freund C-x C-l im Einfügemodus für ganze Linie alle Puffer Abschluss verwenden können.

Dank @ymln für den Vorschlag der Verwendung try-expand-line-all-buffers.