2012-12-23 10 views
7

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, Zamień, Zmień itp.Vim: Jak wykrywać tryb, w którym znajduje się użytkownik, dla linii statusu?

Jestem świadomy mode() funkcja, jednak nie mogę dowiedzieć się, jak sprawić, by wypisał pełny ciąg zamiast tylko jednego znaku.

Mój plan polegał na stworzeniu funkcji, która dynamicznie zmieniałaby kolory tła i pierwszego planu linii w zależności od tego, jaki ciąg zwraca mode(). Zasadniczo funkcja z grupą ifs i elseifs, która zrobi to za mnie. W tym podejściu jest jednak pewna wada, nie wiem, który kolor domyślnie ustawiony jest dla tego tematu.

Więc zasadniczo Potrzebuję porady/pomocy na temat jak zrobić funkcję, która wykonuje następujące operacje:.

  • Knows tryb których użytkownik jest w Reszta funkcji za każdym razem inaczej reagują zmienia.
  • Ustawia niektóre zmienne z wartościami fg i bg, które odzwierciedlają bieżący motyw ustawiony dla nich.
  • Zmienia pierwszy plan i tło linii podstawowej w zależności od tych wartości.

Próbowałem to zrobić, ale był to bardzo prymitywny sposób robienia tego i nie działał wcale. Ustawiał kolory tylko raz, a potem nie reagował za każdym razem, gdy się zmieniał.

Dzięki za pomoc! :)

EDIT:

całkiem pewien, co starałem wcześniej, że nie było to dzieł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 

A w linii stanu umieścić następujące:

let &stl.='%{StatuslineModeColor()}' 

EDIT 2:

Zrozumiałem, że w zasadzie to, co muszę zrobić, to znaleźć sposób, aby pobrać dowolny kolor s temat był wcześniej używany. To znaczy, jeśli używam 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 ani tak czyste, jak mogłoby się wydawać, ponieważ powoduje dużo bałaganu. :/

+0

@romainl Zrobione, zapomniałem dodać. :) Nie jest to funkcja dokładnie używana wcześniej, ale jest całkiem blisko. – greduan

+0

@romainl Wydaje mi się, że znalazłem dobrą wersję Reddit tego: http://www.reddit.com/r/vim/comments/gexi6/a_smarter_statusline_code_in_comments/c1n2oo5 Jedyny problem z tym, że nie pobiera wartości z sam motyw, co może być dobrym sposobem na zrobienie tego? – greduan

+0

1. Do czego potrzebny jest 'mode()' do wyprowadzenia pełnego ciągu znaków? 2. Co robi lokalna zmienna skryptowa w twojej funkcji? Powinien to być lokalny ('l:' lub nic w miejsce 's:'). – ZyX

Odpowiedz

2

Aktualizacja październik 2016: Od tamtej pory moje dotfiles zostały przeniesione do https://gitlab.com/greduan/dotfiles, więc nowy adres URL do pliku jest: https://gitlab.com/greduan/dotfiles/blob/76e16dd8a04501db29989824af512c453550591d/vim/after/plugin/statusline.vim

Wszystkie linie są takie same.


Ponieważ nikt nie wpadł na odpowiedź zrobiłem moje własne rozwiązanie, można go znaleźć tutaj: https://github.com/Greduan/dotfiles/blob/76e16dd8a04501db29989824af512c453550591d/vim/after/plugin/statusline.vim#L3-L42

Zasadniczo wykonuje następujące operacje:

Lines 3 to 23 zdefiniować zmienną globalną ze słownika zawierającego wszystkie różne tryby, przekładając je na czytelny tekst.Więc n co oznacza normalny zostaje przetłumaczony na Normal, i do Insert itp

Lines 25 to 42 zdefiniować funkcję, która będzie zmieniać kolory linii stanu. Obecnie obsługuje tylko Solarized i tylko jeśli twoja wersja ma to fork/pull request. Jeśli spełnisz te wymagania, dostaniesz czerwone tło, gdy jesteś w trybie wstawiania i zielone tło, gdy w jakimkolwiek trybie wizualnym, pozostałe tryby będą takie same jak normalnie.

I wstawić zdefiniowaną funkcję w linii statusu, a także wyprowadza bieżący tryb w formacie tekstowym, używając zmiennej globalnej zdefiniowanej z linii 3 to 23.

Uważam, że jest to o wiele czystsze rozwiązanie niż zwykle używane (automatyczne polecenia i podobne rzeczy, które widziałem). Zasadniczo jedyną wadą jest to, że nie ma możliwości poznania zmiennych tematu, ale można oczywiście zrobić na przykład hi! link StatusLine Error, dzięki czemu linia statusu będzie miała takie samo podświetlanie składni jak błędy twojego motywu.

Mam nadzieję, że to pomoże!

+0

Referencyjne repozytorium git zostało usunięte. – Von

+0

@ Dziękuję, dodałem notatkę do odpowiedzi. :) – greduan

Powiązane problemy