Jak mogę zmusić Vima do ignorowania całej konfiguracji użytkownika, tak jakby był świeżo zainstalowany?

21

Aby upewnić się, że moja osobista konfiguracja nie ma wpływu na zachowanie, chcę uruchomić Vima w sposób, który ignoruje wszystkie moje pliki konfiguracyjne instalowane przez użytkownika, tak jakby Vim został świeżo zainstalowany po raz pierwszy i użytkownik go uruchomił natychmiast.

Jest to rozwiązane w FAQ, które sugerują, że odpowiedzią jest uruchomienie Vima za pomocą następującego polecenia:

vim -u NONE -U NONE -N -i NONE

To dostaje większość drogi tam, ale runtimepathopcja zawiera jeszcze ~/.vim, a mianowicie, ~/.vim/after(tak na przykład, jeśli następnie włączyć wykrywanie typu pliku i zmienić typ pliku w kodzie ~/.vim/after/syntax/the_relevant_filetype.vimzostanie wykonana).

Mogę obejść ten konkretny problem, wywołując następujące polecenia podczas uruchamiania *:

:set runtimepath-=~/.vim
:set runtimepath-=~/.vim/after

... ale nie jestem pewien, czy:

  1. To niezawodne rozwiązanie: czy są to jedyne ścieżki, które mogą spowodować, że konfiguracja użytkownika zadziała? Czy jest coś jeszcze, o czym nie myślałem?
  2. Istnieje lepszy sposób na osiągnięcie pożądanego rezultatu.

* Używając argumentów --cmdlub -u vimrcpowłoki, lub po prostu wpisując je ręcznie.

EDYCJA : Oto jeden konkretny przykład problemu, który próbuję rozwiązać. (Chociaż chciałbym, aby rozwiązanie rozwiązało wszelkie możliwe problemy, których jeszcze nie spotkałem.):

  1. Utwórz plik ~ / .vim / after / ftplugin / c.vim, zawierający zawartość:

    noremap i :echom "This is not default behaviour"<CR>
    

    Teraz mamy konfigurację zainstalowaną przez użytkownika, którą chcemy zignorować. Przetestujmy rozwiązanie sugerowane w FAQ.

  2. Uruchom Vima za pomocą polecenia:

    vim -u NONE -U NONE -N -i NONE
    
  3. Wpisz polecenia:

    :filetype plugin on
    :set ft=c
    i
    

Pożądane zachowanie : Vim powinien wejść w tryb wstawiania. Tak by się stało, gdyby nie istniała żadna konfiguracja użytkownika.

Obserwowane zachowanie : Vim wypisuje „To nie jest domyślne zachowanie”

Bogaty
źródło
W systemie Unix-like, co jeśli nie: HOME=/dev/null vim -u NONE?
muru
@muru Fajny pomysł i prawdopodobnie warto go dodać jako odpowiedź, ale nie jest idealny . Oczywiście tracisz możliwość np. :cd ~, Ale także domyślną lokalizacją viminfopliku jest $ HOME, co może powodować E138. Wydaje mi się, że utworzenie nowego, pustego katalogu i użycie go dla $ HOME może być najlepszym rozwiązaniem.
Rich
@muru Właśnie przyszło mi do głowy, że jeśli ustawiasz $ HOME, to prawdopodobnie nie musisz też określać -u NONE?
Bogaty
1
w którym przypadku /tmpmoże być lepiej, to była moja pierwsza myśl, ale potem wybrałem / dev / null jako czarną dziurę. ... lub coś w tym rodzaju HOME=$(mktemp -d) vim ....
muru
Czy nie odczyta vimrc systemu, jeśli go nie używasz -u NONE? Zależy, jakie zachowanie potrzebujesz.
muru

Odpowiedzi:

16

Od wersji Vim 8.0.1554 (niestety jeszcze nie Neovim) możesz używać vim --clean. Ta metoda jest zalecana przez :help bugs.

:help --clean dokumenty:

Podobne do „-u DEFAULTS -U NONE -i NONE”:
- inicjalizacje z plików i zmiennych środowiskowych są pomijane
- „runtimepath” i „packpath” są ustawione tak, aby wykluczały pozycje katalogu domowego (nie dzieje się tak z -u DEFAULTS).
- | defaults.vim | skrypt jest ładowany, co sugeruje „nocompatible”: użyj domyślnych ustawień Vima
- nie | skrypt jest ładowany
- żaden plik viminfo nie jest czytany ani zapisywany

jasonszhao
źródło
1
Ładny! Jest to o wiele prostsze niż manipulowanie $HOMEzmienną. Programiści Goodjob Vim. I dziękuję za odpowiedź!
Bogaty
1
--cleanwspółpracuje neovimteraz również z programem master ( github.com/neovim/neovim/commit/… , który ma zostać uwzględniony w wersji 0.4.0), ale nie wyklucza katalogu domowego.
Christian Clason
(ale łatka czeka na przeniesienie)
Christian Clason
11

