Como mudar uma área de texto selecionada no Emacs por um determinado número de espaços?

26

Como estou escrevendo código python, é importante mudar / mover blocos de linhas para evitar passar por cada linha individualmente. Como posso fazer isso sem um complemento? Existe um tipo de comando de pressionamento de tecla de operação para fazer isso?

Vass
fonte
3
Para respostas não específicas do Python, consulte emacs.stackexchange.com/q/11 e emacs.stackexchange.com/q/18 .
legoscia

Respostas:

40

Use o comando indent-rigidly, que está vinculado C-x TABpor padrão.

Você pode especificar o número de espaços a serem recuados usando um argumento de prefixo , como C-5 C-x TAB.

Ou você pode invocar o comando e, em seguida, usar as setas esquerda / direita para ajustar interativamente o nível de recuo.

glucas
fonte
como você adiciona um argumento de prefixo?
Vass
11
Tente, por exemplo, C-5 C-x TABrecuar a região atual 5 espaços.
glucas
ótimo, mas por que a primeira linha não se move tão bem? Eu tenho que pegar a última parte da linha acima da seleção para fazer o conjunto de linhas que eu quero mover.
Vass
11
Você não precisa selecionar nada da linha anterior, mas deseja selecionar o início da primeira linha que deseja recuar. Por exemplo, C-apara ir para o início da linha, C-SPCpara começar a marcar a região, C-n C-npara descer algumas linhas, C-5 C-x TABpara recuar essas duas linhas.
glucas
11
"use as setas esquerda / direita para ajustar interativamente o nível de indentação" Sério? Ótimo! Eu não sabia disso, e às vezes tinha que adivinhar quantos espaços eu precisava adicionar ou remover. Espero que isso possa ajudar.
imz - Ivan Zakharyaschev
9

Se você estiver usando o python-mode.el C-c >ou C-c <para deslocar os blocos para a esquerda ou direita

Lompik
fonte
como a primeira linha da seleção permanece inalterada se eu não selecionar a última parte da linha acima dela?
Vass
Não consigo reproduzir esse comportamento. todas as linhas de uma seleção são movidas. Emacs 24.4
Lompik
O comentário de glucas diz que isso acontecerá se você não selecionar desde o início da linha
Vass 21/02
6

O string-rectanglecomando ( C-x r t) pode ser usado para inserir qualquer texto arbitrário (espaços incluídos) em uma região selecionada.

Digamos que você tenha esse bloco de texto e deseje inserir 5 espaços na frente de todas as linhas.

abc
  def
    ghi

Primeiro, selecione uma região "0 coluna", como mostrado abaixo (o ponto está no caractere 'a' e a marca está na mesma coluna na linha que contém 'ghi':

▮bc
  def
▯   ghi

Agora usando string-rectangle, insira o texto que você deseja inserir na região selecionada. Neste exemplo, inseriremos 5 espaços em todas as linhas, incluindo e entre o ponto e a marca.

C-x r t M-5 SPC RET

Isso fornecerá o texto recuado de força abaixo.

     abc
       def
         ghi
Kaushal Modi
fonte
4

Existe C-x TAB(vinculado a indent-rigidly). Atribua um argumento de prefixo para indicar quantos espaços você deseja recuar; o negativo remove esses espaços.

Harald Hanche-Olsen
fonte
0

Descobri que, pressionando Alt-4 e, em seguida, SPC, obtenho o resultado desejado. Não tenho certeza se essa é a melhor maneira, mas funciona também.

Vass
fonte