Jakie istniejące polecenie pobiera nazwę bieżącego bufora plików?
Niestety nie ma gotowego polecenia do tego, ale możemy je wykonać w następujący sposób:
(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)))))
Magia polega na funkcji okna wybranego przez minibufor ; robi to dobrze, wybierając ostatni bufor przed aktywacją minibufora. W przeciwnym razie użycie tylko nazwy pliku-bufora nie spowoduje przeniesienia nazwy pliku do minibufora. Co ciekawe, tej samej funkcji można użyć w zwykłym buforze lub minibuforze do wstawienia nazwy pliku. Nie jest wymagane specjalne leczenie.
Jakie jest domyślne przypisanie klucza?
Nie ma żadnego, ale możesz wybrać wygodny i przypisać go w następujący sposób:
(global-set-key (kbd "C-c f") 'name-of-the-file)
Umieść powyższe wiersze kodu lisp w pliku init.el.
Działa to w najbardziej trywialnych przypadkach, ale trudno przewidzieć, jakie konflikty może mieć z jakimikolwiek trybami aktywnymi podczas wywoływania tej funkcji.
Co jeśli bufor nie odwiedza prawidłowej nazwy pliku, takiej jak bufor scratch? Następnie ten błąd jest wyświetlany w obszarze echa:
name-of-the-file: Wrong type argument: char-or-string-p, nil
Wybranie prawidłowego bufora z poprawną nazwą pliku przed wywołaniem skrótu pozwoli uniknąć takich błędów.
Istnieje kilka innych rozwiązań, takich jak powyższe, ale różnią się one głównie sposobem obsługi wyjątków lub zastąpień wszelkich konfliktów. Na przykład niektórzy stosują przechwyty trybu, aby ta funkcja była dostępna tylko w niektórych trybach.
M-n
. Nie wszędzie działa, ale działa w wielu miejscach. Ponadto, ponieważ grepujesz, możesz polubić lgrep i rgrep, które, jak sądzę, są bardziej interaktywne.