Come posso aprire più file contemporaneamente in Vim?


87

C'è un modo per aprire tutti i file in una directory da Vim? Quindi un :commandche direbbe in effetti "Apri tutti i file sotto /some/pathnei buffer".

Idealmente, sarebbe fantastico aprire ricorsivamente tutti i file in una directory.

Risposte:


105

Il comando che stai cercando è args:

Per esempio:

:args /path_to_dir/*

aprirà tutti i file nella directory


32
Utilizzare **per abbinare i file in modo ricorsivo. Ad esempio:args /path_to_dir/**
daf

1
Per aprire file senza estensione, specificare la directory principale, ad esempio args ** /. Hg / hgrc funziona ma ** / hgrc no.
79E09796

11
Una volta aperti i file, utilizzarli :tab allper inserirli in singole schede.
Backlin

"Tutti i file" includerà sottodirectory che potrebbero non essere desiderate. (I miei errori vim "/path_to_dir/subdir/" Illegal file name). La soluzione rapida è eseguire il secondo comando argd */per rimuovere di nuovo quelli dall'elenco
lessthanideal

Sarebbe davvero bello completare la risposta con il seguente suggerimento: Come buona pratica e per mostrare come applicare lo stesso insieme di comandi a tutti i file che sono stati aperti, puoi eseguire il seguente comando per applicare tutti gli ordini contenuto nel file my_commands_batch.vim:argdo source my_commands_batch.vim
aturegano

21

Perché non funziona se voglio aprire tutti i file che terminano con una certa estensione? Provai

:n ./**.cs

e apre solo i file nella directory corrente.

Ho trovato la risposta Il codice corretto è :n **/*.cs

Per maggiori informazioni :h find


9

Hai provato

:n /some/path/*

Aprirà tutti i file in / some / path

Non penso che aprirà il file in modo ricorsivo.

MODIFICARE

Forse l'uso di ** si aprirà in modo ricorsivo come daf menzionato


Cosa significa: n? Esaminare l'aiuto di vim mi indica solo di "ripetere l'ultimo schema" .. che capisco è la sequenza di tasti. C'è un modo per ottenere aiuto solo per la modalità di comando?
U0001

1
Troppo facile: h: n .. ottenere aiuto per ": n". Non mi piace rispondere alle mie domande;)
U0001

4

Un metodo che non richiede scherzi argsè inserire l'elenco dei file in un file di testo e quindi utilizzare il :socomando per eseguire i comandi in quel file.

Ad esempio, se si desidera aprire tutti i file che terminano in .phpuna determinata directory, creare prima di tutto files.txtcontenente l'elenco dei file, preceduto da qualsiasi comando si desideri utilizzare per aprirli.

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

Quindi, all'interno di vim:

:so files.txt

Se l'elenco dei file è grande, è relativamente semplice generare il files.txtfile rapidamente, reindirizzando l'output di lsa un file e quindi utilizzando una macro vim da anteporre spprima di ogni nome di file.

Questo ovviamente non è così elegante come usare i comandi argse argdo, ma questi comandi sono anche molto più complicati.

Potrebbe esserci anche un modo per farlo con un singolo comando sulla riga di comando, ma anche dopo 16 anni trovo ancora che la programmazione di vim sia strana e arcana.


Interessante ! Sembra un buon modo per mantenere il controllo su quali file è necessario aprire, invece di aprire ciecamente tutti i file di una determinata directory se questi file non sono tutti richiesti.
cram2208

1

Un altro modo per aprire i file in modo ricorsivo

find . -type f -exec vi {} \;

4
Non soddisfa la restrizione "dall'interno di Vim".
ZyX

eppure fa ciò che è necessario :)
rogue-one

3
Non è così. Ciò che è necessario sono i file dalla directory data in modo ricorsivo da vim . Se stai buttando via le condizioni puoi anche dire che kate **/*(^/)(usando la sintassi zsh globbing) fa ciò che è necessario: apre i file dalla directory data in modo ricorsivo. Non è “dall'interno” e non usa affatto vim, ma “fa ciò che è necessario”. O anche kate ~/.vimrc ~/.bashrc. Omettendo "da dentro", "dalla directory data" e "ricorsivamente" del tutto, ma "fa ancora ciò che è necessario": apre i file.
ZyX

Questo apre i file uno alla volta
Paul il

1

Se desideri aggiungere all'elenco degli argomenti;

:arga what_you-d_like_to_add

vedere

:he arga

da / in vim per ulteriori informazioni.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.