Jak debugować mój plik vimrc?

80

Mam problem z Vimem i myślę, że może to być mój vimrcplik (lub powiedziano mi, że może to być mój vimrcplik).

Jak to zweryfikować? Jeśli to jest mój vimrcplik, skąd mam wiedzieć, gdzie dokładnie leży problem?

Martin Tournoij
źródło

Odpowiedzi:

79

Pierwszą rzeczą, którą chcesz zrobić, to uruchomić Vima z ustawieniami domyślnymi:

vim -u NONE -U NONE -N

W -u NONEzapobiega Vim z załadowaniem vimrc, -U NONEzapobiega Vima z załadowaniem gvimrc i -Nmó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.

To nie jest mój vimrc!

Hurra! Idź i zadaj pytanie. Pamiętaj, aby wspomnieć, że próbowałeś uruchomić Vima bez pliku vimrc!

Więc to mój vimrc, co teraz?

Jeśli jeszcze tego nie zrobiłeś, prawdopodobnie najpierw chcesz zapisać kopię zapasową pliku vimrc.

Sprawdź wtyczki

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:

  1. Skomentuj (lub usuń) około połowy pliku vimrc.
  2. Uruchom ponownie Vima lub otwórz nowego Vima (przeładowanie vimrc nie jest wystarczająco dobre, ponieważ ustawienia nie są cofnięte).
  3. Czy problem już zniknął? Odłóż z powrotem część, którą usunąłeś (utrzymywanie Vima otwartego i użycie cofania jest przydatne tutaj) i powtórz krok 1 na części, którą ponownie dodałeś.
  4. Czy problem nadal występuje? Przejdź do kroku 1.

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 ;-)

Debugowanie pojedynczej wtyczki

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.

  1. Utwórz nowy pusty katalog; użyjemy ~/pluginścieżki w tym przykładzie. Teraz umieść wtyczkę w zwykłym pack/plugins/start/$namekatalogu. Na przykład:

    git clone https://github.com/fatih/vim-go.git ~/plugin/pack/plugins/start/vim-go
    
  2. Utwórz test-vimrcplik o następującej treści; zapewni to, że Vim załaduje wtyczki z ~/pluginkatalogu, 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
    
  3. 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.

Martin Tournoij
źródło
7
Ta technika nazywa się lokalizacją błędów wyszukiwania binarnego .
tommcdo
2
Po tym, jak odkryjesz swój błąd, byłby to świetny moment, aby zacząć utrzymywać .vimrc pod kontrolą wersji :) Prawie zawsze będzie to jedna z ostatnich zmian, które wprowadziłeś, aby dziwnie się zachowywały.
escrafford
1
Nie potrzebujesz, -U NONEjeśli masz -u NONE.
Antony
@MartinTournoij Zasugerowałem edycję, aby ułatwić czytelnikowi po raz pierwszy zrozumienie. Mam nadzieję, że to lubisz. Dzięki!
jpaugh
1
Dzięki @jpaugh; Myślę, że ten porządek ma większy sens.
Martin Tournoij,
31

Istnieje -Dparametr 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/, nextaby przeanalizować następny wiersz i naciskać Enter.

I contlub qwrócić do viminterfejsu.

Jeśli używasz wersji GUI, umieść guipolecenie w vimrc, aby rozpocząć debugowanie zaraz po tym poleceniu.

Naciśnij Ctrl+, daby wyświetlić listę dostępnych poleceń

Czytaj więcej:

kenorb
źródło
1
Było to najbardziej pomocne w znalezieniu prostego błędu w pliku .vimrc, który powodował komunikat o błędzie. Warto spróbować najpierw, ponieważ jest to szybkie.
RichVel
1
@kenorb to polecenie jest cholernie niesamowite, uratuj mnie przed przejściem do innego edytora.
TheLazyChap
11

Jak już wspomniano, najpierw spróbuj vim -u NONE -U NONE -Nupewnić 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, -V9to poziom rejestrowania i spróbuj odtworzyć problem.

RSabet
źródło
11

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.

Edy Bourne
źródło
6
A jeśli użyjesz echominnego interesującego polecenia, to :messageswyświetlenie pełnego dziennika wiadomości. Czasami warto spojrzeć na nie po uruchomieniu.
statox
To jest prawie to, czego potrzebowałem, chcę zobaczyć, jaka jest wartość cpoptions w pewnym momencie w moim vimrc, w jaki sposób mogę echo wyniku „: set cpoptions?” ?
Mike Lippert,
10

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
Gregory Nisbet
źródło
1

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.

Kristijan
źródło
1
Witamy na stronie! Jest to przydatny smakołyk, ale jest nieco bardziej szczegółowy niż bardzo ogólne pytanie. Może być lepiej dodane jako odpowiedź na np. Na to pytanie , a jeśli chcesz po prostu podzielić się wiedzą, być może możesz zadać i odpowiedzieć na własne pytanie?
Bogaty
0

Oto bardzo prosta procedura na początek.

  1. skomentuj zawartość całego pliku .vimrc
  2. ponownie załaduj .vimrc, uruchamiając :source %lub:so $MYVIMRC
  3. odkomentuj dyskretną część pliku (zazwyczaj zaczynając od góry)
  4. Powtarzaj kroki 2 i 3, aż znajdziesz błąd.
  5. napraw błąd.
Mike Wilding
źródło
1
Ta odpowiedź mogłaby być o wiele lepsza, jeśli poprawnie użyłeś wielkich liter i interpunkcji.
Gorąco polecam to zrobić za pomocą wyszukiwania binarnego.
D. Ben Knoble