plugged - Analizador de productividad para vim
vim plugin plugged (3)
Encuentro tu idea muy interesante. Con el tono correcto, tal característica probablemente sería útil y no solo para los novatos.
Pero veo un montón de dificultades:
- ¿Mostraría "la forma correcta" de realizar la tarea anterior o una forma más corta sin tener en cuenta su corrección? Por ejemplo, un nuevo usuario de Vim podría hacer
Vjjjd
para eliminar 4 líneas, ¿proponeV3jd
o4dd
o tal vezdip
si es adecuado o alguna otra solución? - ¿Cómo definirías "la manera correcta" de todos modos? ¿Por consenso aquí en SO o en alguna lista de correo o preguntando a un grupo de expertos acreditados de Vim?
- ¿Cómo definirías la tarea que estás analizando? ¿Cuáles son los límites para una tarea?
Lo que sea, esta es una buena idea.
Fondo
Estoy buscando construir un analizador de productividad para vim que pueda mostrar silenciosamente una solución más eficiente para una tarea particular y repetitiva que realiza el usuario. La sugerencia se puede mostrar en gruñido, línea de estado, etc.
No se ríe, pero la idea viene de Clippy: http://en.wikipedia.org/wiki/Office_Assistant Por supuesto, no quiero crear otras cosas divertidas como el vigor. Me refiero a un análisis de eficiencia que podría ser especialmente útil para los principiantes vim.
La pregunta
¿Tiene sentido y hay alguna teoría que cubra tal análisis?
La parte superior de mi cabeza:
Esto requeriría una buena cantidad de clasificación AI / difusa. Es difícil analizar lo que el usuario está "tratando de hacer" (a menudo el usuario no está claro y se desviará: Oh, corrija ese error tipográfico mientras estoy aquí; alinee ese comentario ... ok, ahora con el otro tarea)
Irónicamente, creo que al hacer las cosas de la manera ''Vim Pro'', esto se volvería más fácil (¡pero luego no sería útil detectarlo porque ya es óptimo!)Además, TIMTOWTDI; No puedes simplemente ir y decir ''aquí está la mejor manera''. Depende del gusto, la posición de la mano, la distribución del teclado y la disponibilidad del complemento.
Creo que, de lejos, la mejor manera de aprender cosas como esta es
- leyendo documentación
- siguiente desbordamiento de pila [vim]
Dejando atrás el escepticismo, puedo ver un buen mercado para un complemento con características similares a pistas :
Estaría pensando en sugerencias "siempre activas", como las que se ven en los motores de ajedrez cursis (mostrando campos accesibles, campos atacados, riesgos, pinchos, tenedores y una visualización del resultado de una combinación de intercambio):
Podría mostrar la posición de los marcadores en el margen (para que las personas se den cuenta de ellos, especialmente
<,
> y demás). Un complemento que hace esto ahora es ShowMarks : en la captura de pantalla, note las marcas paraa
yb
, pero también (¡ingenioso!) Las ubicaciones para el { y ( y movimientos de texto similares (he visto>
ShowMarks Y otros ahora) ) . 1:set relativenumber
ya es útil para hacer que los usuarios piensen en13j
lugar dejjjjjjjjjjjjj
, pero vea mi preferencia aquí Mover el punto entre los personajes mediante la búsqueda rápidaPude ver que el complemento de resaltado de sintaxis sucediera cuando los objetos de texto (palabra, PALABRA, oración, párrafo o identificador, parenblock, braceblock) se resaltaran en tonos crecientes del color de fondo. Si pensamos en una forma de superponer una sugerencia útil (qué tecla usar para el movimiento del objeto de texto), obtendríamos una muy buena sugerencia, OMI.
Pude ver una sugerencia para presionar ''o'' para mover el cursor al otro extremo de una selección visual
el matchit estándar ya es bastante instrumental al sugerir sobre los corchetes correspondientes (aunque no sugiere el estilo de clippy real que podrías usar
%
para llegar allí)otros usos inspiradores de la característica de
+signs
son: errormarker.vim (que usa puntas de globos además de colocar un signo gráfico); Puedo ver que se está haciendo un buen uso (aunque solo sea para señalar ciertos temas de documentación)
Con respecto al resaltador de objetos de texto, sospecho que ya podría existir. Voy a echar un vistazo ahora
1 Creo que para obtener más marcas, tenía que hacer (?)
:let g:showmarks_include+="<>[]"
:ShowMarksOn
También recomiendo configurar el servicio de actualización a algo rápido (por ejemplo, 500 ms)
Mi opinión personal sobre esto es que una herramienta similar a un clippy es muy difícil de manejar. Como las personas mencionadas anteriormente, creo que la parte más difícil de esto es entender las intenciones de los usuarios al escribir un texto. ¡Si lo guardas y tienes una forma clara de agregar semántica a tus intenciones, tu vida podría ser mucho más fácil!
Entonces, en lugar de sugerencias en vivo, supongo que como primer paso, un flujo de trabajo de entrada-salida-secuencia podría ser más fácil de probar y obtener resultados.
Estaba pensando en programar un extremo frontal de vi generalizado para aplicarlo a todo tipo de editores / cuadros de texto (es decir, pidgin).
Uno de los resultados de este proceso de pensamiento es que el lenguaje de entrada debe ser algo regular (o libre de contexto como máximo). por lo tanto, la entrada de una instancia de vi puede representarse por una máquina de estado. Esto no está completamente probado, ¡sino más bien una vaga suposición! Es evidente que se debe hacer un mayor esfuerzo para que los comandos de repetición (p. Ej .: 13j) no logren que el lenguaje se convierta en gramáticas libres de contexto.
Si el lenguaje de entrada vi es regular, es posible que tenga la oportunidad de utilizar la verificación de modelos acotada para calcular una secuencia de transiciones de estado en ese gráfico de estado que dé como resultado la salida requerida. Creo que actualmente la forma más potente de realizar la comprobación de modelos acotados es a través de contraejemplos y reducir el problema a una instancia sat (solo google para ello).
Me gustaría conocer su opinión al respecto, así que, por favor, comente y si hay algo más involucrado, podemos intentar hablar sobre esto.
editar
Creo que puedes intentar hacer el trabajo de optimizador estándar que hacen los compiladores.
sin embargo, no es especialmente difícil encontrar y reemplazar las macros q[az]
@[az]
. Supongo que esto es NP completo.