Eu tenho uma região de código python selecionada no emacs. Quais são as maneiras mais eficientes de recuar e desanuviar cada linha por 4 espaços?
Idealmente, eu gostaria de algo que não seja sensível ao contexto (por exemplo, me permitirá recuar passagens dentro de documentos em que a indentação não esteja relacionada à sintaxe do python).
Minha linha de modo é exibida (Python)
. Pesquisando na web eu encontrei um monte de discussão sobre usando python-mode
em vez de python
, mas eu só comecei a usar emacs há alguns dias por isso estou cauteloso em mudar os padrões antes de eu ter tido a chance de entender e eles. Se mudar para python-mode
é a melhor opção, fico feliz em aceitar isso como resposta.
O que eu tentei (no manual):
<TAB>
sem efeitoC-M-\
sem efeitoC-x <TAB>
(recuar rigidamente) recuar todas as linhas por uma coluna (e desmarcar a região)M-i
recua uma primeira linha por uma tabulação (comprimento de 8 espaços)C-M-q
- "CMq está indefinido"
A única maneira que encontrei é usar regex-replace, mas é um número terrível de pressionamentos de tecla para uma tarefa tão simples.
fonte
python-indent-shift-left
.indent-rigidly
usa um argumento de prefixo indicando quanto recuar,C-u 42 C-x TAB
recua por 42 colunas e, como o argumento de prefixo padrão é 4,C-u C-x TAB
recua por 4 colunas.Se você deseja selecionar a região novamente, faça-o
C-x C-x
depois.fonte
Use o comando indent-rigidly com um prefixo numérico.
C-u 4 M-x indent-rigidly
recuar a região em quatro espaços,C-u -4 M-x indent-rigidly
para remover quatro espaços.fonte
Cx Cx marca o código e, em seguida, Mx recuo para o modo de tabulação
Essa é a salvaguarda se você pressionou a guia para cada linha.
fonte
Você também pode usar o modo de coluna.
Selecione as linhas no modo de coluna e adicione quatro espaços a todos eles ao mesmo tempo:
C-<space>
definir marcaC-x r t
para entrar no modo de coluna (ouC-<RET>
se você tiver o modo CUA)<space><space><space><space><RET>
Você pode fazer uma manobra semelhante para excluir quatro espaços - basta incluir 4 colunas na região marcada (etapas 2-3) e pressionar
<DEL>
fonte
Atualizando a solução de Chen acima, atualmente (testado no Emacs 24.4.1), os comandos foram renomeados. Portanto, supondo que você queira recuar de acordo com a variável python-indent, os comandos são python-indent-shift-left e python-indent-shift-right. Você pode:
emiti-los digitando
M-x python-indent-shift-right
ouM-x python-indent-shift-left
use os atalhos padrão do modo python
C-c >
eC-c <
religá-los. Por exemplo, em um teclado com um botão do Windows eu uso:
fonte
A composição é o rei do Emacs, basta combinar
M-i
com https://github.com/magnars/multiple-cursors.el e você terá seu comando de bloqueio de recuo. É você que faz:M->
N vezes (onde N é o número de linhas no bloco)M-i
fonte
Ambos
S-<LEFT>
eS-<RIGHT>
funcionam bem noPython
modo principal. É especialmente conveniente no Modo Cua ondeC-c
eC-x
comportamento mudanças de copiar / corte quando uma região está seleccionado.fonte