Bagaimana saya bisa mengedit file di jaringan dengan Vim?

13

Saat ini saya sedang melakukannya dengan SSHing ke server, dan mengeksekusi Vim di server. Ini bermanfaat karena tidak harus berurusan dengan sintaks yang rumit untuk membuka file dari server jauh melalui SCP, dan, yang lebih penting, mampu menavigasi sistem file server dengan sangat cepat. Di sisi lain, ia memiliki lag, yang membuat pengeditan agak sulit.

Apa cara kanonik mengedit banyak file jarak jauh?

jcora
sumber
6
Bagaimana tepatnya Anda melakukannya.
Ignacio Vazquez-Abrams
Jika vimmenunjukkan kelambatan, ini mungkin menunjuk pada masalah dengan jaringan Anda dan bukan alur kerja Anda.
Joseph R.
ssh [email protected]; vim / etc / somefile - Saya login, dan kemudian jalankan Vim
jcora
Sebenarnya ini dengan jaringan. Ketika saya menekan tombol, ia harus mengirim paket dari Eropa ke AS, di mana instance Vim yang saya gunakan benar-benar berjalan.
jcora
Anda juga bisa melakukannya ssh [email protected] vim /etc/somefile(perhatikan tidak adanya ;).
terdon

Jawaban:

26

Anda dapat menggunakan SSHFS untuk memasang rumah jarak jauh di folder lokal. Memiliki keuntungan menggunakan infrastruktur saat ini dan latensi rendah dari vim lokal.

Mircea Vutcovici
sumber
1
cara terbaik imo. tidak hanya latensi rendah tetapi hanya harus mempertahankan satu vimrc
exussum
20

Anda dapat mengedit dari jarak jauh dengan vim atau gvim lokal.

:e scp://[email protected]/~/myfiles/whatever.file

scpadalah protokol penyalinan yang aman . Ini mengotentikasi dengan cara yang sama ssh, jadi kunci ssh Anda harus tersedia, dll. Ada berbagai protokol lain yang didukung (lihat :help netrw-externapp) tetapi scp mungkin yang paling mudah jika Anda sudah menggunakan ssh ke tempat yang sama.

Anda dapat menelusuri direktori dengan cara ini, pastikan path berakhir dengan a /. Kalau tidak vim mengubahnya menjadi file baru.

:wsecara otomatis menulis file melalui scp. Jika penulisan gagal karena alasan tertentu, Anda harus memperhatikan, karena itu akan menjadi semacam "shell returns 1" di bilah status. Namun, berhati-hatilah: jika Anda tidak melihat, vim tidak tahu dan itu dapat memiliki konsekuensi - misalnya, jika Anda sekarang berhenti, itu tidak akan memperingatkan Anda. Sangat mudah untuk melewatkan ini jika Anda menggunakan :wabanyak; | Itulah satu-satunya peringatan yang saya miliki.

Untuk dokumen resmi, lihat :help netrw.

goldilocks
sumber
+1 Saya baru saja akan menulis ini. The Plugin netrw (yang biasanya terinstal secara default) memiliki berbagai cara untuk membaca file remote.
Greg Hewgill
Saya merujuk ke opsi ini ketika saya berkata: "Ini memiliki keuntungan karena tidak harus berurusan dengan sintaks yang rumit untuk membuka file dari server jauh melalui SCP, dan, yang lebih penting, dapat benar-benar cepat menavigasi sistem file server" Dengan cara ini sepertinya sangat terbatas pada saya.
jcora
1
Agar adil, pertanyaan Anda awalnya tidak menyebutkan "server jauh melalui SCP", yang diedit kemudian.
Greg Hewgill
@GregHewgill: Terima kasih atas catatannya karena saya agak bingung - ini adalah metode yang paling sederhana dan mudah untuk keperluan umum (jangan tersinggung dengan SSHFS!). Jika menambahkan URL ke file folder relatif rumit, saya ingin tahu bagaimana tugas yang dilakukan sebenarnya memerlukan seseorang untuk duduk dengan editor untuk melakukannya ... esp. karena Anda bisa menaiki panah perintah. Tetapi untuk masing-masing mereka sendiri.
goldilocks
@GregHewgill ya, saya tahu, saya menulis pertanyaan di ponsel saya sambil bergerak jadi saya meninggalkan beberapa hal secara tidak sengaja. goldilocks, saya membuka dan menutup file sepanjang waktu. Navigasikan juga sistem file dan buka dari sana. Menambahkan jalur URL + lebih rumit dari sekadar "berada di sana".
jcora
2

Saya akan menggunakan rsync. Hanya mentransfer apa yang berubah. Seperti itu:

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

kemudian edit file secara lokal sesuai keinginan Anda. Nol lag. Anda harus memeriksa semua file sebelum Anda mengkomitnya:

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

Saya berasumsi Anda pertama kali membuat dir lokal Anda dan cdke dalamnya . Anda juga dapat membuatnya menangani penghapusan file, tetapi berhati-hatilah dengan itu, karena mengeksekusi di direktori yang salah dapat mem-nuke seluruh pohon direktori.

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

Apa yang saya lakukan adalah menjalankannya dalam "mode kering" terlebih dahulu, menggunakan bendera 'n', seperti:

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

Ini akan melaporkan apa yang akan dilakukan, jika itu nyata. Jika saya senang dengan daftar yang dilaporkan, saya menjalankannya lagi, dan menghapus bendera 'n'.

rsync sangat efisien. Ada berbagai bendera lain juga. Cukup canggih.

Mike
sumber
0

Mungkin Anda menamai cara yang paling tepat - cara SSH, tetapi masih tergantung pada sifat dari file yang diedit, Anda dapat mengalokasikan sedikit partisi, membuatnya dibagi dan meletakkan file di sana, tentu saja jika kebijakan keamanan memungkinkan tindakan ini. Untuk saran ini, Anda mungkin paling mudah menggunakan NFS atau Samba, tetapi masih mengedit file tes adalah konsep umum di UNIX dan mungkin Anda harus tetap seperti yang Anda lakukan saat ini.

VVelev
sumber