ide fonts tabs text-editor

Fuente proporcional IDE



fonts tabs (13)

La última vez que miré a Eclipse (¡hace algún tiempo ahora!) Le permitía elegir cualquier fuente instalada para trabajar. No estoy tan seguro de si era compatible con la noción de sangrado usando tabulaciones.

Parecía genial, pero el código era definitivamente más difícil de leer ...

Realmente me gustaría ver una fuente proporcional IDE, incluso si tengo que compilarla yo mismo (quizás como una extensión de Visual Studio). Lo que quiero decir básicamente es una edición de código estilo MS Word que se parece al estilo tipográfico en el libro The C ++ Programming Language .

Quiero establecer tabulaciones para mis sangrías y alinear firmas de funciones y filas de instrucciones de asignación, que podrían especificarse en puntos en lugar de posiciones fijas de caracteres. También me gustaría negrita y cursiva. Varios tamaños de fuente e incluso hojas de estilo serían geniales.

¿Alguien ha visto algo como esto o sabe la mejor manera de empezar a construir uno?


Soeren: Eso es bastante ordenado, IMO. ¿Pero la gente realmente alinea los comentarios así? Para mis comentarios al final de la línea, siempre uso un solo espacio, luego // o / * o su equivalente, dependiendo del idioma que estoy usando. Nunca trato de alinear declaraciones o comentarios ni nada, y el único lugar que he visto en libros de texto.


esperaba que lo modifiquen y lo acepten para esa sugerencia, pero la idea tiene cierto sentido real.

La principal ventaja del requisito de fuente "no proporcional" tradicional en los editores de código es aliviar la carga de realizar el formato del código.

Pero con todo el formato automático interactivo que ocurre en IDE modernos, es posible que una fuente proporcional pueda mejorar la legibilidad del código (en lugar de obstaculizarlo, como estoy seguro que muchos puristas esperarían).

Un personaje llamado Roedy Green (famoso por sus artículos sobre " cómo escribir códigos no mantenibles ") escribió sobre un editor / lenguaje teórico, basado en Java y llamado Bali . No incluía las fuentes no proporcionales exactamente, pero incluía la idea de tener tamaños de letra no uniformes.

Además, esta breve publicación de Joel Spolsky publica una solución, se detiene la tabulación elástica (como lo menciona otro comentarista) que ayudaría con el soporte de fuentes no proporcionales (y de tamaño variable).


@Brian Ensink: no encuentro el código formateado así más fácil de leer.

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

versus

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

Las primeras líneas me resultan más fáciles de leer que las segundas, personalmente.


@Thomas Owens

¿Pero la gente realmente alinea los comentarios así? ... Nunca trato de alinear declaraciones o comentarios ni nada, y el único lugar que he visto en libros de texto.

Sí, las personas hacen comentarios y declaraciones y todo tipo de cosas. El código formateado constantemente es más fácil de leer y el código que es más fácil de leer es más fácil de mantener.


@Thomas Owens

No encuentro el código formateado así más fácil de leer.

Está bien, es solo una preferencia personal y podemos estar en desacuerdo. Dale formato de la forma que creas mejor y yo lo respetaré. Frecuentemente me pregunto ''¿cómo debo formatear esto o aquello?'' Mi respuesta siempre es formatearlo para mejorar la legibilidad, lo que admito que puede ser subjetivo.

En cuanto a su muestra, me gusta tener esa columna muy bien alineada en el lado derecho, es una especie de "índice" rápido en el código de la izquierda. Habiendo dicho eso, probablemente evitaría comentar cada línea así de todos modos porque el código en sí no debería necesitar tanta explicación. Y si lo hago, tiendo a escribir un párrafo sobre el código.

Pero considere este ejemplo del cartel original. Es más fácil detectar los comentarios en el segundo, en mi opinión.

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]; }



El principal problema con las fuentes proporcionales es que destruyen la alineación vertical del código y esta es una pérdida bastante importante cuando se trata de escribir código.

La alineación vertical hace posible manipular bloques rectangulares de código que abarcan varias líneas al permitir operaciones de bloques como cortar, copiar, pegar, eliminar y sangrar, desencriptar, etc. para realizar fácilmente.

Como ejemplo, considere este fragmento de código:

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

En una fuente monoespaciada, el = y el ; todos alineados.

Ahora bien, si este texto se carga en Word y se visualiza con una fuente proporcional, el texto se convierte efectivamente en esto:

NOTA: Se agregó espacio extra blanco para mostrar cómo el = y ; ya no se alinea:

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

Con la alineación vertical desaparecidos, esos buenos bloques de código desaparecen efectivamente.

Además, debido a que el cursor ya no está garantizado para moverse verticalmente (es decir, el número de columna no siempre es constante de una línea a la siguiente) hace que sea más difícil escribir tirar macro scripts diseñados para manipular líneas similares.


Me pregunto por qué nadie realmente responde su pregunta y por qué la respuesta aceptada realmente no tiene nada que ver con su pregunta. Pero de todos modos...

una fuente proporcional IDE

En Eclipse puede elegir cualquier fuente en su sistema.

establecer tabulaciones para mis sangrías

En Eclipse puede configurar la sangría automática, incluida la configuración en "solo pestañas".

alineando firmas de funciones y filas de instrucciones de asignación

En Eclipse, la sangría automática hace eso.

que se podría especificar en puntos en lugar de posiciones de caracteres fijas.

Lo siento, no creo que Eclipse pueda ayudarte allí. Pero es de código abierto. ;-)

negrita y cursiva

Eclipse tiene eso.

Varios tamaños de fuente e incluso hojas de estilo serían geniales

