Mam problem z Vimem i myślę, że może to być mój vimrc
plik (lub powiedziano mi, że może to być mój vimrc
plik).
Jak to zweryfikować? Jeśli to jest mój vimrc
plik, skąd mam wiedzieć, gdzie dokładnie leży problem?
Mam problem z Vimem i myślę, że może to być mój vimrc
plik (lub powiedziano mi, że może to być mój vimrc
plik).
Jak to zweryfikować? Jeśli to jest mój vimrc
plik, skąd mam wiedzieć, gdzie dokładnie leży problem?
Odpowiedzi:
Pierwszą rzeczą, którą chcesz zrobić, to uruchomić Vima z ustawieniami domyślnymi:
vim -u NONE -U NONE -N
W -u NONE
zapobiega Vim z załadowaniem vimrc, -U NONE
zapobiega Vima z załadowaniem gvimrc i -N
mówi Vima używać no-kompatybilnego tryb (nie jest to wymagane, ale większość użytkowników Vim nie są wykorzystywane do trybu „kompatybilne”). Pamiętaj, że wymaganeNONE
jest podanie wielkich liter.
W systemie Windows możesz dodać te flagi, tworząc nowy skrót 1 .
Jeśli problem pozostanie, wiesz, że to nie jest coś w twoim vimrc.
Jeśli problem zniknie, przyczyną jest coś w twoim pliku vimrc.
Hurra! Idź i zadaj pytanie. Pamiętaj, aby wspomnieć, że próbowałeś uruchomić Vima bez pliku vimrc!
Jeśli jeszcze tego nie zrobiłeś, prawdopodobnie najpierw chcesz zapisać kopię zapasową pliku vimrc.
Następną rzeczą, którą prawdopodobnie chcesz zrobić, to najpierw wyłączyć wszystkie wtyczki; wtyczki mogą całkiem sporo zmienić w Vimie. Jeśli to rozwiąże problem, spróbuj dowiedzieć się,
która wtyczka ponownie je włącza. Po ustaleniu, która wtyczka dokładnie powoduje problem, możesz spróbować naprawić problem, czytając dokumentację tej wtyczki i / lub zadając pytanie oznaczone tagiem plugin-<name>
.
Jeśli to nie plugin, a ty nie masz żadnego pojęcia, co jest przyczyną problemu, to jest to procedura prób i błędów. Skomentuj jedną lub więcej linii w swoim vimrc, uruchom Vima, sprawdź, czy problem występuje i powtarzaj tę procedurę, aż problem przestanie występować. Najszybszym sposobem na to jest:
Na koniec powinieneś mieć jedną opcję lub kombinację kilku opcji, które powodują problem. Możesz dowiedzieć się więcej o dowolnej opcji w Vimie, używając:
:help 'option_name'
Cytaty są tutaj ważne, zwykle działają bez nich, ale czasami trafiasz na niewłaściwą stronę, jeśli je pominiesz.
Jeśli po przeczytaniu strony pomocy nadal jesteś zdezorientowany, wiesz, gdzie zadać pytanie ;-)
Jeśli chcesz wyizolować pojedynczą wtyczkę, być może zadając o nią pytanie, chcesz załadować jak najmniej, ale nadal ładować wtyczkę; możesz to łatwo zrobić dzięki funkcji pakietów Vima. Wymaga to Vima 8 lub stosunkowo nowej wersji Neovima.
Utwórz nowy pusty katalog; użyjemy ~/plugin
ścieżki w tym przykładzie. Teraz umieść wtyczkę w zwykłym pack/plugins/start/$name
katalogu. Na przykład:
git clone https://github.com/fatih/vim-go.git ~/plugin/pack/plugins/start/vim-go
Utwórz test-vimrc
plik o następującej treści; zapewni to, że Vim załaduje wtyczki z ~/plugin
katalogu, a nie z ~/.vim
katalogu:
set nocompatible
set packpath=~/plugin,/usr/share/vim/vimfiles,/usr/share/vim/vim80,/usr/share/vim/vimfiles/after,~/plugin/after
packloadall!
syntax on
filetype plugin indent on
Uruchom Vima z:
vim -U NONE -u ~/test-vimrc
Masz teraz minimalny vimrc dzięki tej pojedynczej wtyczce.
Przypisy
1 Na przykład: w 64-bitowym systemie Windows, skrót będzie wyglądać następująco: "C:\Program Files (x86)\Vim\vim74\vim.exe" -u NONE -U NONE -N
. Aby go utworzyć, kliknij prawym przyciskiem myszy w Eksploratorze plików, w którym chcesz skrót, a następnie wybierz Nowy -> Skrót i wklej tekst skrótu. Może być konieczna zmiana ścieżki Vima, jeśli Vim jest zainstalowany w innym miejscu.
-U NONE
jeśli masz -u NONE
.
Istnieje -D
parametr Vim specjalnie do debugowania, który przejdzie w tryb debugowania po wykonaniu pierwszego polecenia ze skryptu.
Np. Aby uruchomić Vima w trybie debugowania bez żadnych wtyczek, uruchom jako:
vim --noplugin -D
Wpisz n
/, next
aby przeanalizować następny wiersz i naciskać Enter.
I cont
lub q
wrócić do vim
interfejsu.
Jeśli używasz wersji GUI, umieść gui
polecenie w vimrc, aby rozpocząć debugowanie zaraz po tym poleceniu.
Naciśnij Ctrl+, daby wyświetlić listę dostępnych poleceń
Czytaj więcej:
:help debug-scripts
Jak już wspomniano, najpierw spróbuj vim -u NONE -U NONE -N
upewnić się, że vim waniliowy działa dobrze.
Następnie uruchom vim normalnie i sprawdź
:messages
od wewnątrz vim po problemie, który pokaże wszystkie ostrzeżenia i błędy.
Na koniec uruchom vim za pomocą następującego polecenia
vim -V9logfile.log
który utworzy plik dziennika o nazwie logfile.log
, -V9
to poziom rejestrowania i spróbuj odtworzyć problem.
Jeszcze jedna wskazówka: jakkolwiek jaskiniowiec może się wydawać, lubię dodawać: echom „message” do mojego .vimrc, aby zobaczyć, co jest wykonywane, a co nie.
Na przykład
if executable('ag')
:echom "AG FOUND"
...
endif
Pomaga mi to szybko sprawdzić, czy blok if jest wykonywany itp. Komunikat zostanie wydrukowany na konsoli przy następnym uruchomieniu vima.
echom
innego interesującego polecenia, to :messages
wyświetlenie pełnego dziennika wiadomości. Czasami warto spojrzeć na nie po uruchomieniu.
Jedną z rzeczy, które znalazłem, jest pomoc w utrzymywaniu kolekcji zmiennych, które przełączają twoje części .vimrc
, abyś mógł je wyłączyć lub włączyć bez konieczności komentowania. Ma również przyjemny efekt uboczny, zmuszając cię do myślenia o swojej organizacji .vimrc
.
" feature toggles in vimrc
let g:vimrc_feat_pathogen = 1
let g:vimrc_feat_core_minimal = 1
let g:vimrc_feat_matchit = 1
let g:vimrc_feat_options = 1
let g:vimrc_feat_colors_and_highlight = 1
let g:vimrc_feat_key_rebinding_arpeggio = 1
let g:vimrc_feat_key_rebinding = 1
let g:vimrc_feat_autocommand_group = 1
let g:vimrc_feat_custom_definitions = 1
let g:vimrc_feat_load_opam = 1
Oto przykład sekcji chronionej przez if
:
if g:vimrc_feat_core_minimal
set nocompatible
filetype plugin indent on
syntax on
endif
Mój czas ładowania vimrc był bardzo wolny, około 400 ms, i skróciłem go do 20 ms tylko poprzez usunięcie tej linii:
silent !mkdir ~/.config/nvim/backups > /dev/null 2>&1
Upewnij się, że nie masz wywołań takich poleceń zewnętrznych.
Oto bardzo prosta procedura na początek.
:source %
lub:so $MYVIMRC