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?


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.


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


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

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.


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.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.