Recuo do Emacs usando Tabs


8

Existe uma maneira de fazer o código de recuo do Emacs usando apenas guias globalmente e não espaços. Eu sei do comando tabify. Eu preferiria o recuo automatizado para usar guias em vez de uma mistura de guias e espaços como a configuração padrão.

Respostas:


7

Bem, para recuar com guias, você deve garantir que indent-tabs-modeseja t(qual é o valor padrão). Mas, para obter apenas guias, você precisa ajustar o modo que está fazendo o recuo, de modo que cada linha seja recuada por um múltiplo do seu tab-width(padrão 8). Por exemplo, no modo C, você pode tentar definir c-basic-offset8.

Ou você pode reduzir o tab-widthvalor para um valor menor, para que o Emacs não precise usar espaços para atingir cada nível de indentação. Mas se você fizer isso, todo mundo que precisar trabalhar no seu código (e usar as paradas de tabulação padrão de 8 caracteres) ficará irritado.

Peço que você reconsidere. Pessoalmente, acho irritante trabalhar com código recuado com guias, especialmente se elas não parecem ser 8 guias de espaço. (O pior é o código em que algumas linhas usam espaços, algumas linhas usam guias e claramente não são 8 guias de espaço.) Faça um favor a todos nós e apenas (setq indent-tabs-mode nil).


Eu marcaria essa pergunta para a segunda largura da guia de configuração do paragragh e o comentário não mistura guias e espaços. Mas se a sua largura de guia é definir a edição recuo é muito mais fácil com um guia para cada nível, em vez de vários espaços
user151019

Acho que seu terceiro parágrafo geralmente é útil, mas geralmente não conseguimos controlar o estilo de indentação do autor original, por exemplo, a quem estamos enviando solicitações de pull / mesclagem. Eu tenho minhas preferências, elas têm as deles. Eu acho que é respeitoso usar o estilo de indentação deles em um nível razoável, então ocasionalmente a escolha não é nossa .
R2evans

7

O Emacs vem com vários estilos predefinidos para indentação C, ou você pode escrever o seu próprio se nenhum atender às suas necessidades. Entre os estilos padrão , parece que você está procurando linux(o estilo usado na fonte do kernel do Linux), que possui recuos de 8 colunas e usa caracteres de tabulação de largura 8.

Você pode fazer dessas configurações o estilo padrão para C colocando-o em .emacs:

(setq c-default-style "linux")
(defun my-c-mode-hook ()
  (setq indent-tabs-mode t)
  (setq tab-width 8))
(add-hook 'c-mode-hook 'my-c-mode-hook)

Entretanto, certifique-se de não usar essas configurações ao colaborar com outras pessoas com preferências diferentes. Em particular, usar guias fará de você um inimigo. Se um arquivo específico deve ser mantido em um estilo específico, você pode usar variáveis ​​de arquivo para garantir que todos que editam o arquivo no Emacs usem as mesmas configurações:

/*
 * Local Variables:
 * c-file-style: "linux"
 * indent-tabs-mode: t
 * tab-width: 8
 * End:
 */

Se você tiver um projeto inteiro com arquivos C recuados da mesma forma, use variáveis ​​de diretório em vez de poluir todos os arquivos. Crie um arquivo chamado .dir-locals.elcom conteúdo como o seguinte:

((c-mode . ((c-file-style . "linux")
            (indent-tabs-mode . t)
            (tab-width . 8))))

1

As abas me incomodam, mas eu tive que descobrir como fazer o emacs usar apenas abas para recuar para que eu pudesse trabalhar no código de outra pessoa. Aqui está o que funcionou para mim:

(defun tmp/change-indent ()
  (interactive)
  (setq indent-tabs-mode t)
  (setq tab-width 2))

Notei que antes de mexer em qualquer coisa, quando eu pressionava a tecla tab, ela era recuada automaticamente por 2 colunas. Definir "tab-width" para coincidir com o deslocamento de 2 colunas permitiu ao emacs usar guias ao fazer a formatação automática. Eu estava trabalhando no modo nxml, mas acho que isso deve funcionar para qualquer modo.


Agradável. Isso também me incomodou. Não é intuitivo precisar definir a largura da guia para corresponder ao deslocamento da coluna. Bom trabalho. Eu usei essa idéia em c ++ - mode
Sean Lynch
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.