Czasami często znajduję się na przemian między dwiema funkcjami, które edytuję w połączeniu ze sobą. W takich sytuacjach żmudne i bolesne jest ciągłe C-s <functionname>
przechodzenie do innej funkcji, a następnie znalezienie dokładnego miejsca, które wcześniej edytowałem.
Jak ustawić znaczniki, a następnie z łatwością przeskakiwać między dwiema lokalizacjami w buforze?
navigation
cycling
mark-ring
registers
Vedaad Shakib
źródło
źródło
Odpowiedzi:
Okna Emacsa
C-x 2
otworzy kolejne okno (= podziel ramkę) poniżej bieżącego, dołączone do tego samego bufora. Możesz przenieść punkt w jednym oknie bez wpływu na drugie.Możesz przechodzić z jednego okna do drugiego za pomocą
C-x o
. Wbudowana biblioteka windmove zapewnia pewne funkcje, które ułatwiają nawigację między oknami.Jeśli ta metoda Ci odpowiada, możesz także przyjrzeć się buforom pośrednim .
źródło
Rejestry:
C-xrSPCbiegnie
point-to-register
C-xrjbiegnie
jump-to-register
Po wyświetleniu monitu wpisz dowolny znak, aby określić rejestr. 1
Zakładki:
C-xrmbiegnie
bookmark-set
C-xrbbiegnie
bookmark-jump
Oznacz pierścień:
C-SPCC-SPCprzesuwa bieżącą pozycję do pierścienia znacznika (bez pozostawiania go aktywnym).
C-uC-SPCwyskakuje znacznik, przeskakując do poprzedniej pozycji. Możesz użyć tego wielokrotnie, aby poruszać się po całym pierścieniu.
Zauważ, że niektóre polecenia (zwłaszcza te, które mogą przenieść cię w nieznaną lub dowolną odległość od twojej pierwotnej lokalizacji) automatycznie popchną do pierścienia znacznika, dzięki czemu będziesz mógł C-uC-SPCpóźniej wrócić. Obejmuje to
isearch
, więc po użyciu, C-saby gdzieś pójść, możesz łatwo wrócić ponownie.Punkt wymiany i znak:
I jak komentuje Tu Do, C-xC-xbiegi,
exchange-point-and-mark
które są bardzo przydatne do przeskakiwania między dwoma lokalizacjami. Aktywuje również znacznik / region, ale możesz użyć, C-SPCaby usunąć podświetlenie.1 Jeśli korzystasz z funkcji rejestru w elisp, użyj nazwy bez konfliktu z nazwą zamiast znaku, aby nie można było konfliktować z rejestrami interaktywnymi (chyba że chcesz to zrobić że).
źródło
C-x C-x
, ponieważ może przeskakiwać w obie strony między dwiema pozycjami.C-u C-SPC
wyskakuje pierścień znaku i wykonanie ponownie spowoduje przesunięcie punktu w inne miejsce.Oprócz odpowiedzi Phils istnieje jeszcze kilka opcji:
helm-semantic-or-imenu : Wyświetla wszystkie dostępne definicje w bieżącym pliku. Jeśli kursor znajduje się w definicji, podczas aktywacji zakreślacza wstępnie wybiera tę definicję.
sr-speedbar : przeglądarka plików, która wyświetla definicje w każdym pliku. Jest podobny do drzewa konspektu w IDE.
źródło
Oprócz rejestrów i znaczników (patrz odpowiedź @ phils na temat zarówno moich, jak i innych, Sople odpowiadają na temat znaczników), zakładki , szczególnie automatyczne lub tymczasowe, mogą być do tego pomocne. Potrzebujesz biblioteki Bookmark + dla tych specjalnych typów zakładek.
Automatycznie nazwana zakładka to taka, której nie trzeba nazywać. Tworzenie i usuwanie jest szybkie: wystarczy nacisnąć klawisz. Ten sam klucz tworzy lub usuwa zakładkę w punkcie. (Domyślnie jest to związane
C-x p RET
, ale oczywiście można użyć dowolnego klawisza).Zakładki z automatyczną nazwą są, podobnie jak zakładki, trwałe. Ale możesz opcjonalnie usunąć je automatycznie.
Możesz także tworzyć tymczasowe zakładki lub tymczasowo tworzyć istniejące zakładki. Możesz na przykład zdecydować, aby automatycznie nazwane zakładki były tymczasowe automatycznie.
Możesz szybko przełączać się między danym zestawem zakładek. Na przykład, aby przełączać się między automatycznie zapisanymi zakładkami, używaj poleceń
bmkp-next-autonamed-bookmark-repeat
ibmkp-previous-autonamed-bookmark-repeat
(wiążąc je z klawiszami).Lokalizacje oznaczone zakładkami można wyróżnić na różne sposoby, dzięki czemu łatwo je zauważyć.
źródło
W odniesieniu do buforów pośrednich wymienionych w przyjętej odpowiedzi ...
M-x clone-indirect-buffer
utworzy bufor pośredni dla bieżącego bufora. Do nazwy nowego bufora zostanie dodany „<2>” (lub większa liczba, jeśli masz już zduplikowane nazwy buforów). Nowy bufor zostanie otwarty w nowym oknie. Możesz wrócić do pojedynczego okna za pomocąC-x 0
lubC-x 1
.Dzięki
M-x winner-mode
możesz łatwo przełączać się między dwiema lokalizacjami.C-c <left>
/M-x winner-undo
iC-c <right>
/M-x winner-redo
przełącza między konfiguracjami okien. W takim przypadku konfiguracje będą pozycjami w dwóch buforach wyświetlających jeden plik.Uwaga: funkcje
winner-undo
iwinner-redo
działają na liście konfiguracji. Jeśli konfiguracja zostanie zmieniona, np. Punkt ruchomy, wówczas bieżąca konfiguracja stanie się głową listy iwinner-redo
będzie nieważna, w tym przypadkuwinner-undo
przywróci poprzednią pozycję.W sytuacji PO prowadzi to do następującego procesu;
M-x winner-mode
M-x clone-indirect-buffer
(nowa nazwa bufora pośredniego: File1.txt <2>)C-x 1
C-x b
(domyślnie będzie to oryginalny bufor, chyba że od kroku 3 nastąpiła zmiana na inny bufor). Spowoduje to utworzenie nowej konfiguracji, z której zwycięzca będzie mógł wrócić.Przełączenie do poprzedniej lokalizacji edycji (konfiguracji okna) zależy od tego, czy zmiana konfiguracji okna jest dokonywana między przełącznikami;
C-c <left>
/M-x winner-undo
.C-c <left>
/M-x winner-undo
do tyłu iC-c <right>
/M-x winner-redo
do przodu.Zmiana to coś innego niż inny
winner-undo
lubwinner-redo
.źródło
jeśli użyjesz
evil-mode
warstwy vim, wtedyC-o
iC-i
będzie działać tak samo.Wykonują polecenia
evil-jump-backward
/forward
.C-o
przeskakuje do starszej pozycji na liście skoków, która jest ustawiana automatycznie (znaki są ustawiane w poleceniach ruchu).C-i
idzie w odwrotną stronę. Możemy również użyćTAB
poC-o
zamiastC-i
. Tak więc korzystanie z obu funkcji zabierze Cię tam iz powrotem w bieżącym buforze.Jeśli chcesz, aby ta funkcja była buforami krzyżowymi, sprawdź
evil-jumpers
: http://melpa.org/#/evil-jumper«
Evil-jumper to dodatek do trybu zła, który zastępuje implementację listy skoków, dzięki czemu lepiej naśladuje zachowanie Vima. W szczególności przeskoczy przez granice buforów i w razie potrzeby ożywi martwe bufory. Skróconą listę można również utrwalić w pliku i przywrócić między sesjami. »
Uwaga: nauczyłem się tego na tej wiki
źródło
C-o
iC-i
zrobić?Jeśli używasz Sopli , możesz szybko nawigować między znacznikami w
mark-ring
każdym buforze lubglobal-mark-ring
(który ma jeden znacznik w każdym buforze).Robisz to za pomocą wielu poleceń
C-- C-SPC
(dla buforamark-ring
) lubC-- C-x C-SPC
(dlaglobal-mark-ring
). Po jednokrotnym naciśnięciu klawisza używasz zwykłych kluczy rowerowych Sople itp., Aby poruszać się między znacznikami pierścienia.(Te same klucze bez przedrostka arg ustawiają odpowiednio mark (
set-mark-command
) i pop globalnego mark (pop-global-mark
), tak jak robią to w waniliowym Emacsie.)Tekst wiersza każdego znacznika jest używany jako kandydat do uzupełnienia. Podczas pisania dane wejściowe minibufora zawężają kandydatów do pasujących (np. Dopasowywanie podłańcuchów lub wyrażeń regularnych). Możesz szybko przełączać się między pasującymi znacznikami lub bezpośrednio odwiedzić dowolny z nich. Możesz nawet zmienić kolejność sortowania (
C-,
) dla jazdy na rowerze.źródło
Minimalną, ale często pomocną możliwością - gdy chcesz tylko zerknąć na drugą funkcję - jest ustawienie
co przywraca dokładną początkową pozycję kursora podczas przełączania między C-vi M-v.
źródło
evil-mode
implementuje markery w stylu Vima . Możesz ustawić znaczniki za pomocą (m
, to znaczyevil-set-marker
) i przeskoczyć do znaku za pomocą backsticka `(evil-goto-mark
) lub do linii znaku'
(evil-goto-mark-line
).Dlatego możesz utworzyć znak „a” w pierwszym miejscu za pomocą
ma
, utworzyć znak „b” w drugim miejscu za pomocąma
, a następnie'a
przeskoczyć, aby zaznaczyć „a” i'b
przeskoczyć, aby zaznaczyć „b”.źródło
użyj imenu i poniżej kodu
źródło
Przez ostatnie 20 lat korzystałem z tych dwóch klejnotów:
Wiążę je z C-. i C-, i używaj ich stale, nie zdając sobie z tego sprawy.
Tak, rejestry i znaczniki i tym podobne są znacznie bardziej elastyczne i wydajne, ale wciąż jest to jeden z tych małych, szybkich pomocników, które uniemożliwiają mi przejście do innych edytorów.
źródło
Możesz również skorzystać z makr, ponieważ można je szybko powiązać z wygodnymi kluczami.
Na przykład zapisz skok do pozycji N za pomocą
<F3> M-g g N <F4>
i przypisz go do klawisza F5 za pomocąC-x C-k b <F5>
. Następnie zrób to samo z pozycjami M i F6. Od teraz możesz po prostu zamieniać F5 i F6, aby przeskakiwać między N i M.Jeszcze prostsze, ponieważ
<F4>
wykonuje ostatnie zarejestrowane makro i<C-u> F4
następne do ostatniego, możesz pominąć krok wiązania klucza i po prostu zmieniać pozycje za pomocą<F4>
i<C-u> F4
.Inną dość radykalną możliwością jest utworzenie bufora pośredniego w innym oknie za pomocą
<C-x> 4 c
. Bufor ma tę samą zawartość, ale może mieć inną pozycję punktu. Teraz po prostu zmieniaj okna<C-x> o
w zwykły sposób.źródło