Saya bisa gunakan vim -u filename
untuk menggunakan filename
bukan default saya .vimrc
. Saya menggunakan metode ini ketika beralih konteks pengguna ( su
) untuk menggunakan saya .vimrc
meskipun berjalan sebagai pengguna super.
Bagaimana saya bisa mencapai hal yang sama juga untuk folder yang secara default ~/.vim
sehingga saya bisa mengarahkan Vim dari baris perintah ke folder alternatif?
Apa yang ingin saya capai
Oke, anggap pengguna joe
( HOME=/home/joe
) dan pengguna root
( HOME=/root
). Pengguna joe
memiliki set alias untuk vim
yang terlihat seperti ini (tetapi awalnya disetel menggunakan $HOME
variabel untuk membuat ini dinamis):
alias vim='vim -p -N -n -i NONE -u "/home/joe/.vimrc"'
Kemudian pengguna joe
melakukan sesuatu di sepanjang garis sudo su -
(tetapi dengan menambahkan sihir), menghasilkan .bashrc
dan barang lainnya /home/joe
untuk dimuat root
. Pengguna root
sekarang memiliki alias yang sama persis untuk vim
ditetapkan seperti yang ditunjukkan di atas.
Masalahnya adalah ini .vimrc
digunakan pada berbagai sistem dan dalam berbagai skenario. Seringkali akun Joe dipanggil joe
, tetapi kadang-kadang akan menjadi sesuatu seperti local.joe
atau apa pun, menghasilkan nilai yang berbeda $HOME
. Jadi sulit mengkodekan jalur absolut ke ~/.vim
folder sepertinya bukan ide yang bagus. Namun, dalam skenario kami di atas pengguna root
tidak memiliki folder /root/.vim
yang, bagaimanapun, diharapkan ada secara default melalui yang dimuat .vimrc
( /home/joe/.vimrc
).
Apa yang ingin saya capai - lebih disukai di baris perintah - adalah untuk mendapatkan Vim untuk menggunakan plugin dll dari bawah /home/joe/.vim
ketika dimulai sebagai root
(dengan asumsi alias
diatur seperti yang ditunjukkan - kasus lain dapat diabaikan). Jika ada beberapa metode dinamis melalui VimScript, berikan pointer. Tetapi menggunakan variabel seperti $HOME
akan mengarah pada tangkapan 22, saya pikir.
sumber
ln
. seperti 'mv ~ / .vim ~ / .vim-apapun && ln -s ~ / .vim-apapun ~ / .vim` maka lakukan hal yang sama untuk.vimrc
. bungkus semua itu dengan beberapa bash alias sehingga Anda dapat dengan mudah beralih satu cara atau yang lainJawaban:
Vim mencari ~ / .vim karena direktori itu ada dalam daftar default di 'runtimepath', disingkat 'rtp'. Untuk memberi tahu Vim untuk mencari di tempat lain, Anda harus menentukan nilai 'rtp' yang berbeda, atau mengedit default menggunakan panggilan untuk menggantikan () misalnya. Jika Anda hanya ingin Vim mencari di tempat yang berbeda untuk file konfigurasi Anda terlebih dahulu, jangan pedulikan itu juga terlihat di ~ / .vim, dan tidak peduli bahwa itu tidak terlihat di alternatif Anda setelah direktori, perintah cukup sederhana:
Lihat
Mengganti .vim dengan direktori alternatif Anda membutuhkan pengetikan yang lebih sedikit.
Saya mencoba mengganti
~/.vim
dengan jalur lain, tetapi saya tidak bisa menyamai~
, jadi saya teruskan dan memposting apa yang saya miliki.Edit
Alasan saya tidak bisa mencocokkan dengan
~
nilai 'rtp' adalah bahwa ketika nilai diperoleh sebagai nilai&rtp
daripada output:set rtp?
,~
diperluas ke nama path lengkap dari direktori home pengguna. Tidak ada~
hasilnya.Pekerjaan berikut.
sumber
\\~
berfungsi. Satu jalan keluar untuk Bash, kurasa? Bagaimanapun ini masih tidak berfungsi, karena ada sesuatu yang berbeda tentang bagaimana VimScript menangani~
.:set rtp?
menunjukkan "~ / .vim" tetapi itu:echo &rtp
diperluas~
ke nama path lengkap. Tampaknya ini berfungsi: `vim --cmd 'let & rtp = pengganti (& rtp, $ HOME." / \. Vim "," alternate "," g ")'. Saya akan memperbarui jawaban saya.Di .vimrc yang Anda pilih, Anda dapat menentukan jalur runtime:
Jika Anda menggunakan orang
.vimrc
Anda maka Anda dapat mengatur ini ke.vim
direktori pribadi Anda dan itu harus berfungsi seperti halnyasu
akun normal Anda.sumber
$HOME
itu di akun saya sendiri itu akan diselesaikan/home/joe
tetapi sebagai root masih untuk/root
... jadi tidak ada yang dimenangkan. Ini.vimrc
seharusnya bekerja di seluruh platform dan versi Vim dan menetapkan jalur absolut benar-benar menghancurkannya. Terima kasih telah meluangkan waktu untuk menjawab..bashrc
, dapatkah Anda menetapkan variabel, katakanlah$REALHOME
, yang dikecualikan darisudo
reset_env
dan kemudian menggunakannya sebagai dasar untukrtp
?alias sudosu='sudo su -l root -c "REALHOME='\''/home/joe'\'' /bin/bash --rcfile /home/joe/.bashrc"'