2011-10-21 24 views
6

Attualmente sto utilizzando MacVim e mi piacerebbe stampare tutti i file nel mio albero di lavoro. C'è un modo per farlo semplicemente, magari usando il comando hardcopy?Stampa ricorsiva di tutti i file da Vim

+0

': qa' si chiuderà tutti i file aperti ... Mi chiedo se' a' può modificare ? –

risposta

6

Un modo conveniente per eseguire un comando per un gruppo di file è quello di raccogliere l'elenco dei loro nomi , definirlo come il nuovo elenco di argomenti (vedere :help arglist), e quindi iterare il comando su tali file nell'elenco degli argomenti.

  1. Per eseguire il primo passaggio, utilizzare il comando :args con jolly file corrispondenti desideri. Ad esempio,

    :args ./**/* 
    

    imposta la lista degli argomenti per i nomi di tutti i file nella directory corrente e nelle sue sottodirectory; Allo stesso modo,

    :args /tmp/**/*.{c,h} 
    

    seleziona tutti .c e .h i file in /tmp e le sue sottodirectory. Per dettagli su sulla sintassi dei caratteri jolly, vedere :help wildcard.

    Se percorso alla radice di un sottoalbero che contiene i file di stampa è sconosciuta in anticipo ed è costruito da uno script, utilizzare il comando

    :exe 'args' join(map(split(glob(p . '/**/*'), '\n'), 'fnameescape(v:val)')) 
    

    dove si suppone che la variabile p per contenere il percorso di quel root directory.

  2. Per l'invio di file nella lista degli argomenti alla stampante, eseguire il comando :hardcopy per quei file utilizzando il comando :argdo,

    :argdo hardcopy! 
    

    Il ! specificatore sopprime la finestra di dialogo modale per la selezione di stampa parametri.

    Un comando più complicato può essere utilizzato per stampare ciascun file su un documento PostScript separato situato nella stessa directory del file .

    :argdo hardcopy! >%:p.ps 
    

    Qui il nome di un file stampato è concatenato con il suffisso .ps per ottenere il nome di un file PostScript corrispondente (vedi :help cmdline-special).

    Per accelerare il comando :argdo -argument, Vim ignora l'evento Syntax autocomando aggiungendolo alla lista eventignore. Ciò implica che se Syntax autocomandi non fossero stati eseguiti per un file nella lista degli argomenti prima che il comando è :hardcopy:argdo ne, il corrispondente documento stampato non avrebbero un evidenziazione della sintassi (in caso di syntax:y set in printoptions). Per eseguire gli autocomandi Syntax per tutti i file nell'elenco degli argomenti, utilizzare prima il seguente comando .

    :argdo set ei-=Syntax | do Syntax 
    

    Per fare questo nello stesso periodo, come la stampa, concatenare i comandi:

    :argdo set ei-=Syntax | do Syntax | hardcopy! >%:p.ps 
    
+0

Come al solito, molto più approfondito – sehe

+0

Grazie per le risposte ragazzi. Questo funziona. –

+0

@ib. Domanda successiva su questo. Non riesco a ottenere l'evidenziazione della sintassi per funzionare quando utilizzo questo comando. Da quello che posso dire, lo fa per il primo ma nessuno dei successivi stampa su PostScript. Chiedendo, perché è quello? Ho provato 'set printoptions = syntax: y" 'nel mio vimrc ma non sembra fare il trucco –

3

Modifica Mi dispiace, ho frainteso prima.

Per stampare tutto, dicono PHP e C# file nella directory di lavoro:

:args ./*.{cs,php} **/*.{cs,php} 
:argdo ha 
+0

Semplicemente ': args **/*. {Cs, php}' lo farebbe, IIRC. – fachexot

Problemi correlati