Como posso inserir o nome do arquivo do buffer de arquivo ativo em um comando?
Quando invoco um comando que precisa de um nome de arquivo, geralmente o faço a partir de um buffer de arquivo e quero o nome desse arquivo enquanto digito o comando no minibuffer.
Estou procurando uma hipótese C-x…que possa digitar durante a formação de uma linha de comando no minibuffer.
Portanto, se o buffer atual for um arquivo nomeado Lorem Ipsum.txt
, digite-o:
M-x grep RET 'foo' SPC C-x … RET
o M-xgrepRETapresenta um minibuffer solicitando o grep
comando. Em resposta, digitei o argumento padrão regex ( 'foo') e inseri o argumento filename ( C-x…). Esse minibuffer acabará como:
grep -nH -e 'foo' 'Lorem Ipsum.txt'
Qual comando existente obtém o nome do arquivo do buffer de arquivo atual como este? Qual é a sua ligação de chave padrão?
fonte
M-n
. Não funciona em todos os lugares, mas funciona em muitos lugares. Além disso, como você está grepping, você pode gostar de lgrep e rgrep, que são um pouco mais interativos, eu acho.Respostas:
Infelizmente, não existe um comando pronto para isso, mas podemos fazer um da seguinte maneira:
A mágica está na função de janela selecionada pelo minibuffer ; ele faz a coisa certa escolhendo o último buffer antes de o minibuffer ser ativado. Caso contrário, usar apenas o nome do arquivo de buffer não nos colocará o nome do arquivo no minibuffer. Curiosamente, a mesma função pode ser usada em um buffer ou minibuffer regular para inserir o nome do arquivo. Nenhum tratamento especial é necessário.
Não há nenhum, mas você pode escolher um conveniente e atribuí-lo da seguinte forma:
Coloque as linhas de código lisp acima no seu arquivo init.el.
Isso funciona na maioria dos casos triviais, mas difícil de prever quais conflitos podem ter com os modos que você estiver ativo ao invocar essa função.
E se o buffer não estiver visitando um nome de arquivo válido, como o buffer temporário? Então este erro é mostrado na área de eco:
Escolher um buffer válido com um nome de arquivo adequado antes de chamar o atalho evitará esses erros.
Existem várias outras soluções, como as acima, mas diferem principalmente na maneira como lidam com exceções ou substituições para qualquer conflito. Por exemplo, alguns empregam ganchos de modo para disponibilizar esta função apenas em certos modos.
fonte
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
nome do buffer` ao qual eu liguei eC-c b
que insere o nome atual do buffer.Ao usar
dired-x
o atalho do teclado,C-x C-j
é vinculadodired-jump
. Portanto, a partir do seu buffer de arquivo, você acaba na linha direcional direita e pode copiar seu nome de arquivo comw
. E então você pode colá-lo no mini buffer.Outra possibilidade para aliviar a digitação do nome do arquivo é a conclusão padrão do mini-buffer Emacs. Basta digitar os primeiros caracteres do seu nome de arquivo e, em seguida, TAB.
fonte
w
(comandodired-copy-filename-as-kill
).A pergunta pede um comando existente do Emacs para fazer isso.
Como dito anteriormente:
que acaba por ser a resposta para esta pergunta.
fonte