Pergunta

Eu realmente gostaria de ver um IDE de fonte proporcional, mesmo que eu mesmo tenha que construí-lo (talvez como uma extensão do Visual Studio).O que quero dizer basicamente é a edição de código no estilo MS Word que se parece com o estilo tipográfico em O livro Linguagem de Programação C++.

Quero definir paradas de tabulação para meus recuos e alinhar assinaturas de funções e linhas de instruções de atribuição, que podem ser especificadas em pontos em vez de posições fixas de caracteres.Eu também gostaria de negrito e itálico.Vários tamanhos de fonte e até folhas de estilo seriam legais.

Alguém já viu algo assim por aí ou sabe a melhor maneira de começar a construir um?

Foi útil?

Solução

Eu ainda gostaria de ver um editor popular ou implementação de IDE tabstops elásticos.

Outras dicas

Pensando com Estilo sugere usar seu software de manipulação de texto favorito, como Word ou Writer.Crie o código do seu programa em XML rico e extraia as seções relevantes do compilador com XSLT.O software “Office” fornecerá todos os recursos avançados de manipulação e formatação de texto.

Eu esperava que você fosse modificado e aceitasse essa sugestão, mas há algum sentido real na ideia.

A principal vantagem do tradicional requisito de fonte 'não proporcional' em editores de código é aliviar a tarefa de realizar a formatação do código.

Mas com toda a formatação automática interativa que ocorre nos IDEs modernos, é realmente possível que uma fonte proporcional possa melhorar a legibilidade do código (em vez de prejudicá-lo, como tenho certeza que muitos puristas esperariam).

Um personagem chamado Roedy Verde (famoso por seu 'como escrever código insustentável'artigos) escreveu sobre um editor/linguagem teórico, baseado em Java e chamado Bali.Não incluía exatamente fontes não proporcionais, mas incluía a ideia de ter tamanhos de fonte não uniformes.

Além disso, este breve Postagem de Joel Spolsky postagens para uma solução, tabulações elásticas (conforme mencionado por outro comentarista) que ajudariam no suporte de fontes não proporcionais (e de tamanho variável).

@Thomas Owens

Não acho o código formatado assim mais fácil de ler.

Tudo bem, é apenas uma preferência pessoal e podemos discordar.Formate-o da maneira que achar melhor e eu respeitarei.Freqüentemente me pergunto 'como devo formatar isso ou aquilo?' Minha resposta é sempre formatá -la para melhorar a legibilidade, o que admito que pode ser subjetivo.

Em relação ao seu exemplo, gosto de ter aquela coluna bem alinhada no lado direito, é uma espécie de "índice" rápido do código à esquerda.Dito isto, eu provavelmente evitaria comentar cada linha assim, porque o código em si não deveria precisar de tantas explicações.E se isso acontecer, costumo escrever um parágrafo acima do código.

Mas considere este exemplo do autor da postagem original.É mais fácil identificar os comentários no segundo, na minha opinião.

for (size-type i = 0; i<v.size(); i++) { // rehash:
    size-type ii = has(v[i].key)%b.size9); // hash
    v[i].next = b[ii]; // link
    b[ii] = &v[i];
}

for (size-type i = 0; i<v.size(); i++) {     // rehash:
    size-type ii = has(v[i].key)%b.size9);   // hash
    v[i].next = b[ii];                       // link
    b[ii] = &v[i];
}

@Thomas Owens

Mas as pessoas realmente alinham os comentários assim?...Eu nunca tento alinhar declarações ou comentários ou algo assim, e o único lugar que eu já vi que é nos livros didáticos.

Sim, as pessoas alinham comentários e declarações e todo tipo de coisa.Código consistentemente bem formatado é mais fácil de ler e código mais fácil de ler é mais fácil de manter.

Eu me pergunto por que ninguém realmente responde à sua pergunta e por que a resposta aceita não tem nada a ver com a sua pergunta.Mas mesmo assim...

um IDE de fonte proporcional

No Eclipse você pode escolher qualquer fonte em seu sistema.

definir paradas de tabulação para meus recuos

No Eclipse você pode configurar o recuo automático, incluindo configurá-lo para "apenas guias".

alinhando assinaturas de funções e linhas de instruções de atribuição

