Bagaimana cara mengedit file dari jauh melalui ssh?

83

Saya harus mengedit beberapa file yang ditempatkan pada beberapa server yang dapat saya jangkau melalui ssh.

Saya lebih suka mengedit file-file ini secara khusus vimdi workstation saya (saya tidak punya hak untuk mengubah vimpengaturan pada server jauh). Terkadang saya ingin mengedit file dengan sublime textatau editor GUI lainnya.

Tentu saja, saya dapat mengunduh file-file ini, mengeditnya secara lokal dan mengunggahnya kembali ke server. Apakah ada solusi yang lebih elegan?

Mesin tenun
sumber

Jawaban:

66

Anda dapat melakukan ini dengan memasang folder jauh sebagai sistem file menggunakan sshfs. Untuk melakukan ini, pertama-tama beberapa prasyarat:

# issue all these cmds on local machine
sudo apt-get install sshfs 
sudo adduser <username> fuse

Sekarang, lakukan proses pemasangan:

mkdir ~/remoteserv    
sshfs -o idmap=user <username>@<ipaddress>:/remotepath ~/remoteserv

Setelah ini, cukup masuk ke folder yang terpasang dan gunakan vim lokal Anda sendiri yang disesuaikan.

shivams
sumber
4
Tidak mengherankan, langkah instalasi akan gagal pada distribusi yang tidak debberbasis dan karenanya tidak memiliki apt-get. (Dalam hal ini, yumatau zyppermungkin ada.) Mereka juga memerlukan root pada mesin lokal, yang mungkin atau mungkin tidak tersedia. (Ini bukan untuk mengatakan itu solusi yang buruk, tetapi ia datang dengan prasyarat besar.)
Ulrich Schwarz
5
Baik. Menemukannya. Semua ini dilakukan pada mesin lokal. Dalam hal OS X kita harus menginstal osxfusedan sshfs. Ini dapat diinstal dengan homebrew ( brew install sshfsdan brew cask install osxfuse, atau dari paket yang diperoleh dari osxfuse.github.io
terinspirasinz
95

Anda dapat melakukannya melalui scpseperti ini:

vim scp://user@myserver[:port]//path/to/file.txt

Perhatikan dua garis miring //antara server dan jalur, yang diperlukan untuk menyelesaikan jalur absolut dengan benar. (Slash pertama adalah sintaksis, sedangkan slash kedua menentukan direktori root pengguna jarak jauh, seperti biasa. Untuk memulai di direktori home, Anda akan melakukannya [:port]/~/path/to/file.txt.) [:port]Adalah opsional.

Ini ditangani oleh plugin standar netrw.vim vim . Beberapa protokol lain didukung.

FloHimself
sumber
6
Ya, file tersebut diambil ke file sementara, yang diunggah ke server saat disimpan.
FloHimself
1
Terima kasih. Namun, saya mendapat kesalahan, ketika mencoba menyimpan file:E382: Cannot write, 'buftype' option is set
Loom
2
Anda dapat mencoba :set buftype=""​di vim.
FloHimself
2
Selanjutnya, vim akan membaca ~/.ssh/configdan menyelesaikan host jarak jauh dengan vim scp://[host]/path.
Jangari
2
@stillanoob::e scp://...
FloHimself
6

Tergantung pada apa yang Anda maksudkan ketika Anda mengatakan Anda tidak memiliki hak untuk mengedit pengaturan Vim, mungkin ada cara menggunakan Vim di server dengan cara yang Anda inginkan. Jika Anda tidak dapat mengubah pengguna Anda .vimrc(karena Anda masuk sebagai pengguna bersama, misalnya) tetapi Anda masih bisa membuat file, buatlah itu sebagai file yang dipanggil, katakan, Loom.vimrclalu panggil Vim menggunakan -usakelar:

vim -u ~/Loom.vimrc file_to_edit

Anda bahkan kemudian dapat menggunakan alias: alias vim='vim -u ~/Loom.vimrc'akan memungkinkan Anda untuk menggunakan Vim dengan cara biasa, dan itu masih akan memuat .vimrcfile kustom Anda . Alias ​​ini tidak akan bertahan setelah Anda keluar, jadi Anda tidak perlu khawatir tentang orang lain yang secara tidak sengaja menggunakan Vim khusus Anda.

Tom Potts
sumber
2

Tergantung pada berapa banyak file dan jenis file apa yang Anda harapkan untuk diedit, ini mungkin tidak persis apa yang ingin Anda lakukan di sini, tapi saya pikir itu layak disebutkan. Jika Anda harus mengedit file di server jauh, tetapi ingin menggunakan semua yang Anda miliki di stasiun kerja Anda sendiri, maka Anda mungkin ingin mulai berpikir untuk menggunakan semacam sistem Kontrol Revisi di mesin Anda. Dengan begitu, Anda dapat memodifikasi salinan lokal di mesin Anda sendiri menggunakan perangkat lunak pilihan Anda, melakukan perubahan, dan kemudian memperbarui salinan lokal di mesin tujuan. Selain mengedit file dengan perangkat lunak apa pun yang Anda rasa nyaman, Anda memiliki nilai tambah memiliki riwayat perubahan yang terkait dengan setiap file, yang selalu baik.

Berikut daftar Perangkat Lunak Kontrol Revisi , untuk berjaga-jaga.

jimm-cl
sumber
Apakah Anda menyarankan penggunaan sesuatu seperti melakukan perubahan git, mendorongnya ke sesuatu seperti github, dan menarik perubahan dari githubke mesin lokal Anda, untuk membuat perubahan di sana?
alpha_989
Itu layak untuk perubahan kode yang kompleks .. tetapi untuk perubahan kode sederhana mungkin .. apa yang @FloHimself atau shivam sebutkan lebih mudah diimplementasikan ..
alpha_989
1

Untuk memperluas jawaban Mr. Potts: Anda juga dapat melakukan hal di atas, lalu masukkan sesuatu seperti ini di .bash_profile (atau apa pun yang menggunakan shell Anda):

if [[ "$(who mom loves | awk ' { print $1 }' )" == "Loom" ]]; then 
         alias vim="vim -u ~/.Loom_vimrc"  
         fi  

di mana Loom adalah userID asli Anda yang Anda masuki sebagai.

Jika Anda masuk sebagai akun bersama (dan bukan akun individu kemudian sudo su - ing, maka mungkin Von Neuman kasihan pada jiwa Anda karena Anda hilang.

Saya akan menaruh ini dalam komentar, tetapi saya tidak bisa mendapatkan kode diformat sama sekali.

Petro
sumber
0

Jika Anda sudah menjalankan sesi vim, gunakan

:silent e scp://user@myserver[:port]//path/to/file.txt

Di :silentdepan akan menekan Press Enter to Continuepesan

dan

e scp://user@myserver[:port]//path/to/file.txtadalah Experintah mode untuk mengedit file remnote.

Diuji dengan BitVise SSHDmenjalankan pada Windows 10, dan menggunakan VIM menjalankan pada Ubuntu 16.04

alpha_989
sumber
Hanya sebuah catatan bahwa ini menekan Press Enter to Continueuntuk pemuatan awal, tetapi tidak untuk yang berikutnya:w
Sparhawk