Terminal st, VIM i kolory
Posted on Sat 22 August 2020 in Shitz • 2 min read
Sam sobie zgotowałem ten los! Zacząłem używać skórki Cosmic Latte, i w shellu i w VIM-ie, i dobrze mi z tym jest, z jednym zastrzeżeniem: w trybie Insert w VIM-ie bardzo słabo widać gdzie znajduje się kursor.
Naprawiłem to wprowadzając podświetlenie kolumny, dopisałem do .vimrc to:
set cursorcolumn (demo można sobie zrobić wpisując :set cul)
Było mi mało, więc podświetliłem też wiersz:
set hl=.:Visual
Kropka oznacza aktywny wiersz, a po dwukropku znajduje się nazwa szablonu kolorów. Można się tym fajnie bawić, np. przekreślenie aktywnego wiersza to:
set hl=.t
Wciąż było mi mało, chciałem mieć kursor w innym niż domyślny kolorze ale żadne ustawienia nie działały. Taki efekt można uzyskać np. w 256-kolorowym xtermie, wykorzystując do tego kody ANSI ale ja używam 24-bitowego emulatora st, który domyślnie nie obsługuje tej funkcji.
Na szczęście znalazłem patch: https://st.suckless.org/patches/osc_101112/ po zaaplikowaniu którego można już robić to samo co w xtermie.
Zabarwienie kursora na czerwono sprowadza się do paru linijek w .vimrc:
if &term =~ "xterm\\|rxvt\\|st" " use an orange cursor in insert mode let &t_SI = "\<Esc>]12;orange\x7" " use a red cursor otherwise let &t_EI = "\<Esc>]12;red\x7" silent !echo -ne "\033]12;red\007" " reset cursor when vim exits autocmd VimLeave * silent !printf "\033c" " use \003]12;gray\007 for gnome-terminal endif
Ważna linia to ta, zawierająca "VimLeave", uruchamia ona sekwecję przywracającą domyślne ustawieia. Gdyby jej zabrakło, po wyjściu z VIM-a kursor pozostałby czerwony.
p.s. Wstrzymanie VIM-a (Ctrl+Z) pozostawia czerwony kursor, bawiłem się autokomendami związanymi z buforami ale skończyło się tragicznie.
p.p.s. Przy okazji dowiedziałem się, że istnieje autokomenda:
UserGettingBored When the user presses the same key 42 times. Just kidding! :-)