Abra todos los archivos en un directorio usando vim en orden inverso

Abra todos los archivos en un directorio usando vim en orden inverso

¿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 :nen 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 xargspara generar vim. Dos problemas con esto:

  1. 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.

  2. vimgenerado por xargsen una tubería se quejará de que la entrada no proviene de una terminal. Pueden suceder cosas extrañas. Si lo xargsadmite -o(vuelva a abrir stdin como /dev/ttyen el proceso secundario antes de ejecutar el comando), utilícelo.

Toda la solución entonces:

printf '%s\0' * | tac -s "" | xargs -0o vim

Notas:

  • tacPOSIX no lo requiere; xargsEs posible que no admita las opciones utilizadas. Todo el enfoque no es portátil.
  • La cadena vacía como argumento de opción tac -sparece establecer un carácter nulo como separador sin pasar ningún carácter nulo explícitamente (puede ser problemático).
  • HayARG_MAXlí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 obtenga Argument list too long. Si printfes una función incorporada en su shell, es posible que el límite no se aplique en este momento. Aún así se aplica cuando xargsse intenta generar vim. xargsdetectará esto y ejecutará dos o más vimprocesos 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 que ARG_MAXno será un problema.

información relacionada