No Eclipse, o recuo automático faz isso.

que poderia ser especificado em pontos em vez de posições fixas de caracteres.

Desculpe, não acho que o Eclipse possa ajudá-lo nisso.Mas é de código aberto.;-)

negrito e itálico

Eclipse tem isso.

Vários tamanhos de fonte e até folhas de estilo seriam legais

Acho que o Eclipse usa apenas uma fonte e tamanho de fonte para cada tipo de arquivo (por exemplo, arquivo de origem Java), mas você pode ter diferentes "folhas de estilo" para diferentes tipos de arquivo.

Da última vez que olhei para o Eclipse (há algum tempo!), ele permitiu que você escolhesse qualquer fonte instalada para trabalhar.Não tenho certeza se suportava a noção de recuo usando paradas de tabulação.

Parecia legal, mas o código era definitivamente mais difícil de ler...

Soeren:Isso é legal, IMO.Mas será que as pessoas realmente alinham comentários assim?Para meus comentários de final de linha, sempre uso um único espaço e // ou /* ou equivalente, dependendo do idioma que estou usando.Nunca tento alinhar declarações ou comentários ou algo assim, e o único lugar que vi isso foi nos livros didáticos.

@Brian Ensink:Não acho o código formatado assim mais fácil de ler.

int var1 = 1 //Comment
int longerVar = 2 //Comment
int anotherVar = 4 //Command

contra

int var2       = 1 //Comment
int longerVar  = 2 //Comment
int anotherVar = 4 //Comment

Pessoalmente, acho as primeiras linhas mais fáceis de ler do que as segundas.

A parte de recuo da sua pergunta está sendo feita hoje em um produto real, embora possivelmente com um nível de automação ainda maior do que você imaginou, o produto que menciono é um IDE XSLT, mas os mesmos princípios de formatação funcionariam com a maioria (mas não todas) das sintaxes de código convencionais.

Isso realmente tem que ser visto em vídeo para entender tudo (desculpe pelo retrocesso da música).Há também um produto derivado do editor XML leve, XMLQuire, que serve como um demonstrador de tecnologia.

A captura de tela abaixo mostra XML formatado com regras de formatação bastante complexas neste IDE XSLT, onde todo o recuo é executado no estilo de processador de texto, usando a margem esquerda - não espaços ou caracteres de tabulação.

enter image description here

Para enfatizar esse conceito de formatação, todos os caracteres foram destacados para mostrar onde a margem esquerda se estende para manter o recuo.Eu uso o termo Formatação Virtual para descrever isso - não é como paradas de tabulação elásticas, porque simplesmente não há tabulações, apenas informações de margem que fazem parte da formatação do 'parágrafo' (códigos RTF são usados ​​​​aqui).O analisador é reformatado continuamente, na mesma passagem da coloração da sintaxe.

Uma fonte proporcional não foi usada aqui, mas poderia ter sido facilmente - porque o recuo é definido em TWIPS.A experiência de edição é bastante atraente porque, à medida que você refatora o código (XML, neste caso), talvez arrastando e soltando ou estendendo o comprimento de um valor de atributo, o recuo apenas flui novamente para caber - não há tabulação. tecla ou botão 'reformatar' para pressionar.

Então, o recuo está aí, mas o trabalho da fonte é um problema mais complexo.Eu experimentei isso, mas descobri que, se as fontes forem selecionadas novamente enquanto você digita, o deslocamento horizontal do código é muito perturbador - provavelmente seria necessário um comando 'formatar fontes' iniciado pelo usuário.O produto também possui tecnologia de tinta/caligrafia integrada para anotar código, mas ainda não explorei isso na versão ao vivo.

Todas as pessoas estão reclamando que os comentários não estão alinhados.

Parece-me que existe uma solução muito simples:Defina o espaço da unidade como o caractere mais largo da fonte.Agora, espace proporcionalmente todos os caracteres, exceto o espaço.o espaço ocupa tanto espaço para alinhar o próximo caractere onde estaria se todos os caracteres anteriores na linha fossem os mais largos da fonte.

ou seja:

iiii_space_Foo

xxxx_space_Foo

alinharia o "Foo", com o espaço após o "i" sendo muito maior do que após o "x".

