Quelle commande existante obtient le nom de fichier du tampon de fichier actuel comme celui-ci?
Malheureusement, il n'y a pas de commande prête à l'emploi pour cela, mais nous pouvons en créer une comme suit:
(defun name-of-the-file ()
"Gets the name of the file the current buffer is based on."
(interactive)
(insert (buffer-file-name (window-buffer (minibuffer-selected-window)))))
La magie réside dans la fonction de fenêtre sélectionnée du mini-tampon ; il fait la bonne chose en choisissant le dernier tampon avant l'activation du mini-tampon. Sinon, utiliser uniquement le nom du fichier tampon ne nous donnera pas le nom de fichier dans le mini -tampon . Fait intéressant, la même fonction peut être utilisée dans un tampon ordinaire ou un mini-tampon pour insérer le nom du fichier. Aucun traitement spécial n'est nécessaire.
Quelle est sa liaison de clé par défaut?
Il n'y en a pas, mais vous pouvez en choisir un qui vous convient et l'affecter comme suit:
(global-set-key (kbd "C-c f") 'name-of-the-file)
Placez les lignes de code lisp ci-dessus dans votre fichier init.el.
Cela fonctionne dans la plupart des cas triviaux, mais il est difficile de prédire quels conflits il pourrait avoir avec les modes que vous avez actifs lors de l'appel de cette fonction.
Que faire si le tampon ne visite pas un nom de fichier valide, tel que le tampon de travail? Ensuite, cette erreur est affichée dans la zone d'écho:
name-of-the-file: Wrong type argument: char-or-string-p, nil
Choisir un tampon valide avec un nom de fichier correct avant d'appeler le raccourci évitera de telles erreurs.
Il existe plusieurs autres solutions comme ci-dessus, mais elles diffèrent principalement dans la façon dont elles gèrent les exceptions ou les remplacements pour tout conflit. Par exemple, certains utilisent des hooks de mode pour rendre cette fonction disponible uniquement dans certains modes.
M-n
. Cela ne fonctionne pas partout, mais fonctionne dans de nombreux endroits. De plus, comme vous êtes en train de vous réjouir, vous aimerez peut-être lgrep et rgrep, qui sont un peu plus interactifs, je pense.