Pergunta

Não tive sucesso em fazer com que o Emacs mudasse de 8 guias de espaço para 4 guias de espaço ao pressionar o botão ABA em buffers com o modo principal text-mode.Eu adicionei o seguinte ao meu .emacs:

(setq-default indent-tabs-mode nil)
(setq-default tab-width 4)

;;; And I have tried
(setq indent-tabs-mode nil)
(setq tab-width 4)

Não importa como eu mude meu .emacs arquivo (ou variáveis ​​locais do meu buffer) o ABA botão sempre faz a mesma coisa.

  1. Se não houver texto acima, recuar 8 espaços
  2. Se houver texto na linha anterior, recue até o início da segunda palavra

Por mais que eu ame o Emacs, isso está ficando chato.Existe uma maneira de fazer o Emacs recuar pelo menos 4 espaços quando não há texto na linha anterior?

Foi útil?

Solução

(customize-variable (quote tab-stop-list))

ou adicione lista de tabulação entrada para variáveis ​​de conjunto personalizado em .emacs arquivo:

(custom-set-variables
  ;; custom-set-variables was added by Custom.
  ;; If you edit it by hand, you could mess it up, so be careful.
  ;; Your init file should contain only one such instance.
  ;; If there is more than one, they won't work right.
 '(tab-stop-list (quote (4 8 12 16 20 24 28 32 36 40 44 48 52 56 60 64 68 72 76 80 84 88 92 96 100 104 108 112 116 120))))

Outras dicas

Resposta curta:

O ponto principal é dizer ao emacs para inserir o que quiser ao recuar, isso é feito alterando a função de linha de indentação.É mais fácil alterá-lo para inserir uma tabulação e depois alterar as tabulações para 4 espaços do que alterá-lo para inserir 4 espaços.A seguinte configuração resolverá seu problema:

(setq-default indent-tabs-mode nil)
(setq-default tab-width 4)
(setq indent-line-function 'insert-tab)

Explicação:

De Recuo controlado pelo modo principal no manual do emacs:

Uma função importante de cada modo principal é personalizar a chave para recuar adequadamente para o idioma que está sendo editado.

[...]

A variável de função de linha de indents é a função a ser usada por (e vários comandos, como ao chamar a região de indent) para recuar a linha atual.O comando de acordo com o modo de acordo com o modo não chama essa função.

[...]

O valor padrão é relativo para muitos modos.

Do manual indent-relative @ emacs:

Espaço-relativa-relativa para o próximo ponto de recuo na linha não branqueada anterior.

[...]

Se a linha não branqueada anterior não tiver pontos de recuo além do ponto da coluna começar, o `TAB-TAB-STOP 'será feito.

Basta alterar o valor da função indent-line-function para a função insert-tab e configurar a inserção da tabulação como 4 espaços.

Atualizar: Desde o Emacs 24.4:

tab-stop-list agora é implicitamente estendido ao infinito.Seu valor padrão é alterado para nil o que significa uma parada de tabulação a cada tab-width colunas.

o que significa que não há mais necessidade de definir tab-stop-list da maneira mostrada abaixo, pois você pode mantê-lo definido para nil.

A resposta original segue ...


Sempre me dói um pouco ver coisas como (setq tab-stop-list 4 8 12 ................) quando o number-sequence A função está lá esperando para ser usada.

(setq tab-stop-list (number-sequence 4 200 4))

ou

(defun my-generate-tab-stops (&optional width max)
  "Return a sequence suitable for `tab-stop-list'."
  (let* ((max-column (or max 200))
         (tab-width (or width tab-width))
         (count (/ max-column tab-width)))
    (number-sequence tab-width (* tab-width count) tab-width)))

(setq tab-width 4)
(setq tab-stop-list (my-generate-tab-stops))

Você pode achar mais fácil configurar suas guias da seguinte maneira:

M-x customize-group

No Customize group: solicitar entrar indent.

Você verá uma tela onde poderá definir todas as opções de recuo e configurá-las para a sessão atual ou salvá-las para todas as sessões futuras.

Se você fizer assim, você vai querer configurar um arquivo de personalizações.

(setq tab-width 4)
(setq tab-stop-list '(4 8 12 16 20 24 28 32 36 40 44 48 52 56 60 64 68 72 76 80))
(setq indent-tabs-mode nil)
(setq-default indent-tabs-mode nil)
(setq-default tab-width 4)
(setq indent-line-function 'insert-tab)
(setq c-default-style "linux") 
(setq c-basic-offset 4) 
(c-set-offset 'comment-intro 0)

isso funciona para o código C++ e para o comentário interno também

Esse problema não é causado pela falta de paradas de tabulação;é que o emacs tem um (novo?) método de aba chamado indent-relative que parece projetado para alinhar dados tabulares.A tecla TAB é mapeada para o método indent-for-tab-command, que chama qualquer método para o qual a variável indent-line-function está definida, que é um método relativo ao recuo para o modo de texto.Eu não descobri uma boa maneira de substituir a variável de função de linha de indentação (o gancho do modo de texto não está funcionando, então talvez ele esteja sendo redefinido após a execução dos ganchos de modo?), mas uma maneira simples de se livrar disso O comportamento é simplesmente descartar o método intent-for-tab-command definindo TAB para o método mais simples de tab-to-tab-stop:

(define-key text-mode-map (kbd "TAB") 'tab-to-tab-stop)

Experimente isto:

(add-hook 'text-mode-hook
  (function
   (lambda ()
     (setq tab-width 4)
     (define-key text-mode-map "\C-i" 'self-insert-command)
     )))

Isso fará com que TAB sempre insira um caractere TAB literal com tabulações a cada 4 caracteres (mas apenas no modo Texto).Se não é isso que você está pedindo, descreva o comportamento que você gostaria de ver.

Você pode adicionar essas linhas de código ao seu arquivo .emacs.Ele adiciona um gancho para o modo de texto usar insert-tab em vez de indent-relative.

(custom-set-variables
 '(indent-line-function 'insert-tab)
 '(indent-tabs-mode t)
 '(tab-width 4))
(add-hook 'text-mode-hook
      (lambda() (setq indent-line-function 'insert-tab)))

Espero que ajude.

Apenas mudar o estilo com o estilo c-set foi o suficiente para mim.

Adicione isto ao seu arquivo .emacs:

Isso definirá a largura de exibição de uma guia para 2 caracteres (altere o número 2 para o que desejar)

(setq default-tab-width 2)

Para ter certeza de que o emacs está realmente usando tabulações em vez de espaços:

(global-set-key (kbd "TAB") 'self-insert-command)

Além disso, o padrão do emacs ao retroceder em uma guia é convertê-lo em espaços e, em seguida, excluir um espaço.Isso pode ser irritante.Se quiser apenas excluir a guia, você pode fazer o seguinte:

(setq c-backspace-function 'backward-delete-char)

Aproveitar!

As personalizações podem sombrear (setq tab width 4) então use setq-default ou deixe o Customize saber o que você está fazendo.Também tive problemas parecidos com o OP e resolvi só com isso, não precisei ajustar tab-stop-list ou qualquer insert funções:

(custom-set-variables
 '(tab-width 4 't)
 )

Achei útil adicionar isto imediatamente depois (uma dica do emacsWiki):

(defvaralias 'c-basic-offset 'tab-width)
(defvaralias 'cperl-indent-level 'tab-width)

As melhores respostas não funcionaram até que escrevi isto no arquivo .emacs:

(global-set-key (kbd "TAB") 'self-insert-command)

Esta é a única solução que evita que uma tabulação seja inserida para mim, sem uma sequência ou conversão de tabulações em espaços.Ambos pareciam adequados, mas um desperdício:

(setq-default
    indent-tabs-mode nil
    tab-width 4
    tab-stop-list (quote (4 8))
)

Observe que quote precisa de dois números para funcionar (mas não mais!).

Além disso, na maioria dos modos principais (Python por exemplo), o recuo é automático no Emacs.Se você precisar recuar fora do recuo automático, use:

M-eu

Você tentou

(setq  tab-width  4)
(setq-default tab-width 4)
(setq-default indent-tabs-mode nil)

Aliás, para Modo C, Eu adiciono (setq-default c-basic-offset 4) para .emacs.Ver http://www.emacswiki.org/emacs/IndentingC para detalhes.

Do meu arquivo init, diferente porque eu queria espaços em vez de tabulações:

(add-hook 'sql-mode-hook
          (lambda ()
             (progn
               (setq-default tab-width 4)
               (setq indent-tabs-mode nil)
               (setq indent-line-function 'tab-to-tab-stop) 
               (modify-syntax-entry ?_ "w")       ; now '_' is not considered a word-delimiter
               (modify-syntax-entry ?- "w")       ; now '-' is not considered a word-delimiter 
               )))
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top