El comando 'u' (undo) en el editor de texto Vi y sus derivados ha evolucionado significativamente a lo largo del tiempo, generando una interesante divergencia en su implementación y comportamiento. Originalmente, la versión de Vi creada por Bill Joy solo ofrecía un único nivel de deshacer, lo cual era una limitación acorde a la época. Esta implementación se convirtió en parte del estándar POSIX, obligando a que el comando 'u' deshiciera el último cambio o rehiciera el deshacer anterior, un comportamiento bastante peculiar.
Vim, una popular extensión de Vi, rompió con esta restricción e implementó un sistema de deshacer y rehacer de múltiples niveles, mucho más intuitivo para el usuario. En Vim, 'u' deshace los cambios más recientes, mientras que Ctrl+r los rehace. Además, ambos comandos admiten un 'count' (número), permitiendo deshacer o rehacer múltiples cambios en una sola acción (ej: '10u' deshace los últimos 10 cambios). Esta funcionalidad es altamente valorada por los usuarios, ya que facilita la corrección de errores y la recuperación de texto eliminado.
Nvi, buscando adherirse al estándar POSIX, mantiene el comportamiento original de Vi, pero aún así ofrece deshacer de múltiples niveles. Para lograrlo, utiliza una secuencia de puntos '.' después del comando 'u' (ej: 'u..' deshace los tres cambios más recientes). Sin embargo, esta aproximación es menos flexible, ya que no permite interrumpir la secuencia de deshacer/rehacer con otras acciones como mover el cursor o buscar texto.
Existen otras implementaciones, como BusyBox (común en sistemas embebidos), que ofrecen un nivel de deshacer múltiple mediante la repetición del comando 'u', pero sin soporte para rehacer. También encontramos proyectos como Nextvi y Neatvi que adoptan el modelo de Vim para deshacer y rehacer. En resumen, la elección de la implementación del comando 'u' depende de la prioridad: adherencia al estándar POSIX, flexibilidad y facilidad de uso, o recursos limitados en sistemas embebidos. La implementación de Vim es generalmente considerada la más amigable para el usuario debido a su predictibilidad y la capacidad de combinar deshacer/rehacer con otras acciones.
