2010-05-14 15 views
21

Quando si utilizza l'editor di testo vi programmatori, io spesso utilizzano una ricerca jolly di essere pigro sul file Voglio modificareModifica di file multipli in VI con caratteri jolly

vi ThisIsAReallLongFi*.txt 

Quando questo corrisponde a un singolo file, funziona alla grande. Tuttavia, se corrisponde a più file vi fa qualcosa di strano.

In primo luogo, si apre il primo file per la modifica

In secondo luogo, quando ho: WQ fuori il file, viene visualizzato un messaggio nella parte inferiore del terminale che assomiglia a questo

E173: 4 more files to edit 
Hit ENTER or type command to continue 

Quando ho premi invio, mi restituisce in modalità modifica nel file che avevo appena. Il comportamento che mi aspetterei qui sarebbe che vi passerebbe al prossimo file da modificare.

Quindi,

  1. Qual è la logica che sta dietro il comportamento di VI qui

  2. C'è un modo per andare avanti e modificare il file successivo che è stato abbinato?

E sì, so di completamento automatico, questa domanda si basa sulla curiosità e voler capire meglio il guscio.

risposta

32

vi supporta la disponibilità di più file per la modifica. :n passa al file successivo, :N passa al precedente. Utilizzare :h arglist per ulteriori informazioni.

+1

Un altro mistero decennale risolto. Grazie! –

7

risposta alla domanda CORRENTE

puoi scrivere: vim -p myfile* e vim aprirà tutte le partite per myfile* nella directory corrente in più schede. Quindi, è possibile modificare tutti i file uno per uno. Navigare utilizzando gt per andare alla scheda successiva e gT per andare alla scheda precedente. Per salvare e chiudere tutti i file in una volta sola, è sufficiente scrivere :wqa all'interno di vim.

risposta a un problema SIMILE

stavo affrontando un problema simile. Ho avuto un file chiamato "myfile *" all'interno di più sottodirectory della mia directory corrente. Volevo modificare un piccolo cambiamento in tutti loro senza doverli aprire uno per uno. Quindi, nella riga di comando, ho scritto questo:

$find . -type f -name "myfile*" -exec vim -f {} \; 

In questo modo, find esegue vim per ogni file. Appena esco da un'istanza di vim, find esegue automaticamente un altro con il file successivo fino a quando non sono stati eseguiti tutti. Sebbene, sono d'accordo che sarebbe stato meglio se tutti i file potessero essere aperti come schede.

+2

Inoltre, poiché il numero massimo di schede aperte è ** 10 **, può essere conveniente aumentare il limite impostando un 'tabpagemax' personalizzato in' ~/.vimrc'. Vedi [link] (https://www.linux.com/learn/tutorials/442422-vim-tips-using-tabs) – Campa

+0

+1 per mostrare come cercare nelle sottodirectory e per mostrare il parametro '-exec' per' find '. BTW cosa sta seguendo "\?" Per? –

+0

//, @Abhinav, grazie per la migliore risposta. Questo merita più voti. –