Editor de código independiente del idioma con funciones avanzadas de formato/resaltado

Estoy buscando un editor de código con características específicas. Para Windows, comercial o gratuito.

Lista de características requeridas:

  1. El editor debe ser independiente del idioma , y ​​las funciones que reconocen el idioma deben ser personalizables e importables/exportables a través de definiciones externas, transparentes para el usuario si es posible. Entonces, por ejemplo, si creo mi idioma personalizado, puedo crear lexer personalizado y esquemas de resaltado, etc. La capacidad de usar o crear funciones avanzadas para cualquier idioma (por ejemplo, correctores gramaticales, listas de variables/funciones, etc.) obviamente sería genial.
  2. Scriptable/programable : debe tener soporte para secuencias de comandos (idealmente con Python) con acceso al texto, intercalación, otras funciones internas del editor, para que pueda programar funciones de edición y vincularlas a accesos directos. Idealmente, con la posibilidad de usar la GUI del editor (por ejemplo, mostrar alguna lista en un panel lateral, etc.).
  3. Funciones de resaltado de sintaxis altamente personalizables. Es decir, no solo cosas básicas, sino también la capacidad de definir el estilo para caracteres y secuencias individuales (por ejemplo, coincidencia de expresiones regulares) y para que se pueda configurar en diferentes fuentes , tamaños y colores para la coincidencia. (tenga en cuenta el énfasis). [*]
  4. Las líneas pueden ser de diferente altura . Por ejemplo, si configuro el estilo en una fuente de 5 puntos y coincide con toda la línea, la línea tendrá un 50% de altura en comparación con las líneas de altura con un tamaño de 10 puntos.
  5. Idealmente con soporte para sangrías de línea (edición en forma de árbol). El nivel de sangría (nivel de anidamiento) debe ser accesible a través de secuencias de comandos (por ejemplo, para generar código Python ejecutable). ( Nota : ¡no confunda la sangría con la inserción de espacios o tabuladores! Las sangrías aquí = espacio horizontal no editable).

[*] Nota importante sobre el requisito n.º 3: aunque algunos editores tienen opciones de formato extra ricas, el problema común es que solo se aplican a los llamados 'tokens' (por ejemplo, palabras clave, funciones). Así que tenga en cuenta que no es suficiente. Para entender mejor lo que quiero decir, aquí hay ejemplos concretos de lo que debo hacer:

  • establezca la fuente/tamaño para letras cirílicas dentro de cadenas únicamente;
  • establecer la fuente/tamaño para los números dentro de los identificadores únicamente;
  • establecer la fuente/tamaño para el carácter de guión dentro de una palabra; etc...

Otros criterios (menos importantes):

  • debe ser rápido y receptivo, sin mucha hinchazón;
  • sería genial si se desarrolla activamente para que al menos exista la posibilidad de que se agreguen algunas características útiles;
  • API de secuencias de comandos avanzadas para funciones interactivas, por ejemplo, la capacidad de leer las coordenadas del mouse y detectar el carácter o la línea debajo del cursor del mouse;
  • soporte de tabulación adecuado (consciente de la sangría);
  • no hay características molestas e intrusivas como algo que parpadea, animaciones, cambio de enfoque, acaparamiento de la CPU y el disco duro, etc.

Pregunta:

Sugiera un editor que admita todas las funciones mencionadas anteriormente.
Incluso si no todo es compatible de fábrica, pero es posible a través de secuencias de comandos/extensión, proporcione también una sugerencia y algunas descripciones.

En otras palabras, incluso si el editor no es exactamente un editor de código, pero puede cumplir con los requisitos, también puede ser una respuesta útil.

No como un ejemplo real, sino solo para ilustrar un enfoque alternativo: por ejemplo, uno puede usar, por ejemplo, Word o Adobe InDesign para editar el código, luego generar fuentes y pasarlas a otras herramientas. Sí, hacerlo sería un poco absurdo para esta tarea, pero solo para decir, por ejemplo, con InDesign, todas las funciones de resaltado y, por ejemplo, la generación de código son posibles mediante secuencias de comandos, por lo que es una opción viable en teoría.


Lo que he probado hasta ahora con listas por característica:

Bloc de notas++

Este editor cumple con muchos requisitos, pero aún así muchas características son limitadas. Súper rápido, sin hinchazón. Se basa en el motor Scintilla, que tiene muchas características avanzadas por delante de su tiempo. Algo es posible a través de complementos. Como nota, desarrollar un complemento básicamente requiere desarrollar una aplicación C++, lo que puede ser todo un desafío.

