Eines der Hauptmerkmale, die ich an Vim vermisse, ist, dass der Dateiname der aktuellen Datei immer im %
Puffer gespeichert wird ( weitere Informationen ). Dies ermöglicht das einfache Starten von Befehlen wie:
;; compile current file
:! gcc %
;; source current file (useful when I'm editing .vimrc
:source %
;; get the size of current file
:! du -sh %
;; etc, etc...
Ich hätte gerne eine ähnliche Funktionalität unter emacs
(Version 24, wenn das einen Unterschied macht), nämlich eine einfache Möglichkeit, den Namen der geöffneten Datei in den aktuellen Puffer einzufügen.
Beispiele für das, was ich tun möchte
Hier beschreibe ich einige grundlegende Anwendungsfälle, um besser zu erklären, wann ich das Bedürfnis nach einer solchen Verknüpfung habe
Kompilieren: Wenn ich
M-x compile
emacs eingebe, werde ich nach einem Kompilierbefehl gefragt. Ich möchtegcc (current-buffer)
einfach eintreten .Datei laden: Wenn ich meine .emacs-Datei bearbeite, möchte ich sie sofort laden, um die Änderungen zu testen. So wie ich es mache,
M-x load-file
schreibe ich immer den Namen . e m a c s. Ich hätte gerne eine Verknüpfung.Starten von externen Prozessen: Ich habe
du -sh
als Beispiel angegeben, um zu veranschaulichen, dass die Verknüpfung auch verfügbar sein soll, wenn ich Shell-Befehle mit ausführeM-!
Was ich bisher gefunden habe
- Diese Frage hier auf U & L. Die Antworten zeigen im Grunde genommen, wo sich der Dateiname eines Puffers befindet, damit man ihn zum Kill-Ring hinzufügen kann. Es ist nicht genau das, wonach ich suche. Ich möchte den Dateinamen nicht manuell löschen müssen, bevor ich ihn verwenden möchte. (Auch die in beiden Antworten beschriebenen Lösungen scheinen in meinem Emacs nicht so reibungslos zu funktionieren und erfordern zusätzliche Tastenanschläge, was sie ein wenig nervt.)
EDIT : Ein bisschen verwandt, indem ich herausgefunden habe, warum diese Lösungen nicht funktionieren. Ich habe IDO aktiviert, egal ob gut oder schlecht.
- Die im Handbuch beschriebene
(current-buffer)
Funktion gibt den Namen der Datei im aktuellen Puffer zurück, aber nirgendwo in den Beispielen, die ich oben angegeben habe, bewerte ich den Elisp-Code. Gibt es eine Möglichkeit, das Ergebnis der Auswertung dieser Funktion in einen (Mini-) Puffer einzufügen und auf diese Weise an eine Verknüpfung zu binden?
Bin ich falsch, so zu denken?
Ich lerne gerade, Emacs zu benutzen (es sind tatsächlich ein paar Monate vergangen), nachdem ich Vim jahrelang benutzt habe. Ich möchte eine vorhersehbare Verwendung von Emacs-in-a-Vim-Way- Falle vermeiden . Wenn Sie das Gefühl haben, dass das, wonach ich frage, nicht sehr emacs-y ist und es einen besseren (saubereren?) Weg geben sollte, erwähnen Sie dies bitte in Ihren Antworten.
(global-set-key (kbd "C-i") buffer-file-name)
Sie , wenn Sie möchten, dass es Strg + I ist. Über .emacs,M-x load-file RET
macht was Sie wollen; du musst nichts schreiben.(buffer-file-name)
während Sie den Minibuffer eingeben, erhalten Sienil
, weil(current-buffer)
es sich um den Minibuffer handelt. Sie können auch im Minipuffer zwischen Puffern wechseln. Daher ist es schwierig zu verfolgen, welcher Puffer Ihrer Meinung nach der aktuelle Puffer ist, wenn der aktuelle Puffer, wie Emacs ihn sieht, der Minipuffer ist.Antworten:
Sie können eine Funktion wie folgt in Ihre .emacs einfügen und sie an einen beliebigen Schlüssel binden.
Siehe auch diese Frage , es scheint ähnlich zu sein.
quelle
Eine leichte Variante der Antwort von @ easyb ist, den Pfad zu Ihrem Kill Ring zu kopieren, anstatt ihn in Ihren Puffer zu legen (nützlich für schreibgeschützte Dateien):
quelle