Jak przesunąć zaznaczony obszar tekstu w Emacsie o określoną liczbę spacji?

26

Piszę kod python, więc przesunięcie / przesunięcie bloków linii jest ważne, aby uniknąć przechodzenia przez każdą linię osobno. Jak mogę to zrobić bez dodatku? Czy istnieje jakiś rodzaj klawisza operacji, aby to zrobić?

Vass
źródło
3
Aby uzyskać odpowiedzi niezwiązane z Pythonem, zobacz emacs.stackexchange.com/q/11 i emacs.stackexchange.com/q/18 .
legoscia

Odpowiedzi:

40

Użyj polecenia indent-rigidly, które jest C-x TABdomyślnie powiązane .

Możesz określić liczbę spacji do wcięcia za pomocą argumentu przedrostka , takiego jak C-5 C-x TAB.

Możesz też wywołać polecenie, a następnie użyć strzałek w lewo / w prawo, aby interaktywnie dostosować poziom wcięcia.

glucas
źródło
jak dodać argument przedrostka?
Vass
1
Spróbuj na przykład C-5 C-x TABwprowadzić wcięcie w bieżącym regionie 5 spacji.
glucas
świetnie, ale dlaczego pierwsza linia również się nie porusza? Muszę chwycić ostatnią część linii powyżej zaznaczenia, aby utworzyć zestaw linii, które chcę przenieść.
Vass
1
Nie powinieneś wybierać niczego z poprzedniego wiersza, ale chcesz wybrać od początku pierwszego wiersza, który chcesz wciąć. Na przykład, C-aaby przejść na początek linii, C-SPCrozpocząć zaznaczanie regionu, C-n C-nprzejść w dół o kilka linii, C-5 C-x TABaby wciąć te dwie linie.
glucas
1
„za pomocą strzałek w lewo / w prawo interaktywnie dostosuj poziom wcięcia” Naprawdę? Świetny! Nie wiedziałem o tym i czasami musiałem zgadywać, ile miejsca muszę dodać lub usunąć. Mam nadzieję, że to może pomóc.
imz - Ivan Zakharyaschev
9

Jeśli używasz python-mode.el C-c >lub C-c <do przesuwania bloków w lewo lub w prawo

Lompik
źródło
dlaczego pierwsza linia zaznaczenia pozostaje niewzruszona, jeśli nie wybiorę ostatniej części linii powyżej?
Vass
Nie mogę odtworzyć tego zachowania. wszystkie linie zaznaczeń są przenoszone. Emacs 24.4
Lompik
komentarz glucas mówi, że tak się stanie, jeśli nie wybierzesz od początku linii
Vass
6

Za pomocą string-rectanglepolecenia ( C-x r t) można wstawić dowolny dowolny tekst (łącznie ze spacjami) w wybranym regionie.

Powiedzmy, że masz ten blok tekstu i chcesz wstawić 5 spacji przed wszystkimi wierszami.

abc
  def
    ghi

Najpierw wybierz region „0 kolumn”, jak pokazano poniżej (punkt znajduje się na znaku „a”, a znak znajduje się w tej samej kolumnie w wierszu zawierającym „ghi”:

▮bc
  def
▯   ghi

Teraz za pomocą string-rectanglewstaw tekst, który chcesz wstawić w wybranym regionie. W tym przykładzie wstawimy 5 spacji we wszystkich wierszach łącznie z punktem i znacznikiem.

C-x r t M-5 SPC RET

To da tekst z wcięciem poniżej siły.

     abc
       def
         ghi
Kaushal Modi
źródło
4

Jest C-x TAB(związany indent-rigidly). Podaj mu prefiks, aby wskazać, o ile spacji chcesz wciąć, wartość ujemna usuwa tyle spacji.

Harald Hanche-Olsen
źródło
0

Przekonałem się, że wciskając Alt-4, a następnie SPC, uzyskuję pożądany rezultat. Nie jestem pewien, czy jest to najlepszy sposób, ale działa również.

Vass
źródło