Como posso abrir vários arquivos de uma vez no Vim?

87

Existe uma maneira de abrir todos os arquivos em um diretório de dentro do Vim? Portanto, :commandisso diria "Abra todos os arquivos /some/pathem buffers".

Idealmente, seria ótimo abrir todos os arquivos em um diretório recursivamente.

Ethan
fonte

Respostas:

105

O comando que você está procurando é args:

Por exemplo:

:args /path_to_dir/*

irá abrir todos os arquivos no diretório

skinp
fonte
32
Use **para combinar arquivos recursivamente. Por exemplo:args /path_to_dir/**
daf
1
Para abrir arquivos sem extensão, especifique o diretório pai, por exemplo, args ** /. Hg / hgrc funciona, mas ** / hgrc não funciona.
79E09796
11
Assim que os arquivos forem abertos, use-os :tab allpara colocá-los em guias individuais.
Backlin
"Todos os arquivos" incluirá subdiretórios que podem não ser desejados. (Meus erros do vim "/path_to_dir/subdir/" Illegal file name). A solução rápida é executar o segundo comando argd */para removê-los da lista novamente
menos do que ideal de
Seria muito bom completar a resposta com a seguinte sugestão: Como uma boa prática e para mostrar como aplicar o mesmo conjunto de comandos a todos os arquivos que foram abertos, você pode executar o seguinte comando para aplicar todas as ordens contido no arquivo my_commands_batch.vim:argdo source my_commands_batch.vim
aturegano
21

Por que não funciona se desejo abrir todos os arquivos que terminam com uma determinada extensão? eu tentei

:n ./**.cs

e abre apenas os arquivos no diretório atual.

Encontrei a resposta. O código correto é :n **/*.cs

Para maiores informações :h find

mp.
fonte
9

Você tentou

:n /some/path/*

Irá abrir todos os arquivos em / algum / caminho

Eu não acho que ele vai abrir o arquivo recursivamente.

EDITAR

Talvez o uso de ** abra recursivamente como daf mencionado

Luc M
fonte
O que significa: n? Olhando para a ajuda do vim apenas me aponta para "repetir o último padrão" .. que eu entendo é o pressionamento de tecla. Existe uma maneira de obter ajuda apenas para o modo de comando?
U0001
1
Muito fácil: h: n .. obtenha ajuda para ": n". Não gosto de responder minhas próprias perguntas;)
U0001
4

Um método que não requer mexer argsé colocar a lista de arquivos em um arquivo de texto e, em seguida, usar o :socomando para executar os comandos desse arquivo.

Por exemplo, se você deseja abrir todos os arquivos que terminam em .phpum determinado diretório, primeiro crie files.txtcontendo a lista de arquivos, prefixada com qualquer comando que deseja usar para abri-los.

sp alpha.php
sp bravo.php
sp charlie.php

Então, no vim:

:so files.txt

Se a lista de arquivos for grande, é relativamente trivial gerar o files.txtarquivo rapidamente, redirecionando a saída lspara um arquivo e, em seguida, usando uma macro do vim para preceder spantes de cada nome de arquivo.

Obviamente, isso não é tão elegante quanto usar os comandos argse argdo, mas esses comandos também são muito mais complicados.

Também pode haver uma maneira de fazer isso com um único comando na linha de comando, mas mesmo depois de 16 anos eu ainda acho a programação vim estranha e misteriosa.

lado sujo
fonte
Interessante! Parece uma boa maneira de manter o controle sobre quais arquivos devem ser abertos, em vez de abrir cegamente todos os arquivos de um determinado diretório se esses arquivos não forem todos necessários.
cram2208
1

Outra maneira de abrir arquivos recursivamente

find . -type f -exec vi {} \;
um ladino
fonte
4
Não atende à restrição “de dentro do Vim”.
ZyX
e ainda faz o que é necessário :)
rogue-one
3
Isso não. O que é necessário são os arquivos do diretório fornecido recursivamente de dentro do vim . Se você está jogando fora as condições, você também pode dizer que kate **/*(^/)(usando a sintaxe zsh globbing) faz o que é necessário: abre arquivos do diretório fornecido recursivamente. Não é “de dentro” e não está usando o vim de forma alguma, mas “ainda faz o que é necessário”. Ou mesmo kate ~/.vimrc ~/.bashrc. Omitindo “de dentro”, “do diretório fornecido” e “recursivamente” ao mesmo tempo, mas “ainda faz o que é necessário”: abre arquivos.
ZyX
Isso abre os arquivos um de cada vez
Paulo
1

Se você gostaria de adicionar à lista de argumentos;

:arga what_you-d_like_to_add

Vejo

:he arga

from / in vim para mais informações.

imediatamente
fonte