Então chame isso de espaços elásticos.em vez de paradas de tabulação.

Se você é um editor inteligente, trate os comentários de maneira especial, mas isso é apenas um molho

Deixe-me relembrar os argumentos sobre o uso da palavra-chave 'var' em C#.As pessoas odiaram e pensaram que tornaria o código menos claro.Por exemplo, você não poderia saber o tipo em algo como:

var x = GetResults("Main");
foreach(var y in x)
{
   WriteResult(x);
}

O argumento deles era que você não poderia ver se x era um array, uma lista ou qualquer outro IEnumerable.Ou qual era o tipo de você.Na minha opinião, a incerteza não surgiu do uso de var, mas da escolha de nomes de variáveis ​​pouco claros.Por que não apenas digitar:

var electionResults = GetRegionalElactionResults("Main");
foreach(var result in electionResults)
{
   Write(result); // you can see what you're writing!!
}

"Mas você ainda não consegue ver o tipo de eleição!" - Isso realmente importa?Se quiser alterar o tipo de retorno de GetRegionalElectionResults, você pode fazer isso.Qualquer IEnumerable servirá.

Avanço rápido para agora.As pessoas querem alinhar comentários em código semelhante:

int var2       =  1; //The number of days since startup, including the first
int longerVar  =  2; //The number of free days per week
int anotherVar = 38; //The number of working hours per week

Portanto, sem o comentário, tudo não fica claro.E se você não alinhar os valores, não poderá separá-los das variáveis.Mas você?E quanto a isso (ignore os marcadores, por favor)

  • int diasSinceStartup = 1;//incluindo primeiro
  • int freeDaysPerWeek = 2;
  • int WorkingHoursPerWeek = 38;

Se precisar de um comentário em CADA LINHA, você está fazendo algo errado.“Mas você ainda precisa alinhar os VALORES” – não é?o que 38 tem a ver com 2?

Em C#, a maioria dos blocos de código pode ser facilmente alinhada usando apenas tabulações (ou, na verdade, múltiplos de quatro espaços):

  • var regiõesWithIncrease =
    • do resultado em GetRegionalElectionResults()
    • onde resultado.TotalCount > resultado > PreviousTotalCount &&
      • result.PreviousTotalCount > 0 // apenas novas regiões
    • selecione resultado.Região;
  • foreach (região var em regiõesWithIncrease)
  • {
    • Escreva(região);
  • }

Você nunca deve usar comentários linha a linha e raramente precisará alinhar as coisas verticalmente.Raramente, nem nunca.Então, eu entendo se alguns de vocês preferem uma fonte monoespaçada.Prefiro a legibilidade da fonte Noto Sans ou Source Sans Pro.Essas fontes estão disponíveis gratuitamente no Google e se assemelham ao Calibri, mas são projetadas para programação e, portanto, possuem todas as características necessárias:

  • Grande :;., para que você possa ver claramente a diferença
  • Claramente distinto 0Oo e distinto Il|

O maior problema com fontes proporcionais é que elas destroem o alinhamento vertical do código e isso é uma perda bastante grande quando se trata de escrever código.

O alinhamento vertical torna possível manipular blocos retangulares de código que abrangem várias linhas, permitindo que operações de bloco como cortar, copiar, colar, excluir e recuar, desindentar, etc., sejam facilmente executadas.

Como exemplo, considere este trecho de código:

a1 = a111;
B2 = aaaa;
c3 = AAAA;
w4 = wwWW;
W4 = WWWW;

Em uma fonte monoespaçada, o = e a ; todos alinhados.

Agora, se este texto estiver inserido em Palavra e exibir usando um fonte proporcional o texto efetivamente se transforma nisso:

OBSERVAÇÃO: Espaço em branco extra adicionado para mostrar como o = e ; não se alinham mais:

a1 = a1 1 1;
B2  = aaaa;
c3 = A A A A;
w4 = w w W  W;
W4  = W W W  W;

Sem o alinhamento vertical, esses belos blocos de código efetivamente desaparecem.

Também porque não é mais garantido que o cursor se mova verticalmente (ou seja,o número da coluna nem sempre é constante de uma linha para a próxima) torna mais difícil escrever scripts de macro descartáveis ​​projetados para manipular linhas de aparência semelhante.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top