Как я могу вставить имя файла активного файлового буфера в команду?
Когда я вызываю команду, которой нужно имя файла, я часто делаю это из буфера файлов и хочу получить имя этого файла при вводе команды в минибуфер.
Я ищу гипотезу, C-x…которую я могу набрать при формировании командной строки в минибуфере.
Так что, если текущий буфер является файлом с именем Lorem Ipsum.txt
, я наберу это:
M-x grep RET 'foo' SPC C-x … RET
что M-xgrepRETпредставляет Минибуфер побуждая для grep
команды. В ответ я набрал аргумент шаблона regex ( 'foo') и вставил аргумент имени файла ( C-x…). Этот минибуфер получится как:
grep -nH -e 'foo' 'Lorem Ipsum.txt'
Какая существующая команда получает имя файла текущего буфера файла, как это? Какова его связка ключей по умолчанию?
files
minibuffer
большой нос
источник
источник
M-n
. Это не работает везде, но работает во многих местах. Кроме того, поскольку вы разбираетесь, вам могут понравиться lgrep и rgrep, которые, я думаю, немного более интерактивны.Ответы:
К сожалению, для этого нет готовой команды, но мы можем сделать ее следующим образом:
Волшебство заключается в функции окна выбранного минибуфера ; он делает правильную вещь, выбирая последний буфер перед активацией минибуфера. В противном случае, используя только имя файла буфера, мы не получим имя файла в минибуфере. Интересно, что эту же функцию можно использовать в обычном буфере или минибуфере для вставки имени файла. Никакого специального лечения не требуется.
Нет, но вы можете выбрать удобный и назначить его следующим образом:
Поместите приведенные выше строки кода lisp в ваш файл init.el.
Это работает в большинстве тривиальных случаев, но трудно предсказать, какие конфликты могут возникнуть с какими-либо активными режимами при вызове этой функции.
Что делать, если буфер не посещает допустимое имя файла, например, рабочий буфер? Затем эта ошибка отображается в эхо-области:
Выбор правильного буфера с правильным именем файла перед вызовом ярлыка позволит избежать таких ошибок.
Существует несколько других решений, подобных приведенным выше, но они в основном отличаются тем, как они обрабатывают исключения или переопределения для любых конфликтов. Например, некоторые используют мод-хуки, чтобы сделать эту функцию доступной только в определенных режимах.
источник
enable-recursive-minibuffers
.(define-key minibuffer-local-map (kbd "C-c f") 'name-of-the-file)'. In addition to this useful function I also created the function
имениC-c b
буфера можно использовать следующую привязку, к которой я привязал, и которая вставляет текущее имя буфера.При использовании
dired-x
сочетания клавишC-x C-j
обязательноdired-jump
. Таким образом, из вашего файлового буфера вы попадаете в правую строку и можете скопировать имя файла с помощьюw
. И тогда вы сможете вставить его в мини-буфер.Другая возможность облегчить ввод имени файла - это стандартное завершение мини-буфера Emacs. Просто введите первые символы вашего имени файла, а затем нажмите клавишу TAB.
источник
w
(командуdired-copy-filename-as-kill
).Вопрос просит существующую команду Emacs сделать это.
Как говорилось ранее:
который оказывается ответом на этот вопрос.
источник