Así que a mi lista de características:

  1. Parcialmente. Por ejemplo, para definir resaltado para un idioma personalizado debe usar UDL, pero es limitado (ver 3.). Los lexers incorporados están codificados, faltan guías de desarrollo.
  2. Sí, por ejemplo, usando el complemento PythonScript, y es bueno.
  3. Parcialmente. El problema es que no admite coincidencias basadas en expresiones regulares.
    Por lo tanto, puedo definir estilos con varias fuentes/tamaños, pero puedo aplicarlo solo a los tokens que están definidos por el lexer (codificado), o a través de UDL, pero UDL está limitado al tokenizador de gramática unificada (sin grupos de operadores personalizados , sin secuencias de coincidencia definidas por el usuario). Básicamente, el compositor de Scintilla admite esto, pero el editor no proporciona esto al usuario, por lo que no hay forma de usarlo directamente.
  4. No (todas las líneas tienen la misma altura).
  5. No.

gVIM

Gran editor, súper rápido y personalizable. Pero bastante limitado en características gráficas.

  1. Sí.
  2. Sí.
  3. No. (aquí limitado a fuentes monoespaciadas solamente , pero como un buen bono tiene resaltado basado en expresiones regulares)
  4. No.
  5. No.

Código VSC

Lo he estado probando solo por un tiempo, así que no puedo estar seguro acerca de algunas características. Es bastante lento, por lo que en una máquina de gama baja será difícilmente utilizable.

  1. ???. Parece que tiende a ser extensible para admitir cualquier idioma a través de la extensión, pero la imagen completa no está clara y su desarrollo parece bastante caótico.
  2. ???. Las extensiones son posibles, pero no pude encontrar instrucciones claras o una guía para desarrolladores. También parece que muchas partes del editor central no son personalizables/accesibles en absoluto.
  3. No.
  4. No.
  5. No.
Echaría un vistazo a Geany: sé que hace 1, 2 se puede hacer a través del desarrollo de complementos, 3 hasta cierto punto nativo, de lo contrario, vea 2 y complementos, 4 a través de complementos / desarrollo de complementos, y creo que 5 pero no lo hago haz pitón...
@ivanivan Geany se basa en Scintilla como Notepad ++. Esto debería significar 4 y 5 es No (a menos que esto se convierta en una función en Scintilla). ¿O me estoy perdiendo algo?
@ivanivan misma situación con el n. ° 1/3: para definir el lexer del lenguaje personalizado, lo más probable es que necesite mantener una bifurcación del editor y compilar todo el proyecto, lo cual no me entusiasma mucho.

Respuestas (3)

SynWrite (software gratuito; CudaText es un reemplazo):

  • agnóstico del idioma: comprobar.
  • Scriptable/programable: verificar, a través de complementos de Python.
  • Funciones personalizables de resaltado de sintaxis: verificación, a través del cuadro de diálogo interno Lexer Editor. Dialog también admite diferentes nombres/tamaños de fuente para fragmentos, es decir, "tokens".
  • Las líneas pueden tener diferentes alturas: verifique, el editor adapta la altura de la línea a los tamaños de las "fichas" en esta línea.
  • soporte para sangrías de línea: comprobar, Lexer Editor permite configurar el plegado basado en sangría.
  • Nota importante sobre el requisito n.º 3: no se admite, lexer highlite se basa en "tokens".
  • rápido y sensible: comprobar.

Puede probar Sublime Text, está funcionando bastante bien y es realmente personalizable a través de complementos de Python y similares. No estoy seguro acerca de sus puntos 3, 4 y 5, pero tal vez se puedan lograr a través de complementos.

Probablemente valga la pena agregar Textadept a esta sesión de preguntas y respuestas. ¡ Una mirada a la ! Los símbolos a continuación sugieren que esto es un mal ajuste. Pero lo publico porque (a) estoy realmente inseguro acerca de esto; y (b) es tan rápido, poderoso y extensible que vale la pena echarle un vistazo. Así es como cumple con los criterios de OP:

  1. El editor debe ser independiente del idioma | SíSí.
  2. Scriptable/programable | SíSí, pero con Lua , no con Python.
  3. Funciones de resaltado de sintaxis altamente personalizables | NotaCreo que sí, pero no estoy seguro. Consulte el manual sobre " sintaxis lexer " para ver si cumple con la necesidad.
  4. Las líneas pueden ser de diferente altura | Nota¡No estoy seguro! Nunca hice esto, pero si se cumplen otros criterios, vale la pena echarle un vistazo.
  5. Idealmente con soporte para sangrías de línea (edición en forma de árbol) | NotaDe nuevo, no estoy seguro.

Notas adicionales :

  • muy activamente mantenido, con un desarrollador receptivo (realmente impresionante, en realidad)
  • basado en centelleo
  • muy bien documentado
  • dado el interés de OP en el cirílico, aquí está la entrada de Wikipedia.ru .