Jaka jest użyteczność „wymiany-punkt-i-znak”?

16

exchange-point-and-markKomenda jest związany C-x C-x, ale nie mogę myśleć o żadnych przypadków użycia, które sprawiają, że zasługuje na taki wybitny wiążące.

Jak mogę użyć exchange-point-and-markdo ulepszenia techniki edycji?

Matthew Piziak
źródło

Odpowiedzi:

19

Są dwa przypadki, o których mogę myśleć: reaktywacja regionu i dostosowanie wielkości regionu.

Najczęściej używam tego wiązania do reaktywacji regionu po wykonaniu polecenia, które go dezaktywuje lub po zrobieniu czegoś, co ustawia znak i przesuwa punkt bez aktywacji regionu.

Na przykład wykonaj Cs i wyszukaj coś do przodu. Naciśnij RET, aby wyjść z wyszukiwania, a następnie Cx Cx, aby zaznaczyć wszystko od miejsca rozpoczęcia wyszukiwania.

Kolejny przykład, który robię dużo, gdy chcę dołączyć przykładowy elisp do odpowiedzi StackExchange:

  1. Zaznacz fragment kodu, który chcę skopiować.
  2. Naciśnij klawisz Cu Cx TAB, aby wciąć kod o 4 spacje. W ten sposób będzie renderowany jako kod tutaj na stronie. Ten krok dezaktywuje region.
  3. Naciśnij Cx Cx, aby ponownie aktywować region, a następnie Mw, aby skopiować go do schowka, aby można go było wkleić w odpowiedzi StackExchange.

Drugi przypadek ma miejsce, gdy zaznaczasz region i chcesz go rozszerzyć / zmniejszyć. W takim przypadku wygodnie jest przeskoczyć na „drugi koniec” regionu, przesunąć go, a następnie skoczyć z powrotem. Jeśli region jest już aktywny, wówczas naciśnięcie Cx Cx pozostawi go aktywnym, umożliwiając przesunięcie dowolnego końca.

glucas
źródło
17

Zapytaj Emacsa: C-h r i exchange-point-and-mark RETlub lepiej C-h r i C-x C-x RET. Spowoduje to przejście do informacji pokazanych poniżej.

Oto, co mówi instrukcja Emacsa, węzeł Ustawienie znaku w odpowiedzi na twoje pytanie:

C-x C-xprzydaje się, gdy jesteś zadowolony z pozycji punktu, ale chcesz przesunąć drugi koniec regionu (tam, gdzie jest znak) . W C-x C-xrazie potrzeby ponowne użycie powoduje umieszczenie znaku w nowej pozycji, tak aby punkt był z powrotem w pierwotnej pozycji. Zwykle, jeśli znak jest nieaktywny, to polecenie najpierw reaktywuje znak, gdziekolwiek był ostatnio ustawiony, aby upewnić się, że region jest podświetlony. Jednak jeśli wywołasz go z argumentem przedrostka, pozostawia znak nieaktywny, a region nie jest podświetlony; możesz użyć tego, aby przejść do znaku w sposób podobny do C-u C-<SPC>.

I tak to mówi o tym w węźle Disabled Transient Mark :

Wyłączenie [ transient-mark-mode] przełącza Emacsa na alternatywny tryb pracy:

  • Ustawienie znacznika za pomocą poleceń takich jak C-<SPC>lub C-x C-xnie powoduje podświetlenia regionu. Dlatego nie możesz stwierdzić, patrząc na znak; musisz pamiętać.

    Zwykłym rozwiązaniem tego problemu jest ustawienie znaku, a następnie użycie go wkrótce, zanim zapomnisz, gdzie on jest. Możesz także sprawdzić, gdzie znajduje się znak, używającC-x C-x , który zamienia pozycje punktu i znaku - patrz Ustawienie Znaku .

Gdy tryb oznaczania przejściowego jest wyłączony, możesz go tymczasowo aktywować za pomocą C-<SPC> C-<SPC>lub C-u C-x C-x.

i:

C-u C-x C-x Wymień punkt i znak, aktywuj znak i tymczasowo włącz tryb Oznaczenia przejściowego, aż znak zostanie następnie dezaktywowany. (To jest C-x C-xpolecenie exchange-point-and-markz argumentem przedrostka).

Rysował
źródło
8

Używam tego, gdy straciłem wybór z powodu operacji, która go usunęła i chcę przywrócić wybór. Jednym z takich scenariuszy byłoby:

  1. Wybierz prostokąt.
  2. Zabij to.
  3. Cofnij zabijanie prostokąta.
  4. C-x C-x aby przywrócić zaznaczenie do prostokąta.

Dzieje się tak, gdy chcę wykonać kopię zapasową wybranego obszaru ad hoc i poeksperymentować z kopią, na przykład chcę znaleźć i wymienić, ale nie mogę wymyślić sposobu, aby to zrobić w sposób, który nie niszczy tekstu, który powinien pozostać, więc później cofnę go z kopii.

wvxvw
źródło
8

Pozostałe odpowiedzi koncentrują się na użyteczności, C-x C-xkiedy transient-mark-modejest aktywny. Ale C-x C-xpoprzedza transient-mark-modei jest użyteczny niezależnie od niego.

Główną rolą C-x C-xjest zamiana punktu i oznaczenie. Jest to przydatne, gdy edytujesz dwa punkty w jednym buforze i z jakiegoś powodu nie chcesz dzielić bieżącego okna. Zrób trochę edycji, ustaw znak, przejdź do innego punktu w buforze, zrób trochę edycji C-x C-x, zrób trochę edycji w poprzednim miejscu C-x C-x, zrób więcej edycji, ad nauseam. (Jeśli nie planujesz wracać do drugiego punktu, C-u C-SPCmoże być bardziej intuicyjny. Spójrz na znacznik w instrukcji Emacsa.)

Kiedy transient-mark-modejest wyłączony, C-x C-xma jeszcze jeden ważny cel: pozwala dowiedzieć się, gdzie znajduje się region. C-x C-x, jeszcze raz szybki rzut oka na punkt C-x C-x.

(A jeśli zastanawiasz się - tak, niektórzy z nas nadal wolą używać Emacsa z transient-mark-modewyłączonymi).

jch
źródło