Vim'e özel .vimrc'yi kullanmasını söylemek kolaydır, ancak ~ / .vim yerine alternatif yol kullanmayı nasıl söyleyebilirim?


15

Varsayılanım yerine kullanmak vim -u filenameiçin kullanabilirim . (Kullanıcı bağlamları geçiş yaparken ben bu yöntemi kullanıyorum ) kullanmak için benim bile süper kullanıcı olarak çalışan gerçi.filename.vimrcsu .vimrc

Nasıl aynı elde edebilirsiniz da varsayılan olarak klasör için ~/.vimben Vim işaret böylece komut satırından alternatif bir klasöre?


Neyi başarmak istiyorum

Tamam, user joe( HOME=/home/joe) ve user root( HOME=/root) öğelerini varsayalım . Kullanıcının buna benzeyen joebir takma adı kümesi vardır vim(ancak başlangıçta $HOMEbu dinamiği oluşturmak için değişken kullanılarak ayarlanır ):

alias vim='vim -p -N -n -i NONE -u "/home/joe/.vimrc"'

Sonra kullanıcı joesatırları boyunca sudo su -(ama büyü ile) bir şey yapar , .bashrcve /home/joeyüklenecek diğer güzellikler ile sonuçlanır root. Kullanıcı root, vimyukarıda gösterildiği gibi artık tam olarak aynı takma ada sahip .

Sorun, bunun .vimrcçeşitli sistemlerde ve çeşitli senaryolarda kullanılmasıdır. Genellikle Joe'nun hesabı çağrılır joe, ancak bazen bunun gibi local.joeveya başka bir şey olabilir ve bunun için farklı bir değer elde edilir $HOME. Bu nedenle, ~/.vimklasöre giden mutlak bir yolu kodlamak iyi bir fikir gibi görünmüyor. Bununla birlikte, yukarıdaki senaryomuzda kullanıcının varsayılan olarak loaded ( ) yoluyla var olması beklenen rootbir klasörü /root/.vimyoktur ..vimrc/home/joe/.vimrc

Başlamak istediğim - tercihen komut satırında - Vim'in aşağıdaki gibi /home/joe/.vimbaşlatıldığında alttan eklentileri vs kullanmasını sağlamaktır root( aliasgösterildiği gibi ayarlandığı varsayılırsa - diğer durumlar göz ardı edilebilir). VimScript üzerinden dinamik bir yöntem varsa, lütfen işaretçiler sağlayın. Ama $HOMEbence değişkenlerin 22 yakalanmasına yol açacağını düşünüyorum.


muhtemelen bunu iyi eski ile yapabilirsiniz ln. 'mv ~ / .vim ~ / .vim-whatever && ln -s ~ / .vim-whatever ~ / .vim` sonra aynısını yapın .vimrc. Kolayca bir şekilde veya diğerine geçebilmeniz için tüm bunları bazı bash takma adları ile sarın
kavanoz

Yanıtlar:


9

Vim ~ / .vim biçiminde görünüyor çünkü bu dizin 'runtimepath' içindeki varsayılan listede 'rtp' olarak kısaltılmış. Vim'e başka bir yere bakmasını söylemek için tamamen farklı bir 'rtp' değeri belirtmeniz veya örneğin substitute () çağrısını kullanarak varsayılanı düzenlemeniz gerekir. Vim'in önce yapılandırma dosyalarınız için farklı bir yere bakmasını istiyorsanız, ~ / .vim içinde de görünmesine dikkat etmeyin ve dizinden sonra alternatifinize bakma oldukça basit:

vim --cmd 'set rtp^=alternate_dir'

Görmek

:help --cmd
:help :set^=

.Vim dosyasını alternatif dizininizle değiştirmek biraz daha yazmayı gerektirir.

vim --cmd 'let &rtp = substitute(&rtp, "\.vim", "alternate", "g")'

~/.vimBaşka bir yolla değiştirmeyi denedim , ancak eşleşemedim ~, bu yüzden devam ettim ve sahip olduğum şeyi gönderdim.

Düzenle

Ben ulaşamasa nedeni ~'RTP' değerinde değeri değeri olarak elde edildiğinde olmasıdır &rtpziyade çıkışında :set rtp?, ~kullanıcının ana dizininin tam yol adını genişletilir. Hiçbir yoktur ~sonucu.

Aşağıdaki işler.

vim --cmd 'let &rtp = substitute(&rtp, $HOME."/\.vim", "alternate", "g")'

cevaplamak için zaman ayırdığınız için teşekkür ederiz. Bu çok umut verici görünüyor . Bunu yarın biraz uğraştıracağım ve nasıl gittiğini size bildireceğim. Keşke VimScript fu'm daha güçlü olsaydı, ama üzerinde çalışıyorum ve bu umut verici bir yöne işaret ediyor.
0xC0000022L

@ 0xC0000022L: bunu gösterme şekliniz \\~işi yapar. Bash için bir kaçış, sanırım? Her neyse, bu hala çalışmıyor, çünkü VimScript'in nasıl işlediğiyle ilgili bir şey farklı ~.
0xC0000022L

Sanırım bende var. Bildirim o :set rtp?gösterileri "~ / .vim" ama bu :echo &rtpgenişlediğinde ~tam yol adının. Şöyle çalışıyor: `vim --cmd 'let & rtp = substitute (& rtp, $ HOME." / \. Vim "," alternate "," g ")'. Cevabımı güncelleyeceğim.
Garyjohn

teşekkürler, çok ilginç ve ince bir fark. Özel durumum için bazı şeyleri daha sorunlu hale getiriyor, ancak kabul edeceğim. Bu beni daha da ileri götürdü.
0xC0000022L

3

Seçtiğiniz .vimrc'de çalışma zamanı yolunu belirleyebilirsiniz:

let &runtimepath=/path/to/specific/vim/folder

Kişinizi kullanıyorsanız, bunu .vimrckişisel .vimdizininize ayarlayabilirsiniz ve hem sunormal hem de normal hesabınızla çalışmalıdır.


Bu tam olarak komut satırından değil. Bunu dinamik yapmanın bir yolu var mı? Bakın, sanırım $HOMEkendi hesabımda çözeceği gibi bir şey kullanacak olsaydım /home/joeama hala kök olarak /root... yani hiçbir şey kazanılmaz. Bunun .vimrcplatformlar ve Vim sürümleri üzerinde çalışması ve mutlak bir yol belirlemesi bunu tamamen kırar. Cevap vermek için zaman ayırdığınız için teşekkür ederiz.
0xC0000022L

@ 0xC Vimrc'yi komut satırından zaten belirtiyorsunuz ve bu da çalışma zamanı yolunu belirtiyor. Vimrc'de değişkenleri tanımlamak için komut dosyaları çalıştırabileceğinizi unutmayın, bu nedenle sorunuzu kesin sonuçla düzenlerseniz, muhtemelen bunu yapmanın bir yolunu bulabiliriz.
Paul

sorumu düzenledi. Sabrınız için teşekkürler :)
0xC0000022L

Kullanıcılarda .bashrc, diyelim ki $REALHOME, bu durumdan muaf tutulan değişkenleri ayarlayabilir sudo reset_envve sonra bunu temeli olarak kullanabilir rtpmisiniz?
Paul

Uygun bir seçenek gibi geliyor . Değişkenleri bu şekilde kaçırmayı daha kolay buldum, ancak:alias sudosu='sudo su -l root -c "REALHOME='\''/home/joe'\'' /bin/bash --rcfile /home/joe/.bashrc"'
0xC0000022L
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.