Como abro todos os arquivos de um determinado diretório usando o vim, em ordem alfabética inversa? O comando -
vim *
abriria todos os arquivos em ordem alfabética. Como posso iterar pelos arquivos usando :n
na ordem oposta? Eu encontrei o uso detac
aqui, outra solução aqui que exibe o conteúdo do arquivoaqui, e uma solução para emacsaqui, mas não são soluções para vim
.
Responder1
A ideia geral pode ser reverter o que *
produz:
printf '%s\n' * | tac
e use isso xargs
para gerar vim
. Dois problemas com isso:
Em geral, os nomes de arquivos podem conter caracteres de nova linha, por isso é melhor separar com caracteres nulos e usar
xargs -0
.vim
geradoxargs
em um pipe reclamará que a entrada não vem de um terminal. Coisas estranhas podem acontecer. Se vocêxargs
suportar-o
(reabrir stdin como/dev/tty
no processo filho antes de executar o comando), use-o.
Toda a solução então:
printf '%s\0' * | tac -s "" | xargs -0o vim
Notas:
tac
não é exigido pelo POSIX;xargs
pode não suportar as opções usadas. Toda a abordagem não é portátil.- String vazia como argumento de opção
tac -s
parece definir caracteres nulos como separador sem passar nenhum caractere nulo explicitamente (pode ser problemático). - Há
ARG_MAX
limite, não será possível executar um comando mais longo. Se houver muitos arquivos, a expansão*
pode exceder o limite, você pode obter arquivosArgument list too long
. Seprintf
estiver embutido no seu shell, o limite pode não se aplicar neste momento. Ainda assim, aplica-se quandoxargs
tenta gerarvim
.xargs
detectará isso e executará dois ou maisvim
processos em sequência, se necessário. Isso, no entanto, pode não ser o que você deseja. Esperançosamente, como você irá iterar manualmente:n
, espero que o número de arquivos não seja tão grande, entãoARG_MAX
não será um problema.