Jednym ze sposobów wyeliminowania plików specyficznych dla użytkownika byłoby użycie innej wartości $HOME. Aby nic nie można było odczytać ani zapisać na (np. Viminfo), możesz użyć /dev/null:

HOME=/dev/null vim -u NONE

Spowoduje to błędy dotyczące viminfo, więc zamiast tego możesz utworzyć folder tymczasowy lub użyć istniejącego (jak /tmp):

HOME=$(mktemp -d) vim -u NONE

Z takim $HOME, -u NONEnie mogą być potrzebne, w zależności od tego, co administrator dodaje się do całego systemu vimrc. Na przykład, na wszystkich systemach laboratoryjnych I zarządzają dodałem /etc/vim/vimrc.local(pozyskiwane domyślnie zapakowanej Vima /etc/vim/vimrc), które posiada nocompatible, syntaxitp, zestaw, a filetype ontakże.

muru
źródło
3
vim -i BRAK, aby zapobiec ładowaniu viminfo
Christian Brabandt
1

Nie potrafię odpowiedzieć na wiele z tego, ale nie wspomniałem o jednym punkcie i odpowiadam na interpretację tego, co jest w tytule

Jak mogę zmusić Vima do ignorowania całej konfiguracji użytkownika, tak jakby był świeżo zainstalowany?

niektórzy sugerowali vim -u NONE lubvim -u NORC

to jest pod pewnymi względami trochę więcej boso niż po prostu brak pliku vimrc. Kiedy piszę „i”, nie mówi „wstaw”. Możesz chcieć, aby nadal mówił „wstaw”. Jeśli zacząłeś vim z pustym plikiem vimrc, wyświetli się wstawka

to dlatego, że vim najpierw ładuje domyślną konfigurację.

Możesz wskazać vimowi ten domyślny plik, aby uzyskać efekt pustego pliku vimrc. Sprawdź, czy masz /etc/vim/vimrci możesz to zrobić vim -u /etc/vim/vimrc na OSX, domyślnym plikiem jest/usr/share/vim/vicmrc

barlop
źródło
Myślę, że właśnie to zrobi dla ciebie vim --clean.
quemeraisc
Załaduje vim --cleansię @quemeraisc defaults.vim. Ta odpowiedź odnosi się do vimrc systemu (patrz :help system-vimrc.), Który moim zdaniem nie jest załadowany vim --clean.
Rich
@barlap: Aby uniknąć pomyłek z defaults.vim (patrz :help defaults.vim), może być lepsza zmiana sformułowania default configna system vimrcw tej odpowiedzi. Lub jeszcze lepiej, omów oba w odpowiedzi!
Rich
0

Z Vim-FAQ 2.5 :

2.5 Mam „xyz” (jakiś) problem z Vimem. Jak ustalić, że jest to problem z moją konfiguracją lub z Vimem? / Czy znalazłem błąd w Vimie?

Najpierw musisz dowiedzieć się, czy błąd występuje w rzeczywistych plikach środowiska wykonawczego, czy w jakiejkolwiek wtyczce dystrybuowanej wraz z Vimem, czy jest to prosty efekt uboczny dowolnej opcji konfiguracji z twojego .vimrc lub .gvimrc. Najpierw uruchom vim w ten sposób:

vim -u NONE -U NONE -N -i NONE

uruchamia to Vima w trybie niekompatybilnym (-N), bez odczytu pliku viminfo (-i BRAK), bez odczytu jakiegokolwiek pliku konfiguracyjnego (-u BRAK dla braku odczytu pliku .vimrc i -U BRAK dla braku odczytu pliku .gvimrc) lub nawet wtyczka.

mMontu
źródło
1
Pomimo tego, że znajduje się w FAQ, tak naprawdę nie działa, z powodów wymienionych w pytaniu.
Bogaty
@Rich Z komentarza do pytania: ensure that none of the behaviour I'm seeing is caused by user config- wygląda na to, że próbujesz zrobić dokładnie to , co wyjaśniono w tym FAQ. Przeczytałem ponownie twoje pytanie i nadal nie rozumiem, z jakich powodów wspomniałeś.
mMontu,
Rzeczywiście staram się robić dokładnie to, co wyjaśniono w FAQ. Ale rozwiązanie, które daje, nie działa z powodu runtimepathustawienia.
Bogaty
Co dokładnie jest nie tak z tym runtimepath? Wygląda na domyślną dla tej opcji, jak wyjaśniono w :help rtp. Jak ta wartość wpływa na twój test?
mMontu,
@Rich Mam na myśli, czy widzisz jakieś różnice w porównaniu ze świeżą instalacją po włączeniu wykrywania typu pliku?
mMontu,