Como desativo completamente toda a indentação automática no Emacs? Preciso desabilitá-lo pelo menos para o modo Fundamental, mas estou bem com ele sendo desabilitado globalmente para a sessão atual.
Por favor, leia o restante desta pergunta antes de declarar uma duplicata. Todas as outras respostas que encontrei são para uma desativação muito mais direcionada do recuo. Eu realmente quero desativar completamente todo o recuo automático durante toda a sessão.
Definir electric-layout-mode
para nil
não funciona.
Detalhes
Às vezes, gosto de compor grandes mensagens de confirmação do Git com meu editor de texto ASCII do Windows. Essas mensagens freqüentemente têm listas de marcadores, blocos de código ou outras coisas em que a formatação precisa no meu documento de origem é significativa. Minha base de código está no Linux e eu me conecto à caixa usando um cliente SSH somente texto. Quando o Git entra no Emacs para editar a mensagem de confirmação, quero poder copiar a mensagem de confirmação de origem na área de transferência do Windows e colá-la usando os comandos de colar do Windows. Da perspectiva do Emacs, estou digitando o que foi encontrado no arquivo de texto do Windows. Infelizmente, quando o Emacs vê linhas recuadas, ele adiciona sua própria indentação automática, então recebo esse enorme triângulo de espaços em branco ao longo da borda esquerda do buffer.
Estou usando o GNU Emacs 24.3.1.
Gambiarra
Minha solução atual é transferir meu arquivo de texto do Windows para um sistema de arquivos montado pelo meu host Linux, carregar o arquivo no Emacs e usar kill e yank para transferir o conteúdo. Isso é um pouco desajeitado.
Exemplo
Aqui está um exemplo de bloco de texto:
a
- b
c
d
Aqui está como aparece quando colo isso no Emacs-under-ssh através da pasta MSWin:
a
- b
c
d
Se eu pressionar C-h l
depois de colar, eis o que vejo. Observe que as novas linhas são inseridas usando C-j
, não RET
.
a C-j C-j SPC SPC - SPC b C-j SPC SPC SPC SPC c C-j
SPC SPC SPC SPC d C-j C-h l
fonte
hack-local-variables-hook
- para desfazer essencialmente o que outros modos principais configuram como parte de seu inicialização padrão.fundamental-mode
é apenas uma pequena função internasimple.el
- ou seja(kill-all-local-variables) (run-mode-hooks)
,.M-x find-function RET fundamental-mode RET
- você pode modificar / criar o seu próprio, conforme necessário; no entanto, se você alterar o nome, ele não será usado por algumas funções - portanto, considere manter o mesmo nome.:set paste
? Isso basicamente diz "não toque no texto colado de forma alguma". O que também inclui recuo automático.Respostas:
Emacs ≤24,3
Pressionar RET não recua por padrão (exceto em alguns modos de programação, para os quais você precisa verificar a configuração específica do modo, por exemplo, configurações “elétricas”).
Os terminais Unix normalmente colam um caractere de retorno de carro quando o conteúdo da área de transferência contém uma nova linha (representada pelo caractere de alimentação de linha). No Emacs, um retorno de carro se parece com a
RET
chave (na verdade,RET
é o caractere de retorno de carro), enquanto um feed de linha se parece com (é)C-j
.No entanto, no seu caso, colar uma nova linha resulta em a
C-j
, que no Emacs está vinculado ao comandonewline-and-indent
. Como o nome indica, este comando recua. Não sei se o PuTTY tem uma configuração que você pode alterar. Se você deseja corrigir o problema no final do Emacs, há uma solução fácil que eu acho que você não vai se importar: ligarC-j
paranewline
(o mesmo queRET
).Emacs ≥24,4
No Emacs 24.4, o modo de avanço elétrico é ativado por padrão. É um modo secundário global, para que você possa desativá-lo em qualquer lugar chamando
(electric-indent-mode 0)
e alterná-lo interativamenteM-x electric-indent-mode RET
.Você pode encontrar essas informações no manual ou consultando a documentação do comando chamado pressionando Return(pressione
C-h k RET
).Você pode ativá-lo em um buffer específico com
electric-indent-local-mode
. Alguns modos de programação (especialmente os de terceiros) podem ter seus próprios recursos de recuo automático que não seguem as configurações do modo Recuo elétrico.fonte
electric-indent-mode
está desativado por padrão (isso é consistente com o que você disse porque estou usando o Emacs 24.3.1). Ativá-lo e desativá-lo não ajuda.electric-indent-local-mode
não está disponível para mim viaM-x
. Ajuda onRET
menciona três configurações:use-hard-newlines
,auto-fill-function
, efill-column
. Alternando ou modificar os viaM-x use-hard-lines
,M-x auto-fill-mode
eM-x set-fill-column RET 0 RET
não ajuda.emacs -q
? Por favor, cole um texto breve contendo uma nova linha (digamosfoo
nova linhabar
) no Emacs e pressioneC-h l
, o que você vê?… f o o RET b a r
ou… f o o C-j b a r
ou… f o o RET C-j bar
ou algo mais? Em que terminal você executa o cliente SSH?-q
não ajuda (por exemploemacs -q -nw --no-desktop
). Eu vejo emC-j
vez deRET
. Estou usando o PuTTY 0.63 como meu cliente SSH. Eu vejo o mesmo comportamento comTERM
definido comoscreen
exterm
.global-set-key
hack corrigiu o problema. Vou descobrir uma maneira de configurar meusEDITOR
aliases para invocá-lo automaticamente na inicialização ao editar mensagens de confirmação do Git. Novas linhas estão sendo coladas em vez de retornos de carro, porque eu configurei meu editor de texto favorito do Windows para usar as terminações de linha no estilo UNIX em vez das no Windows.Você também pode tentar o modo de colar entre colchetes. Esse é um recurso do emulador de terminal (PuTTY, neste caso, versões 0.63 e posteriores), que usa seqüências de escape para sinalizar que o usuário está colando algo e, em seguida, novamente quando a pasta termina. Há um pacote Emacs chamado
bracketed-paste
que você pode instalar, ele permite que o Emacs reconheça as seqüências de escape e faça a transição para um mapa de teclas mais seguro pela duração da colagem. Isso não apenas impede que o recuo seja confuso, como também impede que uma pasta não autorizada execute comandos na sua sessão do emacsM-x
.fonte