emacs: jak wciąć / cofnąć region kodu python o 4 spacje?

60

Mam region kodu Pythona wybrany w emacsie. Jakie są najbardziej skuteczne sposoby wcięcia i cofnięcia wcięcia każdej linii w nim o 4 spacje?

Idealnie chciałbym coś, co nie jest zależne od kontekstu (np. Pozwoli mi na wcięcie fragmentów w dokumentach, gdzie wcięcie nie odnosi się do składni Pythona).

Linia mojego trybu pokazuje (Python). Przeszukując Internet, znalazłem wiele dyskusji na temat używania python-modezamiast python, ale zacząłem używać emacsa dopiero kilka dni temu, więc obawiam się zmieniać domyślne ustawienia, zanim będę miał okazję je zrozumieć. Jeśli zmiana na python-modejest najlepszą opcją, chętnie przyjmuję to jako odpowiedź.

Co próbowałem (z instrukcji):

  • <TAB> bez efektu
  • C-M-\ bez efektu
  • C-x <TAB> (wcięcie sztywno) wcięcie każdej linii o jedną kolumnę (i odznaczenie regionu)
  • M-i wcina jeden pierwszy wiersz tabulatorem (długość 8 spacji)
  • C-M-q - „CMq jest niezdefiniowany”

Jedyny sposób, jaki znalazłem, to użycie wyrażenia regularnego, ale to straszna liczba naciśnięć klawiszy dla tak prostego zadania.

Ian Mackinnon
źródło

Odpowiedzi:

69

Zakładając, że zmienna python-indentma wartość 4:

M-x python-shift-right (C-c >)
M-x python-shift-left  (C-c <)
Chen Levy
źródło
5
Musiałem zrobić python-indent-shift-left.
nnyby
17

indent-rigidlypobiera argument przedrostka wskazujący, o ile wcięcia, więc C-u 42 C-x TABwcięcia o 42 kolumny, a ponieważ domyślny argument przedrostka to 4, C-u C-x TABwcięcia o 4 kolumny.

Jeśli chcesz ponownie wybrać region, zrób to C-x C-xpóźniej.

Gilles „SO- przestań być zły”
źródło
8

Użyj polecenia wcięcie sztywno z przedrostkiem numerycznym.

C-u 4 M-x indent-rigidlywcięcie regionu o cztery spacje, C-u -4 M-x indent-rigidlyusunięcie czterech spacji.

KeithB
źródło
4

Cx Cx zaznacz kod, a następnie Mx wcięcie dla trybu tabulatorów

To jest oszczędność, jeśli nacisnąłeś tab dla każdej linii.

Nestor A. Diaz
źródło
3

Możesz także użyć trybu kolumnowego.

Wybierz linie w trybie kolumnowym, a następnie dodaj do nich wszystkie cztery spacje jednocześnie:

  1. Przejdź do kolumny 1 pierwszego wiersza, w którym chcesz wprowadzić wcięcie.
  2. C-<space> ustawić znak
  3. przesuń punkt w dół do ostatnich linii (pozostań w kolumnie pierwszej)
  4. C-x r taby wejść w tryb kolumnowy (lub C-<RET>jeśli masz tryb CUA)
  5. <space><space><space><space><RET>

Możesz wykonać podobny manewr, aby usunąć cztery spacje - po prostu dołącz 4 kolumny w zaznaczonym regionie (kroki 2-3) i naciśnij <DEL>

Steve Lianoglou
źródło
3

Aktualizując powyższe rozwiązanie Chena, obecnie (testowane na Emacsie 24.4.1) zmieniono nazwę poleceń. Zakładając, że chcesz wciąć zgodnie ze zmienną python-indent, komendy to python-indent-shift-left i python-indent-shift-right. Możesz:

  1. wystaw je, wpisując M-x python-indent-shift-rightlubM-x python-indent-shift-left

  2. użyj domyślnych skrótów trybu python C-c >iC-c <

  3. powiąż je. Np. Na klawiaturze z przyciskiem Windows używam:

    (global-set-key (kbd "s-s") 'python-indent-shift-left) 
    (global-set-key (kbd "s-d") 'python-indent-shift-right)
    
Amnon Harel
źródło
0

Oba S-<LEFT>iS-<RIGHT> działają dobrze w Pythontrybie głównym. Jest to szczególnie wygodne w trybie Cua, gdzie C-ci C-xzachowanie zmienia się, aby kopiować / wycinać po wybraniu regionu.

Vincent
źródło