Jakie są korzyści z używania buforów pośrednich ? W jakich okolicznościach są one przydatne?
Jakie są korzyści z używania buforów pośrednich ? W jakich okolicznościach są one przydatne?
Odpowiedzi:
Aby zobaczyć i edytować wiele lokalizacji tego samego bufora. Nie musisz więc przewijać długiego bufora, ale po prostu przełączyć okno na widoczny region. Każdy sklonowany bufor ma także inne właściwości znaku, zwężenia i inne właściwości bufora. Jeśli nie używasz bufora pośredniego, ale tworzysz kolejne okno tego samego bufora, wtedy wszystko jest udostępniane i nie możesz wykonywać innych zaawansowanych funkcji poza przeglądaniem i edytowaniem różnych lokalizacji. Na przykład za pomocą bufora pośredniego można złożyć cały blok kodu, skutecznie utworzyć „drzewo znaczników” bez wpływu na oryginalny bufor. Za pomocą okna oba bufory w obu oknach są składane, ponieważ oba bufory są takie same.
Podsumowując, bufor pośredni to zupełnie inny bufor, który akurat współdzieli ten sam tekst i plik w oryginalnym buforze, więc kiedy zapisujesz sklonowany bufor, zapisuje on również oryginalny plik.
Jeden przypadek użycia polega na użyciu innego trybu głównego w jednej części pliku.
Na przykład kiedyś pracowałem z dokumentami XML z kodem wewnątrz niektórych elementów. Chciałem móc edytować cały dokument tak, jakby to był xml, ale nadal mam wszystkie funkcje trybu głównego dla języka programowania osadzone w niektórych elementach, więc zawęziłem się do treści tych elementów w buforze pośrednim, w którym działał odpowiedni tryb główny.
Oto funkcja z mojej konfiguracji, której używam do tego:
(defun indirect-region (start end)
"Edit the current region in another indirect buffer.
Prompt for a major mode to activate."
(interactive "r")
(let ((buffer-name (generate-new-buffer-name "*indirect*"))
(mode (intern
(completing-read
"Mode: "
(mapcar (lambda (e)
(list (symbol-name e)))
(apropos-internal "-mode$" 'commandp))
nil t))))
(pop-to-buffer (make-indirect-buffer (current-buffer) buffer-name))
(funcall mode)
(narrow-to-region start end)
(goto-char (point-min))
(shrink-window-if-larger-than-buffer)))
Uwaga: nie jest to idealne, takie jak blokowanie czcionek wymaga specjalnej dodatkowej pracy do użycia w tym scenariuszu.
Bufory pośrednie dają wiele widoków tego samego bufora, w szczególności wiele zawężeń, z których każdy działa pod wieloma względami jak oddzielny bufor.
Jak narrow-indirect.el
mówi komentarz do biblioteki :
Możesz użyć buforów pośrednich na więcej niż myślisz. Możesz użyć klonów pobranych z części buforów Dired, na przykład, aby uzyskać przydatne (aktywne) widoki do listy katalogów. Istnieje tylko kilka klawiszy / poleceń (takich jak
g
aktualizacja listy), które nie działają, ponieważ zależą od widoku całego bufora Dired. Eksperymentuj, a bez wątpienia znajdziesz ciekawe nowe zastosowania buforów pośrednich.