Una delle caratteristiche principali che mi manca di Vim è che salva sempre il nome del file corrente nel %
buffer ( maggiori informazioni ). Ciò consente di avviare comandi facilmente come:
;; compile current file
:! gcc %
;; source current file (useful when I'm editing .vimrc
:source %
;; get the size of current file
:! du -sh %
;; etc, etc...
Vorrei avere funzionalità simili in emacs
(versione 24, se questo fa alcuna differenza), vale a dire un modo semplice per inserire il nome del file aperto nel buffer corrente.
Esempi di ciò che voglio fare
Qui descrivo alcuni casi d'uso di base da spiegare meglio quando sento la necessità di tale scorciatoia
Compila: quando inserisco
M-x compile
emacs mi chiede un comando di compilazione. Vorrei entraregcc (current-buffer)
facilmente.Load-file: quando sto modificando il mio file .emacs, vorrei caricarlo subito per testare le modifiche. Il modo in cui lo faccio è
M-x load-file
e quindi scrivo sempre il nome . e m a c s. Vorrei avere una scorciatoia.Avvia processi esterni: ho fornito
du -sh
come esempio, solo per illustrare che voglio che il collegamento sia disponibile anche quando eseguo i comandi della shell conM-!
Quello che ho trovato finora
- Questa domanda qui su U&L. Le risposte fornite mostrano sostanzialmente dove trovare il nome file di un buffer in modo da poterlo aggiungere al kill-ring. Non è esattamente quello che sto cercando, non voglio uccidere manualmente il nome file prima di usarlo. (Anche le soluzioni descritte in entrambe le risposte non sembrano funzionare in modo uniforme nei miei emacs e richiedono tasti aggiuntivi che li rendono un po 'una seccatura).
EDIT : Un po 'estraneo, ho scoperto perché queste soluzioni non funzionano. Ho IDO abilitato, nel bene o nel male.
- La
(current-buffer)
funzione descritta nel manuale restituisce il nome del file nel buffer corrente, ma da nessuna parte negli esempi che ho dato sopra, sto valutando il codice elisp. C'è un modo per inserire il risultato della valutazione di questa funzione in un (mini) buffer e associare in questo modo un collegamento?
Sbaglio a pensare in questo modo?
Attualmente sto imparando a usare emacs (sono passati alcuni mesi in realtà) dopo anni di utilizzo di Vim. Voglio evitare una trappola prevedibile usando-emacs-in-a-Vim-way . Se ritieni che ciò che sto chiedendo non sia molto emacs-y , e ci dovrebbe essere un modo migliore (più pulito?) Di farlo, per favore, menzionalo nelle tue risposte.
(buffer-file-name)
mentre digiti il minibuffer, ottieni nil
, perché (current-buffer)
è il minibuffer. Puoi anche cambiare buffer mentre sei nel minibuffer, quindi è difficile tenere traccia di quale buffer è quello che pensi del buffer corrente quando il buffer corrente, come lo vede Emacs, è il minibuffer.
(global-set-key (kbd "C-i") buffer-file-name)
se desideri che sia Ctrl + I. A proposito di .emacs,M-x load-file RET
fa quello che vuoi; non hai bisogno di scrivere nulla.