Pekerjaan saya cenderung melibatkan penggunaan SSH untuk terhubung ke berbagai mesin, dan kemudian menggunakan vim untuk mengedit file pada mesin tersebut. Masalahnya adalah saya harus terus menyalin file .vimrc saya. Sangat menjengkelkan untuk membuka vim dan tidak memiliki pengaturan apa pun. Apakah mungkin untuk membawa pengaturan vim saya dengan saya dari mesin ke mesin tanpa secara manual menyalinnya ke mana-mana?
34
set background=dark
atauset background=light
, sesuatu yang tidak disentuh distribusi Linux dan sama sekali tidak mengganggu bagi pengguna. </sarcasm>Jawaban:
Aku merasakan sakitmu. Saya memiliki semua file rc ~ /.* saya di bawah kontrol versi (Subversion), telah bekerja dengan baik sejak saya mulai pada tahun 1998, menggunakan CVS. Salah satu cara untuk melakukannya, adalah memeriksa semua file rc Anda seperti ini ketika Anda berdiri di direktori home Anda:
Dengan cara ini file konfigurasi juga akan disinkronkan dan diperbarui di berbagai komputer ketika Anda menjalankan pembaruan svn.
sumber
Alih-alih membawa .vimrc ke setiap server yang harus Anda kerjakan, mengapa tidak mengedit file jarak jauh dari vim lokal Anda:
Dalam vim / gvim, jalankan:
atau mulai vim seperti ini:
Ini membuka file seamingly di tempat (itu sebenarnya menyalin file secara lokal), dan ketika Anda menyimpan, itu mengirim file yang diedit kembali ke server untuk Anda.
Ia meminta kata sandi ssh, tetapi ini dapat dirampingkan melalui kunci ssh.
Seperti yang disebutkan orang lain, satu-satunya kelemahan dari metode ini adalah Anda tidak mendapatkan persaingan jalur / file seperti saat Anda bekerja langsung di mesin.
Untuk info lebih lanjut, lihat tutorial berikut .
sumber
Anda dapat membuat skrip bash untuk menyalinnya secara otomatis setiap kali Anda masuk, seperti ini:
Anda dapat menyebutnya ssh_vim, misalnya. Ini bukan solusi ideal tetapi akan menyelesaikan masalah Anda.
Anda dapat memperbaikinya untuk memeriksa terlebih dahulu jika sudah ada. Jika Anda tidak selalu menjalankan ssh dari mesin yang sama, Anda dapat mengubah skrip untuk mendapatkan file dari scp dari mesin lain.
EDIT1
Pada catatan terkait, Anda juga bisa me-mount sistem file mesin remote dengan sshfs. Dengan begitu Anda mendapat manfaat dari lingkungan dan alat Anda (tidak hanya .vimrc) dan Anda memiliki penyelesaian shell (yang Anda tidak harus menggunakan scp: //).
EDIT2
Saya baru tahu bahwa Anda dapat sumber file .vimrc Anda menggunakan scp: //, seperti ini:
Ini berfungsi dari baris perintah vim tetapi saat ini saya tidak tahu bagaimana mengotomatiskannya. Tampaknya tidak berfungsi baik dengan sakelar '-u' maupun di .vimrc atau dengan $ VIMINIT.
EDIT3
Aku menemukannya! Anda dapat melakukan ini untuk memulai vim dengan .vimrc yang diambil dari referensi Anda:
Opsi '-c' mengeksekusi perintah tepat setelah meluncurkan vim.
Anda dapat membuat alias di shell pilihan Anda untuk menghindari mengetik. Dalam bash akan seperti ini:
sumber
Jika Anda menggunakan otentikasi kunci publik, Anda dapat menggunakannya di
~/.ssh/config
:Saya menyukainya lebih baik daripada trik skrip yang disarankan di atas karena tidak mengacaukan permohonan
ssh
perintah (ketika menentukan parameter tambahan, dll.)sumber
%u@%n:
ke%r@%n:
karena ssh nama berbeda dari nama pengguna laptop sayaBeberapa solusi:
1) Buat share NFS untuk folder rumah Anda dan petakan di banyak lokasi.
2) Buat skrip kecil untuk mendorong .vimrc Anda ke server yang Anda sambungkan dengan file identitas / kunci. Itu bisa terlihat seperti ini (kodesemu):
sumber
Jawaban yang sama persis seperti sunny256, tetapi gunakan git bukan SubVersion.
Simpan satu cabang utama dengan file-file yang umum untuk semua komputer, dan miliki satu cabang untuk setiap komputer baru.
Dengan begitu Anda dapat memiliki file yang hampir sama di kebanyakan komputer, dan masih tidak menjadi bingung.
sumber
Saya tahu ini adalah utas lama, Tapi salah satu cara saya melakukannya adalah menggunakan sshfs yang me-mount sistem file melalui sekering. Vm lokal melakukan semua pengeditan, jadi tidak ada alasan untuk menyalin .vimrc sekitar.
Ini memang memiliki kelemahan bahwa terminal lain harus terbuka untuk setiap perintah yang perlu dijalankan pada server jauh, tetapi untuk mengedit saya menemukan cara ini yang terbaik.
Ini juga memiliki manfaat tambahan karena dapat menggunakan clipboard sistem.
sumber
Saya menggunakan https://github.com/andsens/homeshick untuk mengelola dotfile saya, dan menyimpannya di github.
Homeshick ditulis dalam 100% bash, dan membantu Anda mengelola "kastil" yang hanya repositori git yang berisi direktori / home /. Ini memiliki perintah untuk memindahkan file dot yang ada ke repo dan menggantinya dengan symlink. Dan untuk menghubungkan semua file dalam repo ke direktori home Anda pada mesin baru.
Jadi ide umumnya adalah menyimpan dotfile Anda dalam sistem kontrol versi, dan symlink ke mereka dari jalur nyata. Dengan cara ini repo Anda tidak perlu memulai dari direktori home Anda dan berisi banyak file yang tidak ingin Anda tambahkan.
sumber
Jika Anda seperti saya dan memiliki banyak mesin pengembangan (Mesin Virtual juga) karena berbagai alasan Anda dapat menggabungkan kunci ssh, bash_profile pintar, dan RCS pilihan Anda.
Saya akan menggunakan nfs / samaba / sshfs. Satu penarikan kembali adalah jika Anda tidak memiliki akses jaringan sepanjang waktu maka Anda tidak dapat mengakses apa yang Anda butuhkan (terbang, tidak ada wifi, firewall, masalah perutean, dll). Mesin yang saya sinkronkan tidak semuanya dapat dijangkau pada saat yang bersamaan tetapi saya ingin berbagi informasi di antara mereka.
Berikut ini adalah cara saya meminjam banyak ide dari Internet.
.bash_profile dapat memiliki sesuatu seperti ini
Saya mendapatkan ini dari beberapa tempat tetapi tidak dapat menemukan tautan ke sana sekarang. File shell_ssh_agent:
Sekarang pada login pertama Anda mengatur kunci Anda. Keluar dan masuk dan itu membuat hidup lebih mudah.
Letakkan semua skrip Anda di RCS, ini membuat menjaga mesin pengembangan dalam sinkronisasi lebih mudah. Saya menggunakan git. Otentikasi dengan git adalah melalui ssh sehingga kunci ssh juga membantu di sini. Perhatikan pada titik ini Anda bisa menggunakan sesuatu seperti nfs. Saya masih akan menjadi penggemar RCS karena alasan yang saya sebutkan di bawah ini.
Kasus penggunaannya adalah
Sesuatu yang ingin saya coba berikutnya adalah membungkus login / setup awal dalam makefile yang saya salin ke mesin baru. Makefile kemudian dapat melakukan pekerjaan mengatur kunci Anda, RCS, dll. Jelas ada beberapa overhead di sini tetapi jika Anda akhirnya menyiapkan banyak mesin ini adalah:
sumber
Saya menggunakan makefile yang memiliki daftar semua server yang saya masuki dan ketika saya membuat perubahan pada mesin lokal saya, 'make' dijalankan menggunakan makefile secara otomatis yang memperbarui semua server dengan perubahan atau plugin apa pun
sumber
.PHONY.
"sshrc memecahkan masalah ini. Anda menaruh .vimrc di ~ / .sshrc.d / dan kemudian tambahkan
export VIMINIT="let \$MYVIMRC='$SSHHOME/.sshrc.d/.vimrc' | source \$MYVIMRC"
ke `/.sshrc.sumber
Saya menulis alat sederhana untuk ini yang akan memungkinkan Anda untuk mentransport file .vimrc Anda secara native kapan pun Anda ssh , dengan menggunakan opsi konfigurasi bawaan SSHd dengan cara yang tidak standar.
Tidak ada tambahan
svn
,scp
,copy/paste
, dll diperlukan.Sederhana, ringan, dan berfungsi secara default pada semua konfigurasi server yang telah saya uji sejauh ini.
https://github.com/gWOLF3/viSSHous
sumber
Menggunakan variabel VIMINIT:
dan meneruskannya ke server jauh:
mudah menggunakan .bash_profiles atau .bashrc
Sekarang coba jalankan vim di server jauh menggunakan sshh untuk koneksi:
Jika Anda mau, Anda dapat membawa plugin Anda ke server jarak jauh juga:
sumber
Saya memiliki situasi yang sama, tetapi bukan hanya "
.vimrc
". Saya juga punya hal-hal sepertiSolusi saya (dimulai 30 tahun yang lalu dengan "dist" awalnya!) Adalah mengatur cron malam untuk rsync konfigurasi rumah minimal untuk semua mesin yang saya kerjakan, sehingga pembaruan setiap malam.
Dengan begitu semua mesin lain yang bekerja dengan saya selalu terbarui! Saya bisa menambahkan mesin baru ke daftar 'akun' dan melakukan distribusi mesin tunggal untuk memulainya.
Tidak perlu banyak, dan Anda bisa mulai dari yang kecil dan membuatnya lebih kompleks saat Anda pergi. Seperti yang dapat Anda bayangkan setelah 30 tahun distribusi saya sekarang agak rumit, jadi saya tidak akan menaruhnya di sini. Tak perlu dikatakan itu juga melakukan hal-hal seperti menukar beberapa konfigurasi untuk yang lain untuk beberapa jaringan, pembersihan rumah (EG: trash, file cache), memastikan izin rumah semuanya benar, dan sebagainya.
CATATAN Saya hanya mengizinkan login ssh tanpa kata sandi dari satu mesin 'rumah' ke yang lainnya, tidak pernah kembali lagi! Setiap ssh silang dilindungi kata sandi.
sumber
Anda mungkin mempertimbangkan skrip EXPECT yang memungkinkan Anda untuk mengatur jalur dan lingkungan Anda (seperti variabel EXRC) setelah menekan keystroke tertentu. Seharusnya tidak terlalu lama sebelum seseorang memposting skrip yang serupa.
Ketika server Anda menyimpan lebih dari beberapa lusin (kira-kira ribuan) maka memiliki sesuatu dengan mudah mengatur lingkungan Anda pada kotak 'perawan' adalah penyelamat nyata
Seringkali ketika saya masuk ke sebuah kotak, itu menciptakan homedir saya untuk pertama kalinya!
sumber
Itu diwujudkan dengan oneliner bash berikut. Karena ini dilakukan dengan Proses Pergantian, file sementara tidak dibuat.
https://gist.github.com/blacknon/a47083f3bbbd0374998bdf7e3b3396cc
sumber