Jedną z głównych cech, których mi brakuje w Vimie, jest to, że zawsze zapisuje nazwę pliku bieżącego pliku w %
buforze ( więcej informacji ). Umożliwia to łatwe uruchamianie poleceń, takich jak:
;; compile current file
:! gcc %
;; source current file (useful when I'm editing .vimrc
:source %
;; get the size of current file
:! du -sh %
;; etc, etc...
Chciałbym mieć podobną funkcjonalność pod emacs
(wersja 24, jeśli to robi różnicę), a mianowicie mieć łatwy sposób wstawienia nazwy pliku otwartego w bieżącym buforze.
Przykłady tego, co chcę zrobić
W tym miejscu opisuję kilka podstawowych przypadków użycia, aby lepiej wyjaśnić, kiedy czuję potrzebę takiego skrótu
Kompilacja: Kiedy
M-x compile
wpisuję emacs, prosi mnie o polecenie kompilacji. Chciałbym wejśćgcc (current-buffer)
łatwo.Załaduj plik: Kiedy edytuję plik .emacs, chciałbym go załadować od razu, aby przetestować zmiany. Sposób, w jaki to robię, jest taki,
M-x load-file
a potem zawsze przeliteruję nazwę . e m a c s. Chciałbym mieć skrót.Uruchom procesy zewnętrzne: podałem
du -sh
jako przykład, aby zilustrować, że chcę, aby skrót był dostępny również podczas wykonywania poleceń powłoki za pomocąM-!
Co znalazłem do tej pory
- To pytanie tutaj na U&L. Podane odpowiedzi pokazują w zasadzie, gdzie znaleźć nazwę pliku bufora, aby można go było dodać do zabójczego pierścienia. Nie jest to dokładnie to, czego szukam, nie chcę ręcznie zabijać nazwy pliku, zanim chcę go użyć. (Również rozwiązania opisane w obu odpowiedziach nie wydają się działać tak płynnie w moich emacach i wymagają dodatkowych naciśnięć klawiszy, co sprawia, że są trochę uciążliwe).
EDYCJA : Trochę niezwiązana, dowiedziałem się, dlaczego te rozwiązania nie działają. Mam włączone IDO, na lepsze lub gorsze.
(current-buffer)
Funkcja opisana w instrukcji nie zwróci nazwę pliku w bieżącym buforze, ale nigdzie w przykładach dałem powyżej, mam oceny kod Elisp. Czy istnieje sposób na wstawienie wyniku oceny tej funkcji do bufora (mini) i powiązanie go w ten sposób ze skrótem?
Czy mylę się myśląc w ten sposób?
Obecnie uczę się używać emacsa (właściwie minęło kilka miesięcy) po latach używania Vima. Chcę uniknąć przewidywalnej pułapki „ emacs-in-a-Vim-way” . Jeśli uważasz, że to, o co proszę, nie jest zbyt wyczerpujące i powinien istnieć lepszy (czystszy?) Sposób, proszę o tym wspomnij w swoich odpowiedziach.
(global-set-key (kbd "C-i") buffer-file-name)
jeśli chcesz, aby był to Ctrl + I. O .emacs,M-x load-file RET
robi to, co chcesz; nie musisz nic pisać.(buffer-file-name)
gdy piszesz minibufor, dostajesznil
, bo(current-buffer)
to minibufor. Możesz przełączać bufory również w minibuforze, więc trudno jest śledzić, który bufor jest tym, co myślisz o bieżącym buforze, zanim bieżący bufor, jak widzi Emacs, jest minibuforem.Odpowiedzi:
Możesz umieścić funkcję w następujący sposób w swoich .emacs i przypisać ją do dowolnego klucza, który ci się podoba.
Zobacz także to pytanie , wydaje się być podobne.
źródło
Niewielki wariant odpowiedzi @ easyb polega na skopiowaniu ścieżki do pierścienia zabijania zamiast umieszczania go w buforze (przydatne w przypadku plików tylko do odczytu):
źródło