Jak wybrać lub podświetlić blok w Emacs?

84

Chcę zaznaczyć lub podświetlić blok w emacsie bez użycia myszy, ale robię to z klawiatury, tak jak w trybie wizualnym vima. Jak najłatwiej to zrobić z klawiatury?

usterka systemów
źródło
2
CMhmark-defun
trailing slash

Odpowiedzi:

66

Spójrz na region-prostokąt w emacs.

Krótko mówiąc, zaczynasz selekcję jak zwykle za pomocą Control- Space, następnie zabijasz region za pomocą Control- x r ki wklejasz (lub szarpniesz ) zabity blok za pomocą Control- x r y.

Marko
źródło
11
To nie zabija regionów, zabija prostokąty, co z mojego doświadczenia znacznie różni się od tego, co robi tryb wizualny vima.
Allen
2
Czym to się różni?
Ken Williams,
73

Jeśli dobrze rozumiem pytanie, pierwotnie nie chodzi o prostokątne obszary.

C-Spc zaznacza aktualną pozycję.

Gdziekolwiek później znajduje się kursor, tekst między ostatnim znacznikiem a bieżącą pozycją jest „zaznaczony” (możesz to zaznaczyć, aktywując transient-mark-mode, ale będzie to również oznaczać, że znaki muszą zostać usunięte, jeśli nie chcesz podświetlić).

Możesz operować na tym regionie za pomocą poleceń takich jak:

C-w. . Zabij region. Powoduje to usunięcie regionu i umieszczenie go w pierścieniu zabijania.
C-y. . Szarpać. Spowoduje to wstawienie ostatniego fragmentu z pierścienia zabijania.
M-y. . Pierścień zabijania cyklu. Natychmiast po C-ytym zastępuje szarpaną część innymi fragmentami w pierścieniu zabijania.
M-w. . Zapisz region w pierścieniu zabójstw. Podoba C-w, ale nie usuwa.

To tylko podstawowe użycie. Znaki mają też inne zastosowania. Polecam tutorial ( C-h t).

Svante
źródło
6
Warto zauważyć, że C-s C-rsą one powszechnie używane w tym kontekście, aby znaleźć koniec / początek regionu. (Szczególnie przydatne w makro.)
ocodo
No cóż, to bardzo dobre komendy, ale ... Jak wybrać zaznaczony region? Przecież to mi jeszcze jest potrzebne, czyli wcinanie kodu między znaczniki.
Hi-Angel,
Region między ostatnim znacznikiem a bieżącym punktem (czyli miejscem, w którym znajduje się kursor) to wybrany region. Po prostu biegnij M-x indent-region.
Svante
@Svante Nie, nie jest zaznaczone. Chociaż indent-regiondziała dobrze, ale c-indent-line-or-region(ten, który jest powiązany z klawiszem tab ) nie. Ta ostatnia funkcja działa nie na zaznaczonych regionach, ale na wybranych , tj. Regionie, który jest podświetlony tak, jakbyś wybrał go myszą.
Hi-Angel
2
@YagamyLight Ach, możesz to zrobić, naciskając C-Spcdwa razy w miejscu, w którym umieścisz znak. To aktywuje tymczasowo tryb znacznika przejściowego (do momentu anulowania (za pomocą C-g)). Następnie przesuń punkt, aby wyświetlić wybrany region.
Svante
32

Emacs 24.4 ma teraz tryb znacznika prostokąta. Cx spacja, aby go wywołać.

Christopher M. Hobbs
źródło
1
Jak przesuwać blok prostokąta?
Stryker,
10

Mimo że C-SPC jest to powszechny sposób na rozpoczęcie oznaczania czegoś z dowolnego miejsca, często istnieją szybsze / łatwiejsze sposoby, które nie obejmują jawnego przejścia do punktów początkowych / końcowych ...

Wbudowane skróty wyboru

  • M-h- ważny sposób na oznaczenie akapitu . „Akapit” często oznacza blok kodu.

  • C-M-horaz C-M-@- odpowiednio do oznaczania seksu i defuns . Działa to w kilku językach, a nie tylko seplenienie.

  • przytrzymaj Shift - kolejny sprytny sposób na podkreślenie podczas ruchu. Np. M-S-fWybiera cały wyraz do przodu. To jest shift-select-modei jest domyślnie włączone w Emacs 24+. Na niektórych klawiaturach (innych niż szykletowe) powinieneś być w stanie przytrzymać C-S-pojedynczy mały palec.

Możesz naciskać dowolne z nich wielokrotnie, aby zwiększyć wybór.

(UWAGA: używaj C-gczęsto, aby anulować zaznaczanie podczas eksperymentowania).

Dodatki

Istnieje kilka pakietów dodatków, które usprawniają wybieranie regionów i rzeczy. Wszystko to ładnie się ze sobą gra i pasuje do różnych przypadków użycia. Użyj ich wszystkich!

  • Expand-Region : Expand region zwiększa wybrany region o jednostki semantyczne. Po prostu naciskaj klawisz, aż wybierze to, co chcesz. C-=jest dla niego zalecanym wiązaniem. Uderz go kilka razy, aby uzyskać to, czego potrzebujesz.

  • Easy-Kill : użyjM-wi mnemonika, aby wybrać różne typy rzeczy, takie jak słowa, seksu, listy itp.

  • Zop-to-Char : Podobnie jak zap-to-char , ale zapewnia dobry wybór i inne działania oparte na menu.

  • diff-hl : Podświetl niezatwierdzone zmienione regiony. Użyj,diff-hl-mark-hunkaby wybrać / oznaczyć kawałek.

Micah Elliott
źródło
7

Użyj Control-, Spaceaby ustawić znak i przesunąć kursor.

transient-mark-modeZaprezentuje wybór dla Ciebie. M- x transient-mark-mode.

Możesz skonfigurować Emacsa, aby domyślnie włączał ten tryb, używając dostosowania. M- x customize-option RET transient-mark-mode.

remvee
źródło
1

... a jeśli używasz Ubuntu i C-spcnie działa dla ciebie: musisz wyczyścić przypisanie klawisza IBus "następna metoda wprowadzania", jak w

uruchom ibus-setupi zmień przypisanie klawisza „następnej metody wprowadzania” na coś innego (lub usuń je całkowicie, klikając przycisk „…”, a następnie przycisk „Usuń”).

Cytat zaczerpnięty z odpowiedzi na pytanie SO.

serv-inc
źródło
0

Aby rozszerzyć odpowiedź Edin Salkovic, jeśli używasz trybu CUA, możesz użyć, aby rozpocząć wizualny wybór bloków. Istnieje wiele skrótów do sterowania wyborem bloków opisanych w dokumentacji CUA .

Jérôme Pouiller
źródło
-1

W Emacs 25 po prostu naciśnij C- Spacea następnie przesuń kursor w dowolne miejsce, w którym chcesz zaznaczyć / wybrać interesujący Cię obszar tekstu. Następnie możesz potrzebować tych poleceń:

  • C- wdo cięcia.
  • M- wdo kopiowania.
  • C- ydo wklejania.
Billal Begueradj
źródło