Creo que Eclipse solo usa una fuente y tamaño de letra para cada tipo de archivo (por ejemplo, el archivo fuente Java), pero puede tener diferentes "hojas de estilo" para diferentes tipos de archivos.


Pensar con estilo sugiere utilizar su software favorito de manipulación de textos, como Word o Writer. Cree su código de programa en XML enriquecido y extraiga las secciones relevantes para el compilador con XSLT. El software "Office" proporcionará todas las características avanzadas de manipulación de texto y formato.


La gente se queja de comentarios que no se alinean.

Me parece que hay una solución muy simple: defina el espacio de la unidad como el personaje más ancho de la fuente. Ahora, espacíe proporcionalmente todos los caracteres excepto el espacio. el espacio ocupa tanto espacio como para alinear el siguiente carácter donde estaría si todos los caracteres precedentes en la línea fueran los más anchos en la fuente.

es decir:

iiii_space_Foo

xxxx_space_Foo

alinearía el "Foo", con el espacio después de que la "i" fuera mucho más ancha que después de la "x".

Así que llámalo espacios elásticos. en lugar de tab-stops.

Si eres un editor inteligente, trata los comentarios especialmente, pero eso es solo salsa


La parte de sangría de su pregunta se está haciendo hoy en un producto real, aunque posiblemente hasta un nivel de automatización mayor de lo que imaginaba, el producto que menciono es un XSLT IDE , pero los mismos principios de formato funcionarían con la mayoría (pero no con todos) ) sintaxis de código convencionales.

Esto realmente tiene que verse en video para entenderlo todo (lo siento por la pista de la música). También hay un producto XML spin-off ligero editor, XMLQuire , que sirve como un demostrador de tecnología.

La siguiente captura de pantalla muestra XML formateado con reglas de formateo bastante complejas en este XSLT IDE, donde todas las sangrías se realizan con el estilo del procesador de textos, usando el margen izquierdo, no el espacio o los tabuladores.

Para enfatizar este concepto de formato, todos los caracteres se han resaltado para mostrar dónde se extiende el margen izquierdo para mantener la sangría. Utilizo el término Formato virtual para describir esto: no es como las pestañas elásticas porque simplemente no hay pestañas, solo información de margen que forma parte del formateo de ''párrafo'' (los códigos RTF se usan aquí). El analizador reformatea continuamente, en el mismo paso que la coloración de sintaxis.

No se ha utilizado aquí una fuente proporcional, pero podría haber sido bastante sencilla, porque la sangría está configurada en TWIPS. La experiencia de edición es bastante convincente porque, a medida que refactoriza el código (XML en este caso), quizás mediante la función de arrastrar y soltar, o extendiendo la longitud de un valor de atributo, la sangría simplemente se redistribuye para ajustarse a sí misma; no hay tabulación. tecla o botón ''reformatear'' para presionar.

Entonces, la sangría está allí, pero el trabajo de la fuente es un problema más complejo. He experimentado con esto, pero descubrí que si las fuentes se vuelven a seleccionar a medida que escribe, el desplazamiento horizontal del código distrae demasiado; es probable que deba haber un comando de "formato de letra" iniciado por el usuario. El producto también tiene la tecnología Ink / Handwriting incorporada para anotar código, pero aún no lo exploté en la versión en vivo.


Permítanme recordar argumentos sobre el uso de la palabra clave ''var'' en C #. La gente lo odiaba y pensó que el código sería menos claro. Por ejemplo, no podría saber el tipo en algo como:

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

Su argumento era que no se podía ver si x era una matriz, una Lista o cualquier otra IEnumerable. O qué tipo de y era En mi opinión, la falta de claridad no surgió del uso de var, sino de la selección de nombres variables poco claros. ¿Por qué no simplemente escribe:

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

"¡Pero aún no puedes ver el tipo de resultados de elección!" - ¿realmente importa? Si desea cambiar el tipo de devolución de GetRegionalElectionResults, puede hacerlo. Cualquier IEnumerable servirá.

Avance rápido hasta ahora. La gente quiere alinear comentarios en un código similar:

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

Entonces, sin el comentario, todo no está claro. Y si no alinea los valores, no puede separarlos de los variales. ¿Pero tu? ¿Qué pasa con esto (ignore las viñetas, por favor)

  • int daysSinceStartup = 1; // incluido primero
  • int freeDaysPerWeek = 2;
  • int workingHoursPerWeek = 38;

Si necesita un comentario en CADA LÍNEA, está haciendo algo mal. "Pero aún necesitas alinear los VALORES", ¿verdad? ¿Qué tiene que ver 38 con 2?

En C # La mayoría de los bloques de código se pueden alinear fácilmente usando solo pestañas (o de hecho, múltiplos de cuatro espacios):

  • var regionsWithIncrease =
    • del resultado en GetRegionalElectionResults ()
    • donde result.TotalCount> result> PreviousTotalCount &&
      • result.PreviousTotalCount> 0 // solo nuevas regiones
    • seleccione result.Region;
  • foreach (región var en regionsWithIncrease)
  • {
    • Escribir (región);
  • }

Nunca debe usar comentarios de línea a línea y rara vez deberá alinear las cosas verticalmente. Raramente, no nunca. Entonces entiendo si algunos de ustedes prefieren una fuente monoespaciada. Prefiero la facilidad de lectura de la fuente Noto Sans o Source Sans Pro. Estas fuentes están disponibles libremente en Google, y se parecen a Calibri, pero están diseñadas para programación y, por lo tanto, tienen todas las características necesarias:

  • Grande : ; . , entonces puedes ver claramente la diferencia
  • Claramente distinto 0Oo y distinto Il |