Como abrir vários arquivos que correspondem a uma expressão curinga?
Quero editar vários arquivos correspondentes a uma expressão glob. Por exemplo, para editar todos os arquivos de configuração do git nos diretórios filhos, eu posso fazer isso no shell:
Na :linha de comando do Vim , eu esperava :find */.git/configfazer algo semelhante (ou seja, abrir todos os arquivos correspondentes à expressão glob), mas, em vez disso, reclama E77: Too many file names.
Existe o comando Vim ou uma linha para abrir vários arquivos correspondentes a uma expressão curinga / glob (que não envolve a gravação de uma função)?
Você pode usar :args {glob}. No seu globo, **irá percorrer diretórios recursivamente.
Isso preencherá a lista de argumentos, que é a mesma lista que é preenchida quando você inicia o Vim com um ou mais nomes de arquivos como argumentos.
Depois que sua lista de argumentos for preenchida, você poderá navegar por ela usando :nexte :previous. Você também pode pular para o primeiro e o último item com os comandos :firste :last.
Nice :) também :args */.git/configpreenche a lista de buffers, assim :bnexttambém funciona. Isso parece estranho? (Vim 7.4.52 e Neovim)
Também um lembrete para outras pessoas, ]aalterna a :argslista se o github.com/tpope/vim-unimpaired estiver instalado.
Também :argadd file*pode fazer.
Para usar glob patterns ( **), você precisa ter globstardefinido, consulte: Combine todos os arquivos em todos os diretórios aninhados com o shell globbing .
@ JustinM.Keyes A lista de buffers é um superconjunto da lista args, então isso é esperado.
Para abrir arquivos correspondentes em guias separadas…
Explicação: :n ( :next) define a lista do próximo arquivo para todas as correspondências. tab allabre todos os arquivos na lista do próximo arquivo em novas guias.
Explicação: Em glob(…), 0 significa incluir todos os arquivos correspondentes, mesmo se eles fossem ignorados devido às configurações suffixesou wildignorecase. O 1 significa retornar uma lista, em vez de uma string. exe "tabe" fé uma forma abreviada de execute "tabedit" fe significa abrir o arquivo especificado pela variável fem uma nova guia.
Parece :n */.git/config | bufferobras.
Na linha de comando Vim:, eu esperava :find */.git/configfazer algo semelhante (ou seja, abrir todos os arquivos correspondentes à expressão glob), mas, em vez disso, reclama E77: Too many file names.
Não espere nada antes de ler a documentação.
Além da resposta de Tom, você pode usar diretamente :nextcomo alternativa :args.
Abrir arquivos vim */.git/configdefinitivamente deve funcionar. Caso contrário, você deve atualizar o seu Vim para 7.4 (a versão anterior era mais com erros).
Como alternativa, tente um dos seguintes (no editor):
Você não leu minha pergunta com cuidado. E, a resposta aceita já menciona :args.
@ JustinM.Keyes Obrigado por seus pontos. O caractere curinga deve funcionar por padrão e esta é a única resposta que diz que deve funcionar na versão 7.4 (pois eu tinha exatamente o mesmo erro antes da atualização). Usar argsé apenas a solução alternativa, mas mostra ainda mais como usar a expansão do shell no vim-se, caso outros usuários desejem usá-lo para soluções mais complexas, usando find, como este . Então, acho que isso dá algum valor adicional à sua pergunta. Então, espero que esteja tudo bem com você.
Eu nunca tive um problema com vim */foo, e não há nenhuma maneira que possa estar relacionada à versão Vim, porque esse é um recurso do shell .
Óbvio, mas não listado acima - exemplo encontre todos os arquivos sql com a cadeia create_table em seu nome