Однією з головних особливостей, про які я сумую про Vim, є те, що вона завжди зберігає ім’я поточного файлу в %
буфері ( детальніше ). Це дозволяє легко запускати команди:
;; compile current file
:! gcc %
;; source current file (useful when I'm editing .vimrc
:source %
;; get the size of current file
:! du -sh %
;; etc, etc...
Я хотів би мати аналогічну функціональність в emacs
(версія 24, якщо це має значення), а саме мати простий спосіб вставити ім'я файлу, відкритого в поточний буфер.
Приклади того, що я хочу зробити
Тут я описую основні випадки використання, щоб пояснити краще, коли відчуваю потребу в такому ярлику
Компіляція: Коли я ввожу
M-x compile
emacs, запитує мене про команду компіляції. Я хотів биgcc (current-buffer)
легко увійти .Load-file: Коли я редагую свій файл .emacs, я хотів би завантажити його відразу для перевірки змін. Як я це роблю,
M-x load-file
і тоді я завжди прописую ім’я . e m a c s. Я хотів би мати ярлик.Запуск зовнішніх процесів: я наводив
du -sh
як приклад, лише щоб проілюструвати, що я хочу, щоб ярлик також був доступний, коли я виконую команди команд оболонки за допомогоюM-!
Що я знайшов поки що
- Це питання тут на U&L. Надані відповіді в основному показують, де знайти ім'я файлу буфера, щоб можна було додати його до файлу "kill-ring". Це не саме те, що я шукаю, я не хочу вручну вбивати ім'я файлу, перш ніж я захочу його використовувати. (Також рішення, описані в обох відповідях, начебто не працюють настільки гладко в моїх програмах emacs і вимагають додаткових натискань на клавіші, що створюють їм біль.
EDIT : Трохи не пов'язаний між собою, я з’ясував, чому ці рішення не працюють. У мене ввімкнено IDO, на краще або на гірше.
(current-buffer)
Функція описана в керівництві дійсно повертає ім'я файлу в поточному буфері, але ніде в прикладах , які я дав вище, я оцінка Elisp коду. Чи є спосіб вставити результат оцінки цієї функції в (міні) буфер і зв’язати таким чином ярлик?
Чи помиляюся я так думаю?
В даний час я вчусь використовувати emacs (фактично минуло кілька місяців) після багатьох років використання Vim. Я хочу уникнути передбачуваної пастки із використанням emacs-in-a-Vim . Якщо ви вважаєте, що те, про що я прошу, не надто emacs-y , і для цього повинен бути кращий (чистіший?) Спосіб, будь ласка, згадайте це у своїх відповідях.
(buffer-file-name)
поки набираєте мінібуфер, ви отримуєте nil
, бо (current-buffer)
це minibuffer. Ви також можете перемикати буфери, перебуваючи в minibuffer, тому важко відслідковувати, який буфер - це те, що ви думаєте про поточний буфер, до моменту, коли поточний буфер, як це бачить Emacs, є minibuffer.
(global-set-key (kbd "C-i") buffer-file-name)
якщо ви хочете, щоб це було Ctrl + I. Про .emacs,M-x load-file RET
робить те, що ви хочете; вам не потрібно нічого писати.