¿Cómo abro todos los archivos en un directorio determinado usando vim, en orden alfabético inverso? El comando -
vim *
abriría todos los archivos en orden alfabético. ¿Cómo puedo recorrer los archivos :n
en el orden opuesto? encontré el uso detac
aquí, otra solución aquí que muestra el contenido del archivoaquíy una solución para emacsaquí, pero no son soluciones para vim
.
Respuesta1
La idea general puede ser revertir lo que *
produce:
printf '%s\n' * | tac
y usa esto xargs
para generar vim
. Dos problemas con esto:
En general, los nombres de archivos pueden contener caracteres de nueva línea, por lo que es mejor separarlos con caracteres nulos y usar
xargs -0
.vim
generado porxargs
en una tubería se quejará de que la entrada no proviene de una terminal. Pueden suceder cosas extrañas. Si loxargs
admite-o
(vuelva a abrir stdin como/dev/tty
en el proceso secundario antes de ejecutar el comando), utilícelo.
Toda la solución entonces:
printf '%s\0' * | tac -s "" | xargs -0o vim
Notas:
tac
POSIX no lo requiere;xargs
Es posible que no admita las opciones utilizadas. Todo el enfoque no es portátil.- La cadena vacía como argumento de opción
tac -s
parece establecer un carácter nulo como separador sin pasar ningún carácter nulo explícitamente (puede ser problemático). - Hay
ARG_MAX
límite, no puede ejecutar un comando que sea más largo. Si hay muchos archivos, la expansión*
puede exceder el límite, es posible que obtengaArgument list too long
. Siprintf
es una función incorporada en su shell, es posible que el límite no se aplique en este momento. Aún así se aplica cuandoxargs
se intenta generarvim
.xargs
detectará esto y ejecutará dos o másvim
procesos en secuencia, si es necesario. Sin embargo, es posible que esto no sea lo que desea. Con suerte, dado que va a iterar manualmente con:n
, espero que la cantidad de archivos no sea tan grande, por lo queARG_MAX
no será un problema.