- Un editor estructural basado en múltiples cursores que permite manipular directamente la estructura del código y funciona alrededor del árbol de sintaxis (AST)
- Admite interacción a nivel de nodos sintácticos, reduciendo la brecha entre la intención al escribir código y la acción real de edición
- Con la función de múltiples cursores, es posible modificar o refactorizar varios nodos sintácticos al mismo tiempo, mejorando la eficiencia en ediciones masivas
- Redefine la edición modal, permitiendo desplazarse de forma coherente entre distintas unidades como palabras, líneas y nodos sintácticos
- Refuerza la precisión y consistencia en la edición de código, proponiendo un nuevo paradigma que mejora la productividad de los desarrolladores
Descripción general de Ki Editor
- Ki Editor es un editor estructural de múltiples cursores (Multi-cursor structural editor) que ofrece un entorno de edición para manipular directamente la estructura sintáctica del código
- A diferencia de la edición tradicional basada en texto, manipula los elementos del código sobre la base del árbol de sintaxis (AST)
- Permite editar directamente por unidad de nodo sintáctico sin necesidad de usar el mouse ni combinaciones de teclado
Interacción con nodos sintácticos
- Mediante la función First-class syntax node interaction, permite trabajar directamente con la estructura sintáctica del código
- Se enfoca en reducir la brecha entre la intención al escribir código y la acción real de edición
- Realiza manipulación por unidad sintáctica sin mover el mouse ni usar combinaciones complejas de teclas
Función de múltiples cursores
- Usa Multiple cursors para editar varios nodos sintácticos al mismo tiempo
- La manipulación paralela de nodos sintácticos mejora la eficiencia en ediciones masivas y refactorización
- Permite procesar rápidamente tareas repetitivas de modificación de código
Redefinición de la edición modal
- Con la función Redefine modal editing, estandariza el modo de selección
- Admite de forma coherente el desplazamiento entre distintas unidades como palabras, líneas y nodos sintácticos
- Refuerza la flexibilidad y consistencia frente a la edición modal tradicional
Relevancia
- Ki Editor ofrece una experiencia de edición centrada en la estructura sintáctica, aumentando la precisión al escribir y modificar código
- Al combinar múltiples cursores con manipulación de nodos sintácticos, presenta un nuevo enfoque de edición de código que contribuye a mejorar la productividad de desarrollo
1 comentarios
Opiniones de Hacker News
Al ver la función de “selección sintáctica de primera clase”, me acordé del atajo Expand / Shrink Selection que uso mucho en los IDE de JetBrains
Con
Ctrl + WyCtrl + Shift + Wpuedes expandir o reducir la selección por unidades sintácticasEsta función cambió por completo mi forma de pensar sobre cómo interactuar con el “texto” de un archivo
VS Code y Zed también tienen algo parecido, pero siento que expanden/reducen de forma demasiado brusca
Enlace a la documentación de JetBrains
Con Cmd+Shift+V abro el portapapeles en pila para buscar o elegir copias anteriores
Cmd+Shift+E muestra la lista de ubicaciones recientes, y Cmd+Shift+A abre la paleta de acciones para buscar difusamente todos los comandos
Además, la función Local History permite rastrear cambios de archivos con mucho más detalle que Git
Estas funciones llevan naturalmente a la idea de “editar directamente desde el búfer de resultados de búsqueda”
incremental selectionbasado en tree-sitterDoble clic seleccionaba una palabra, triple clic todos los argumentos de una función, y cuatro clics seleccionaban
f(a,r,g,s)completo; era una estructura donde la unidad sintáctica crecía según la cantidad de clicsTodavía tengo esa memoria muscular
Estoy probando la idea de que commits, diff y cherry-pick también funcionen por unidades sintácticas, como Ctrl+W
El tema está resumido en el proyecto librdx
La edición con reconocimiento de AST me recuerda la comodidad de los lenguajes de la familia Lisp
En Lisp, cosas que se resuelven con una simple manipulación de listas en JS requieren LSP o un parser aparte
Cuando paso un fin de semana usando Clojure y luego vuelvo a TypeScript, de verdad extraño los comandos de paredit
Hace tiempo hice yo mismo un editor basado en árboles sintácticos
Como en vez de escribir texto solo se manipula el árbol, no puede existir un programa sintácticamente incorrecto
Pero el gran reto era convertir eso en un método de entrada realmente usable
Ahora no puedo ejecutarlo porque ya no tengo el hardware de pantalla de esa época, pero dejé una descripción del proyecto
Como resultado, a veces hay que pasar por rutas poco intuitivas o incluso reescribir desde cero
Incluso pueden existir estructuras válidas para las que no haya una ruta de construcción posible
En teoría era interesante, pero me pareció un callejón sin salida poco práctico
Es difícil vencer la universalidad y simplicidad de una interfaz basada en texto
Hay demasiadas limitaciones reales: editor dedicado, nuevo sistema de control de versiones, ecosistema aislado, etc.
Como la gente no piensa en unidades de árbol, programar siempre en un estado sintácticamente correcto era una experiencia extremadamente frustrante
Al final, son las herramientas que permiten una rigurosidad flexible las que sobreviven en la práctica, como el tipado gradual de TypeScript
Material relacionado: simh, mame, código de VT11, documentación
Aún no es un editor general, pero la dirección de ampliar rangos de selección de árbol parece prometedora
Enlace a Pantograph
Está construido sobre un sistema de parsing que maneja árboles incompletos pero válidos
Mediante representaciones de huecos como
<//>, puede manejar sintaxis incompleta de forma seguraEjemplo:
2 + ·puede parsearse como un árbol<BinaryExpression>Si te interesa, lo estamos discutiendo en la comunidad de Discord
No estoy acostumbrado a editar sobre AST
Solo uso algo como objetos de texto para manejar argumentos de función o arglists
De las funciones de LSP, solo uso ir a la definición y cambiar nombres
Al final, esto me motiva a mejorar más mis habilidades con el editor
Puedes escribir patrones con una sintaxis casi igual al código y ver la transformación frente a tus ojos
Por ejemplo,
ast-grep -pattern '$A && $A.$B' --rewrite '$A?.$B' -lang tspermite hacer una transformación a optional chainingLas metavariables como
$X,$A, etc. fuerzan que coincida el mismo nodoLos agentes de código con IA todavía no usan bien este tipo de patrones, pero la herramienta en sí es muy sólida
En la mayoría de los casos basta con seleccionar, borrar, copiar o reemplazar por nodos sintácticos
Yo no hago refactorizaciones grandes con frecuencia, así que no siento la necesidad de aprenderlo
Pero alguien que desarrolle servicios grandes podría tener una opinión totalmente distinta
Aprendiendo a escribir macros en Elixir obtuve muchas ideas, y con Lisp pasa algo similar
Aunque cada lenguaje tenga un enfoque distinto, al final todos van hacia el mismo destino
La clasificación de editores que yo manejo es esta
Ki entra en la tercera categoría, y yo sigo de cerca este tipo de proyectos
Los nodos de UI se ven como texto normal, pero en realidad tienen estructura de árbol
Si quieres dar retroalimentación temprana, contáctame al correo que aparece en mi perfil
La dificultad de editar con AST es la descubribilidad (discoverability)
Está visible en pantalla, pero muchas veces no sabes cómo se llama ese nodo
Por eso estoy pensando en un plugin que rodee con colores los distintos ámbitos alrededor del cursor para visualizarlos
La idea es pensar en términos de “moverse al siguiente azul” en vez de “moverse a la siguiente función”
d mte muestra las etiquetas de todos los nodos sintácticos visibles para que puedas saltar directamenteEs útil poder seleccionar hacia adentro o hacia afuera del nodo actual
Hice una integración de Ki para VSCode
Después no pude contribuir mucho más y me da pena, pero creo que este tipo de innovación en herramientas base es muy importante
Enlace a la extensión de Ki para VSCode
Antes de ver ejemplos no lo tenía tan claro,
pero en “modificación sintáctica de primera clase” me impresionó ver cómo las comas se agregan o eliminan automáticamente
Incluso parece que la lógica de implementación sería más simple
Ahora también quiero probar integración de Ki o rewrites basados en AST en Zed
Puedes guiarte por el código del repositorio de Ki
Pienso probarlo yo mismo pronto
Me gusta que sea independiente de la distribución del teclado
También es interesante que esté inspirado en la filosofía de Emacs de que “todo es un búfer editable”
Claro, como en cada editor los trade-offs son grandes, habrá que probarlo directamente
Neovim es excelente, pero su modelo de edición tiene límites
Si la estructura fuera completamente reemplazable, quizá Helix o Ki ni siquiera harían falta
Lo ejecuté con un teclado Dvorak y los mapeos se rompieron por completo
Cuando el software cree que es más inteligente que el usuario, al final lo que logra es que el usuario se sienta impotente
Claro, Emacs ya lo tiene
El paquete combobulate es un ejemplo
Con M-k puedes borrar nodos o buscar y editar directamente con consultas de tree-sitter
Ya está muy bien integrado, pero un editor dedicado a AST todavía tendría margen para llevar la UX más lejos
Es una función que encaja muy bien con el flujo de trabajo de Helix
Se siente como si por fin encajara la última pieza del patrón clásico de movimiento → acción