Uma das principais características que sinto falta sobre o Vim, é que ele sempre salva o nome do arquivo atual no %
buffer ( mais informações . Isso permite lançar comandos facilmente como:
;; compile current file
:! gcc %
;; source current file (useful when I'm editing .vimrc
:source %
;; get the size of current file
:! du -sh %
;; etc, etc...
Eu gostaria de ter uma funcionalidade semelhante em emacs
(versão 24, se isso faz alguma diferença), ou seja, ter uma maneira fácil de inserir o nome do arquivo aberto no buffer atual.
Exemplos do que eu quero fazer
Aqui eu descrevo alguns casos básicos de uso para explicar melhor quando sinto a necessidade de tal atalho
-
Compile: Quando eu digito M-x compile
emacs me pede um comando de compilação. Gostaria de inserir gcc (current-buffer)
facilmente.
-
Load-file: quando estou editando meu arquivo .emacs, gostaria de carregá-lo imediatamente para testar as alterações. A maneira que eu faço é M-x load-file
e então eu sempre soletro o nome . e m a < kbd> c s . Eu gostaria de ter um atalho.
-
Lançar processos externos: Eu dei du -sh
como exemplo, apenas para ilustrar que eu quero que o atalho também esteja disponível quando eu executar os comandos do shell com M-!
O que eu encontrei até agora
-
Esta questão aqui em U & L. As respostas dadas são basicamente mostrando onde encontrar o nome do arquivo de um buffer, então pode-se adicioná-lo ao kill-ring. Não é exatamente o que estou procurando, não quero ter que matar manualmente o nome do arquivo antes de usá-lo. (Também soluções descritas em ambas as respostas não parecem funcionar tão bem no meu emacs e exigem pressionamentos de teclas adicionais, tornando-os um pouco de dor).
EDITAR : Um pouco não relacionado, descobri por que essas soluções não funcionam. Eu tenho IDO ativado, para melhor ou pior.
- A função
(current-buffer)
descrita no manual retorna o nome do arquivo no buffer atual, mas em nenhum lugar nos exemplos que dei acima, estou avaliando o código elisp. Existe uma maneira de inserir o resultado da avaliação desta função em um (mini) buffer e ligando este caminho a um atalho?
Estou errado em pensar assim?
Atualmente, estou aprendendo a usar o emacs (já faz alguns meses) depois de anos de uso do Vim. Eu quero evitar uma armadilha previsível usando o emacs-in-a-Vim-way . Se você acha que o que eu estou pedindo não é muito emacs-y , e deve haver uma maneira melhor (mais limpa?) De fazê-lo, por favor, mencione-o em suas respostas.