2011-02-01 1 views
11

Sto facendo un find $ PWD -name 'filename' | vim -reindirizzamento dell'output del comando 'find' a 'vim'

in attesa del nome file da aprire nell'editor Vim. ma non sta funzionando. In questo caso, sono sicuro che esiste un solo file con nome 'nomefile'.

Anche il risultato di find fornisce il percorso completo su stdout.

+0

utilizzando 'comando | vim -' dice a vim di leggere l'output da 'command' e di inserirlo in un buffer. (Invece di aprire quei file.) – idbrii

+0

@pydave Ho perso il '-' nel tuo commento. Importante! –

+1

@pydave Incidentalmente, 'vim <(comando)' fa lo stesso, usando la sostituzione del processo di Bash, e questo funziona con più di un semplice vim. per esempio. per vedere le differenze tra due directory, usa 'diff <(ls -l dir1) <(ls -l dir2)' –

risposta

20
vim "$(find "$PWD" -name 'filename')" 

o

find "$PWD" -name 'filename' -exec vim {} \; 

(Si può cadere "$PWD", tra l'altro. find inizia la ricerca dalla directory corrente per impostazione predefinita.)

+0

Grazie Roman .. che ha aiutato .. –

+1

Questo non funziona per me. 'vim" $ (trova "$ PWD" -name 'nomefile') "' apre un nuovo file il cui nome è una concatenazione di tutti i nomi dei file prodotti da find. Questo è su OSX. –

+0

Ah. L'OP specifica che esiste un solo file corrispondente. La mia obiezione è quindi attenuata. –

7

find . -name 'filename' -print0 | xargs -0 vim

dovrebbe anche funzionare. Potresti voler leggere su xargs, che è una cosa utile da sapere.

+1

Questo non funziona per me. 'trova -name 'utility' -print0 | xargs -0 vim' invece apre un singolo nuovo file, il cui nome è una concatenazione dell'output di find. Questo è su OSX. –

+0

Ah. L'OP specifica che esiste un solo file corrispondente.La mia obiezione è quindi attenuata –

0

menzionati nel commento di @ idbrii, ma il mio preferito è:

find . -name 'filename' -type f -exec vim {} \+ 

Questo apre ogni file trovato nel proprio buffer pronto per essere navigato con :next e :prev. Testato su OSX, ma sono abbastanza sicuro che funzionerà anche su Linux.