Vim: Jak wykryć tryb, w którym znajduje się użytkownik, dla linii statusu?
Potrzebuję prostego (lub złożonego) sposobu, aby dowiedzieć się, w jakim trybie znajduje się użytkownik. Muszę wiedzieć, czy użytkownik jest w trybie Normalny, Wstaw, Wizualny, Zastąp, Zmień itd.
Jestem świadomy tegomode()
funkcji, jednak nie mogę wymyślić, jak sprawić, aby wyświetlał pełny łańcuch zamiast tylko jednego znaku.
Mój plan polegał na stworzeniu funkcji, która dynamicznie zmieniałaby kolory tła i pierwszego planu linii statusu, w zależności od ciągumode()
zwraca. Zasadniczo funkcja z wieloma ifami i inififami, które zrobiłyby to dla mnie. Jest jednak pewien błąd w tym podejściu, nie mogę wiedzieć, który kolor domyślnie jest w tym ustawieniu.
Zasadniczo potrzebuję wskazówek / pomocy, jak stworzyć funkcję, która spełnia następujące wymagania:
Zna tryb, w którym znajduje się użytkownik. Reszta funkcji reaguje różnie za każdym razem, gdy się to zmienia.Ustawia niektóre zmienne za pomocąfg
ibg
wartości, które odzwierciedlają obecny temat.Zmienia pierwszy plan i tło linii statusu w zależności od tych wartości.Próbowałem to zrobić, ale był to bardzo prymitywny sposób i nie działał wcale. Ustawia kolory tylko raz i później, nie reaguje za każdym razem, gdy się zmienia.
Dzięki za pomoc! :)
EDYTOWAĆ:
Prawdopodobnie to, co próbowałem wcześniej, nie zadziałało:
function! StatuslineModeColor()
let s:StatuslineMode=mode()
if s:StatuslineMode == 'n'
hi Statusline ctermbg=blue guibg=blue
elseif s:StatuslineMode == 'i'
hi Statusline ctermbg=red guibg=red
endif
endfunc
W linii statusu umieściłem następujące:
let &stl.='%{StatuslineModeColor()}'
EDYCJA 2:
Zorientowałem się, że w zasadzie to, co muszę zrobić, to znaleźć sposób na złapanie kolorów, których wcześniej używał motyw. Jeśli korzystam z tego rozwiązania:http://www.reddit.com/r/vim/comments/gexi6/a_smarter_statusline_code_in_comments/c1n2oo5
Jednak to rozwiązanie nie jest idealne w moich standardach, ponieważ nie jest czyste lub tak czyste, jak mogłoby być, ponieważ stanowi dużo bałaganu. : /