Flecha hacia arriba en un mensaje vacío en ksh93

Flecha hacia arriba en un mensaje vacío en ksh93

Esta es una solicitud de explicación o indicación de documentación.

Soy usuario de KornShell93 ( kshen Mac OS X o ksh93en cualquier otro lugar). Me gusta el shell por su relativa simplicidad como shell interactivo y por sus capacidades de secuencias de comandos, y lo he estado usando desde que el código se hizo más libre en 2000. Lo uso en vimodo de edición, con las opciones viy virawconfiguradas.

Hay una característica interesante ksh93que le permite comenzar a escribir un comando en la línea de comando y luego presionar Up-arrowpara obtener la última línea de comando coincidente del historial de la línea de comando. Puedo encontrar la documentación para esto y cómo está vinculado [count][Aen vimodo de edición, no hay problema.

Sin embargo, si presiono Up-arrowen un mensaje vacío, primero me da el comando ejecutado más recientemente y luego comienza a recorrer cualquier prefijo de comando que haya buscado anteriormente. Esto me molesta muchísimo.

Ejemplo:

Ejecuto estos tres comandos:

$ ls -l
$ ls -ld test
$ ls -ld testdir

Al escribir lsy luego presionar Up-arrowtres veces, los recorrerá en orden opuesto.

Más tarde, con muchos más comandos emitidos, pero sin búsquedas en el historial ni lsinvocaciones:

$ cc -o testrun mytest.c
$ man strncmp

Si ahora presiono Up-arrowuna vez, obtengo man strncmp. Si presiono Up-arrownuevamente, obtengo ls -ld testdiry luego ls -ld testen lugar del comando cc -o testrun mytest.cy luego el anterior.

Estoy buscando sugerencias sobre cómo "solucionar" este problema para que, Up-arrowsin escribir nada en la línea de comando de antemano, recorra el historial más reciente sin intentar buscar un prefijo utilizado anteriormente. Sería bueno incluso un indicador de algún lugar donde esté documentado el comportamiento anterior.

EDITAR:

El ksh93manual dice

[count]k Obtener el comando anterior. Cada vez que kse ingresa se accede al comando anterior en el tiempo.

/string Busque hacia atrás en el historial un comando anterior que contenga string. Stringtermina en a RETURNo NEW LINE. Si stringestá precedido por ^, la línea coincidente debe comenzar con string. Si stringes nulo, stringse utilizará el anterior.

[count][A Si el cursor está al final de la línea, equivale a / establecer stringel contenido de la línea actual. En caso contrario, equivale a k.

Esto hacenoexplica por qué yoprimeroobtener man strncmp(como si presionara k) yentoncesobtenga ls -ld testdiren mi ejemplo anterior. Con el texto del manual en mente, esperaría presionar ls -ld testdirpor primera vez Up-arrow(lo que, por cierto, sería aún más molesto).

Respuesta1

Resulta que es un comportamiento documentado. Desde la página de manual de ksh93:

Buscar comandos de edición Estos comandos acceden a su historial de comandos.

[count]k Obtener el comando anterior. Cada vez que se ingresa k se accede al comando anterior en el tiempo.

[count]- Equivalente a k.

[count][ASi el cursor está al final de la línea es equivalente a /concadenaestablecido en el contenido de la línea actual. En caso contrario, equivale a k.

[count]j Obtener el siguiente comando. Cada vez que jse ingresa se accede al siguiente comando hacia adelante en el tiempo.

/cadena Busque hacia atrás en el historial un comando anterior que contengacadena. Cadenatermina con una RETURN' orNUEVA LÍNEA'. Sicadenaestá precedido por ^, la línea coincidente debe comenzar concadena. Sicadenaes nulo, se utilizará la cadena anterior.

Nota: Cuando utilice la flecha hacia arriba después de ingresar una cadena, la cadena de búsqueda seráancladoal inicio de la línea, como si ^estuviera escrito al frente.

Ejemplo:

$ ls[Up-Arrow]

es el equivalente de

$ [ESC]/^ls

información relacionada