Abra todos os arquivos em um diretório usando o vim na ordem inversa

Abra todos os arquivos em um diretório usando o vim na ordem inversa

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 :nna 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 xargspara gerar vim. Dois problemas com isso:

  1. Em geral, os nomes de arquivos podem conter caracteres de nova linha, por isso é melhor separar com caracteres nulos e usar xargs -0.

  2. vimgerado xargsem um pipe reclamará que a entrada não vem de um terminal. Coisas estranhas podem acontecer. Se você xargssuportar -o(reabrir stdin como /dev/ttyno processo filho antes de executar o comando), use-o.

Toda a solução então:

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

Notas:

  • tacnão é exigido pelo POSIX; xargspode não suportar as opções usadas. Toda a abordagem não é portátil.
  • String vazia como argumento de opção tac -sparece definir caracteres nulos como separador sem passar nenhum caractere nulo explicitamente (pode ser problemático).
  • ARG_MAXlimite, não será possível executar um comando mais longo. Se houver muitos arquivos, a expansão *pode exceder o limite, você pode obter arquivos Argument list too long. Se printfestiver embutido no seu shell, o limite pode não se aplicar neste momento. Ainda assim, aplica-se quando xargstenta gerar vim. xargsdetectará isso e executará dois ou mais vimprocessos 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ão ARG_MAXnão será um problema.

informação relacionada