Mogę użyć vim -u filename
do użycia filename
zamiast mojego domyślnego .vimrc
. Korzystam z tej metody podczas przełączania kontekstów użytkownika ( su
), aby korzystać z mojego, .vimrc
nawet jeśli działam jako superużytkownik.
Jak mogę to zrobić również dla folderu, który domyślnie jest ~/.vim
tak, że mogę skierować Vima z wiersza poleceń do innego folderu?
Co chcę osiągnąć
OK, załóżmy user joe
( HOME=/home/joe
) i user root
( HOME=/root
). Użytkownik joe
ma ustawiony alias, dla vim
którego wygląda tak (ale pierwotnie ustawiony za pomocą $HOME
zmiennej, aby uczynić to dynamicznym):
alias vim='vim -p -N -n -i NONE -u "/home/joe/.vimrc"'
Następnie użytkownik joe
robi coś zgodnie z sudo su -
(ale z dodaną magią), co powoduje, że .bashrc
i inne gadżety /home/joe
zostaną załadowane root
. Użytkownik root
ma teraz dokładnie taki sam alias dla vim
zestawu, jak pokazano powyżej.
Problem polega na tym, że .vimrc
jest to używane w różnych systemach i różnych scenariuszach. Często nazywane jest konto Joe joe
, ale czasami będzie to coś podobnego local.joe
lub cokolwiek innego, co spowoduje inną wartość $HOME
. Tak więc kodowanie bezwzględne ścieżki do ~/.vim
folderu nie wydaje się dobrym pomysłem. Jednak w naszym powyższym scenariuszu użytkownik root
nie ma folderu, /root/.vim
który powinien istnieć domyślnie za pośrednictwem funkcji load .vimrc
( /home/joe/.vimrc
).
To, co chcę osiągnąć - najlepiej w wierszu poleceń - to skłonić Vima do używania wtyczek itp. Od spodu /home/joe/.vim
po uruchomieniu jako root
(zakładając, że alias
jest ustawiony jak pokazano - inne przypadki można zignorować). Jeśli istnieje jakaś metoda dynamiczna za pomocą VimScript, proszę podać wskaźniki. Ale $HOME
myślę, że użycie takich zmiennych, jak mogłoby doprowadzić do złapania 22.
źródło
ln
. jak 'mv ~ / .vim ~ / .vim -okolwiek && ln -s ~ / .vim -okolwiek ~ / .vim` następnie zrób to samo dla.vimrc
. podsumuj to jakimś pseudonimem bash, abyś mógł łatwo przełączać się między nimiOdpowiedzi:
Vim szuka ~ / .vim, ponieważ ten katalog znajduje się na domyślnej liście w „runtimepath”, w skrócie „rtp”. Aby powiedzieć Vimowi, aby szukał gdzie indziej, będziesz musiał całkowicie określić inną wartość „rtp” lub edytować wartość domyślną, używając na przykład wywołania substitute (). Jeśli po prostu chcesz, aby Vim najpierw szukał w innym miejscu plików konfiguracyjnych, nie przejmuj się, że to też wygląda w ~ / .vim, i nie przejmuj się, że nie wygląda alternatywnie po katalogu, polecenie jest dość proste:
Widzieć
Zastąpienie .vim alternatywnym katalogiem wymaga nieco więcej pisania.
Próbowałem zastąpić
~/.vim
inną ścieżką, ale nie mogłem dorównać~
, więc posunąłem się naprzód i opublikowałem to, co miałem.Edytować
Powodem, dla którego nie mogłem dopasować
~
wartości „rtp”, jest to, że gdy wartość jest uzyskiwana&rtp
raczej jako wartość niż wynik wyjściowy:set rtp?
,~
jest ona rozwijana do pełnej nazwy ścieżki katalogu domowego użytkownika. W~
wyniku nie ma .Następujące prace.
źródło
\\~
spełnia swoje zadanie. Jedna ucieczka dla Basha, jak sądzę? W każdym razie to nadal nie działa, ponieważ coś jest innego w tym, jak VimScript obsługuje~
.:set rtp?
pokazuje „~ / .vim”, ale:echo &rtp
rozwija~
się do pełnej nazwy ścieżki. Wydaje się, że działają: `vim --cmd 'let & rtp = substitute (& rtp, $ HOME." / \. Vim "," alternate "," g ")'. Zaktualizuję moją odpowiedź.W wybranym .vimrc możesz określić ścieżkę środowiska wykonawczego:
Jeśli używasz swojej osoby,
.vimrc
możesz ustawić ją w swoim osobistym.vim
katalogu i powinna ona działać zarówno jakosu
zwykłe konto.źródło
$HOME
wtedy na swoim koncie, rozwiązałoby to,/home/joe
ale jako root nadal/root
... więc nic nie zostanie wygrane. Ma.vimrc
to działać na różnych platformach i wersjach Vima, a ustawienie absolutnej ścieżki całkowicie to łamie. Dzięki za poświęcenie czasu na odpowiedź..bashrc
można ustawić zmienną, powiedzmy$REALHOME
, która jest zwolniona z,sudo
reset_env
a następnie wykorzystać ją jako podstawęrtp
?alias sudosu='sudo su -l root -c "REALHOME='\''/home/joe'\'' /bin/bash --rcfile /home/joe/.bashrc"'