Come posso modificare i file su una rete con Vim?


13

Attualmente lo sto facendo SSHing in un server ed eseguendo Vim sul server. Questo ha il vantaggio di non avere a che fare con una complessa sintassi di apertura di file da un server remoto su SCP e, soprattutto, di essere in grado di navigare davvero rapidamente nel filesystem del server. D'altra parte, ha un ritardo, che rende difficile il montaggio.

Qual è il modo canonico di modificare molti file remoti?


6
Esattamente come lo stai facendo.
Ignacio Vazquez-Abrams,

Se vimmostra un ritardo, questo probabilmente indica un problema con la tua rete piuttosto che con il tuo flusso di lavoro.
Joseph R.,

ssh root@myvps.com; vim / etc / somefile - Eseguo l'accesso, quindi
accendo

In realtà è con la rete. Quando premo un tasto, deve inviare un pacchetto dall'Europa agli Stati Uniti, dove l'istanza Vim che sto utilizzando è attualmente in esecuzione.
jcora,

Potresti anche farlo ssh root@myvps.com vim /etc/somefile(nota l'assenza di ;).
terdon

Risposte:


26

È possibile utilizzare SSHFS per montare una home remota in una cartella locale. Ha il vantaggio di utilizzare l'infrastruttura attuale e la bassa latenza di vim locale.


1
modo migliore imo. non solo bassa latenza, ma solo per mantenere un vimrc
exussum

20

È possibile modificare in remoto con un vim o gvim locale.

:e scp://me@someplace.else/~/myfiles/whatever.file

scpè un protocollo di copia sicura . Si autentica allo stesso modo di ssh, quindi la tua chiave ssh deve essere disponibile, ecc. Ci sono vari altri protocolli supportati (vedi :help netrw-externapp) ma scp è probabilmente il più semplice se stai già usando ssh nello stesso posto.

Puoi sfogliare le directory in questo modo, assicurati solo che il percorso finisca con a /. Altrimenti vim lo trasforma in un nuovo file.

:wscrive automaticamente il file tramite scp. Se la scrittura non riesce per qualche motivo, dovresti notare, dal momento che saranno un tipo di cosa "shell restituito 1" nella barra di stato. Tuttavia, attenzione: se non lo noti, Vim non lo sa e ciò può avere conseguenze - ad esempio, se ora esci, non ti avvertirà. È particolarmente facile perdere questo se si usa :wamolto; Questo è l'unico avvertimento che ho.

Per i documenti ufficiali, vedere :help netrw.


+1 Stavo per scrivere questo. Il plugin netrw (che di solito è installato di default) ha una grande varietà di modi per leggere i file remoti.
Greg Hewgill,

Mi riferivo a questa opzione quando ho detto: "Questo ha il vantaggio di non dover affrontare la sintassi ingombrante dell'apertura di file da un server remoto su SCP e, soprattutto, di essere in grado di navigare davvero rapidamente nel filesystem del server" In questo modo mi sembra molto limitato.
jcora,

1
Per essere onesti, la tua domanda originariamente non menzionava "server remoto su SCP", che è stato modificato in seguito.
Greg Hewgill,

@GregHewgill: Grazie per quella nota dato che sono un po 'sconcertato: questo è il metodo più semplice e diretto per scopi generali (senza offesa per SSHFS!). Se l'aggiunta di un URL a un percorso di file è relativamente complessa, sono curioso di sapere come l'attività in esecuzione richiede effettivamente che qualcuno si sieda con un editor per farlo ... esp. dal momento che puoi semplicemente freccia su il comando. Ma a ciascuno il proprio.
Riccioli d'oro

@GregHewgill sì, lo so, ho scritto la domanda sul mio telefono mentre mi spostavo, quindi ho lasciato alcune cose fuori involontariamente. Riccioli d'oro, apro e chiudo sempre i file. Naviga anche nel filesystem e aprilo da lì. Aggiungere un percorso URL + è stato più complicato del semplice "essere lì".
jcora,

2

Userei rsync. Trasferisce solo ciò che è cambiato. Così:

rsync -e ssh -va remoteuser@remotehost:remotedir .

quindi modifica i file localmente a tuo piacimento. Ritardo zero. Puoi ispezionare tutti i file prima di impegnarli:

rsync -e ssh -va . remoteuser@remotehost:remotedir

Presumo che tu per prima cosa crei la tua directory locale e cdin quella. Puoi anche far sì che gestisca la rimozione dei file, ma fai molta attenzione, perché eseguirlo nella directory sbagliata potrebbe danneggiare un intero albero di directory.

rsync -e ssh -va --delete . remoteuser@remotehost:remotedir

Quello che faccio è eseguirlo prima in "modalità dry", usando il flag 'n', in questo modo:

rsync -e ssh -van --delete . remoteuser@remotehost:remotedir

Riferirà cosa avrebbe fatto, se fosse stato reale. Se sono soddisfatto dell'elenco riportato, lo eseguo di nuovo e rimuovo il flag 'n'.

rsync è molto efficiente. Ci sono anche molte altre bandiere. È abbastanza sofisticato.


0

Potrebbe essere il nome più appropriato: il modo SSH, ma a seconda della natura stessa dei file modificati, è possibile allocare una piccola partizione, renderla condivisa e inserire i file lì, ovviamente se la politica di sicurezza consente questa azione. Per questo suggerimento potresti usare NFS o Samba più facilmente, ma la modifica del file di test è una concezione generale in UNIX e potrebbe essere che devi mantenerlo come lo fai attualmente.

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.