Одна из основных функций, которые я пропускаю в 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. Приведенные ответы в основном показывают, где найти имя буфера, чтобы можно было добавить его в список уничтожений. Это не совсем то, что я ищу, я не хочу вручную убивать имя файла, прежде чем я хочу его использовать. (Кроме того, решения, описанные в обоих ответах, в моих emacs не работают так же гладко и требуют дополнительных нажатий клавиш, что делает их немного болезненными).
РЕДАКТИРОВАТЬ : немного не связано, я узнал, почему эти решения не работают. У меня включен IDO, к лучшему или к худшему.
(current-buffer)
Функция описана в руководстве действительно возвращает имя файла в текущем буфере, но нигде в примерах , которые я дал выше, я оценка Elisp кода. Есть ли способ вставить результат оценки этой функции в (мини) буфер и связать этот путь с ярлыком?
Я ошибаюсь, если я так думаю?
В настоящее время я учусь использовать emacs (на самом деле это было несколько месяцев) после многих лет использования Vim. Я хочу избежать предсказуемой ловушки -emacs-in-a-Vim-way . Если вы чувствуете, что то, о чем я прошу, не очень изощренно , и должен быть лучший (более чистый?) Способ сделать это, пожалуйста, укажите это в своих ответах.
(buffer-file-name)
пока печатаете в минибуфере, вы получите nil
, потому что (current-buffer)
это минибуфер. Вы также можете переключать буферы, находясь в минибуфере, поэтому трудно отследить, какой буфер является тем, что вы думаете о текущем буфере, к тому времени, когда текущий буфер, как видит его Emacs, является минибуфером.
(global-set-key (kbd "C-i") buffer-file-name)
хотите ли вы, чтобы оно было Ctrl + I. О .emacs,M-x load-file RET
делает то , что вы хотите; Вам не нужно ничего писать.