2009-05-21 13 views
38

ho messo alcuni alias nel mio .bashrc per aprire un gruppo di file di progetto in gvim, ciascuno nel proprio scheda:Aprire i file in Gvim esistente in più (nuovo) linguette

gvim -p <list of file names using absolute paths> 

questo è tutto bene e buono, tranne che ci sono diversi gruppi di file che potrei desiderare di spostare in un dato momento (il mio progetto attuale usa Ruby on Rails, quindi questo lo spiega). Ciò che sarebbe davvero fantastico è se potessi aggiungere le nuove schede a un'istanza esistente di gvim. Nella mia ultima posizione ho lavorato su Vista; Ho risolto questo problema aprendo un gruppo di schede vuote in gvim, che mi ha permesso di fare clic con il pulsante destro del mouse su un nome file e scegliere "Apri in gvim senza nome esistente". Ora uso Ubuntu e non c'è nulla di simile nel menu di scelta rapida. C'è un modo per farlo dalla riga di comando?

risposta

64

Se vim è compilato con l'opzione clientserver, è possibile farlo. Avviare l'istanza di vim con il flag seguente:

$ gvim --servername GVIM # GVIM is the server name. It can be anything. 

Per aprire più schede in questo caso, è possibile eseguire il comando:

$ gvim --servername GVIM --remote-tab file1 file2 file3 ... 

La caratteristica ClientServer in vim è molto utile. Non è limitato all'apertura di file; può essere usato per inviare qualsiasi comando a vim usando la riga di comando. Ad esempio, per chiudere un'istanza di vim in remoto, è possibile utilizzare:

$ gvim --servername GVIM --remote-send '<Esc>:wqa<CR>' 
+0

vedere vim -h per altre opzioni remote –

+0

ho aggiunto la mia opzione -geom al comando iniziale per avviare gvim. Ho anche dovuto rimuovere l'opzione -p (per le schede) da tutti gli alias. Quindi ha funzionato alla grande! – kajaco

+0

Bene, funziona benissimo tranne che per una cosa: se ho più di un'istanza di gvim, la prima è quella del server e la seconda (o più) creata dal CL o facendo clic su un'icona o selezionando un file su apri con gvim, poi provo ad aprire una scheda nel server uno (ho impostato un alias come accennato), le nuove schede _always_ vanno nell'istanza * second *, indipendentemente da come è stata creata o quale istanza è stata l'ultima attiva. Qualche idea? – kajaco

18

Dall'interno di Gvim, tipo :tabe {file_name}. Questo apre il file con nome in una nuova scheda. Se non siete appassionati di digitare nomi di file lunghi, provate questo:

:tabnew 
:e . 

Si aprirà una nuova pagina vuota scheda e aprire un browser di file. Puoi fare clic con il mouse o utilizzare la tastiera. Fare clic o premere il tasto Invio sul file che si desidera aprire. Prova a usare la tastiera per posizionare il cursore sul file che vuoi aprire e poi premi 't'. Questo apre il file selezionato in una nuova scheda, mantenendo il browser di file aperto nella prima scheda. Questo potrebbe essere un modo veloce per aprire un sacco di file.

Ci sono un sacco di cose che puoi fare con le schede che potrebbero semplificarti la vita. Per accedere alla sezione pertinente nel manuale di aiuto in linea di Vim, digitare :h tabpage.

+0

Questo è anche un grande trucco per aprire un file in un'istanza esistente di gvim. Lo uso per cose che non mi servono abbastanza spesso per fare un alias, e quando voglio solo un file piuttosto che un intero set di essi. – kajaco

+1

Aspetta, c'è dell'altro! Puoi farlo con un solo comando: : tabnew% –

+0

Dato il comando ': tabnew%', Gvim ha aperto una nuova scheda contenente il buffer (nome file) dalla scheda precedente da cui ho inserito il comando. È questo il comportamento corretto? –

1
Ci

è un modo:

n*.cpp|tab ba 

o se vi piace di dividere:

n*.cpp|sba 

Se desiderate saperne di più:

:help ba 

e non so cos'è n, ma non funzionerebbe senza di esso.

utenti
5

Linux possono utilizzare questo tipo di script:

#!/bin/bash 

ANS=`pgrep -fx "gvim --servername GVIM"` 

echo [email protected] 

if [[ ! $ANS ]]; then 
    gvim --servername GVIM 
fi 

if [[ $1 ]]; then 
    gvim --servername GVIM --remote-tab "${@}" 
fi 

E poi modifica file gvim.desktop per l'utilizzo di questo script:

Exec=/home/user/bin/my_gvim_script.sh %F 
9

Vuoi vostro menu contestuale di Windows per consentire di aprire file in una nuova scheda della finestra di gvim attualmente aperta?

Salvare questo come un file chiamato temp.reg e fare doppio clic su di esso per aggiungere le impostazioni al registro. Assicurati di modificare il percorso di vim se il tuo è diverso.

Windows Registry Editor Version 5.00 
[HKEY_CLASSES_ROOT\*\Shell\Open with &Vim] 
[HKEY_CLASSES_ROOT\*\Shell\Open with &Vim\command] 
@="\"C:\\Program Files (x86)\\Vim\\vim73\\gvim.exe\" -p --remote-tab-silent \"%1\" \"%*\"" 

Ora avrete un menu di contesto come questo:

vim context menu

+0

La domanda era come fare su Ubuntu. – kajaco

+1

se l'utente di Ubuntu è abbastanza intelligente da raccogliere la riga di comando dalla risposta che potrebbe funzionare anche per lui. (Controllato su Arch Linux :)) – Slava

1

Ecco il mio gvim script di start-up. È un'estensione delle risposte precedenti. Assicura sola gvim istanza verrà eseguita quando gvim è chiamato in tutte le circostanze:

  • gvim viene chiamato senza nome file quando nessun gvim istanza è in esecuzione; gvim avviato.
  • gvim viene chiamato senza nome file in presenza di un'istanza gvim; viene aperta una nuova scheda vuota.
  • gvim viene chiamato con un nome file con o senza un'istanza gvim; una scheda viene aperta mostrando il file.

Ciò simulerà il comportamento standard di altri editor.

#!/bin/bash 
exec=/usr/bin/gvim #the path to gvim 
if [ $# -eq 0 ] 
    then # no filename given 
    if [ -z $($exec --serverlist) ] 
     then # no filename given and no gvim instance 
     $exec -f --servername GVIM > /dev/null 2>&1 
     else # no filename given, but a gvim instance exists 
     $exec -f --servername GVIM --remote-send ':tabnew<CR>' > /dev/null 2>&1 
    fi 
    else # filenames given 
    $exec -f --servername GVIM --remote-tab "[email protected]" > /dev/null 2>&1 
fi 
Problemi correlati