Używam bindkey -v
(dla bash-erów set -o vi
myślę, że to działa również w zsh) lub vi (m). ale denerwuje mnie to, że nie mam żadnej wizualnej wskazówki, która powiedziałaby mi, czy jestem w trybie wstawiania, czy w trybie poleceń. Czy ktoś wie, jak mogę sprawić, by mój monit wyświetlał ten tryb?
44
CTRL+C
gdy jesteś w trybie polecenia vi, monit zostanie zresetowany, ale zasygnalizuje, że jesteś w trybie poleceń, gdy naprawdę jesteś w trybie wstawiania.zle-line-init
powinien zawsze zmieniać wskaźnik na tryb wstawiania. Z jakiegoś powodu$KEYMAP
nie jest poprawnie aktualizowany po wywołaniu zle-line-init.zle reset-prompt
podczas przerysowywania usunie 1 (lub więcej) linii nad wierszem (jeśli twój wiersz jest wielowierszowy) :( Jest to dla mnie showstopper.Znalazłeś już,
zle-keymap-select
który jest wykonywany przy każdej zmianie trybu. Możesz go użyć, aby ustawić inny wskaźnik wizualny niż monit, w zależności od tego, co obsługuje terminal (i oczywiście od gustu w wyświetlaniu wskaźnika trybu).Istnieje standardowa możliwość zmiany kształtu kursora przez terminfo . Jednak niektóre terminale wyświetlają ten sam kursor w obu trybach. Pojęcie mniej widocznego kursora przez Xterm polega na tym, że miga (i należy to włączyć za pomocą
-bc
argumentu lubcursorBlink
zasobu wiersza poleceń ).W przypadku niektórych terminali można również zmienić kolor kursora za pomocą
print -n '\e]12;pink\a'
(według nazwy koloru) lubprint -n '\e]12;#abcdef\a'
(według specyfikacji RGB). Sekwencje te są opisane w dokumentacji xterm, wctlseqs
pliku; nowoczesne emulatory terminali zazwyczaj emulują xterm, chociaż mogą nie obsługiwać wszystkich jego funkcji.źródło
main
dlaKEYMAP
zamiastviins
, nie wiem dlaczego.main
to pseudonim dlaviins
lub wemacs
zależności od tego, czy zsh myślał, że twój ulubiony edytor to vi, czy nie, kiedy się zaczął. Myślałem, że przydałby sięviins
przy przełączaniu trybu z powrotemvicmd
, ale wydaje się, żemain
zamiast tego używa . Zaktualizowanozle-line-init
(lub dowolną alternatywę), ponieważzle-keymap-select
nie zostanie wywołany, jeśli naciśnięcie klawisza Enter zmieni mapę klawiszy.Dla osób, które mają problemy z używaniem resetowania z monitami wielowierszowymi, działało to dla mnie: http://zeitlens.com/posts/2014-06-29-howto-zsh-vi-style.html W połączeniu z https: // stackoverflow.com/questions/3622943/zsh-vi-mode-status-line Skończyło się na tym, że:
źródło
możesz wypróbować VimMode
źródło
To jest to, czego używam do zmiany kursora między kształtem „Block” i „Beam” w zsh:
(Testowane z termitem , gnome-terminal i mate-terminal )
źródło
add-zsh-hook
tak, aby używałInne rozwiązanie do zmiany kształtu kursora między dwuteownikiem a blokiem (w celu podkreślenia, użyj
\033[4 q
). Dodaj to do swojego~/.zshrc
.Zmodyfikowano z https://bbs.archlinux.org/viewtopic.php?id=95078 . Testowany w gnome-terminalu 3.22.
Aktualizacja
Jeszcze inne rozwiązanie zmiany kształtów kursora można znaleźć tutaj . Ten najwyraźniej działa dla iTerm2, którego nie mam środków do przetestowania, ale dodając go tutaj na wypadek, gdyby był użyteczny dla kogoś innego. Ostatnim dodatkiem do twojego
~/.zshrc
byłobyźródło
Obecnie używam Zsh z motywem Bullet Train . Idąc za przykładem podanym przez odpowiedź Sebastiana Blaska , skończyłem z kodem poniżej
Spowoduje to jedynie zmianę domyślnej $ na litery N na tryb normalny i I na tryb wstawiania.
Ten obraz jest przykładem, gdy w trybie normalnym naciskam Ctrl+ C:
źródło
Oto kolejna wersja oparta na postie Sebastiana Blaska . To miało być jak najbardziej nieinwazyjne, ponieważ wszystkie inne rozwiązania, które mogłem znaleźć, wykorzystywały dodatkowe linie, status po prawej stronie lub dodane znaki.
To po prostu zmienia kolor
$
z białego na czerwony, gdy włączony jest tryb normalny. Edytuj monit zgodnie ze swoimi upodobaniamiźródło
Wersja dla
oh-my-zsh
użytkownikówIstnieje wtyczka dla
oh-my-zsh
wywoływanych,vi-mode
którą można znaleźć tutaj:robbyrussell / oh-my-zsh / plugins / vi-mode
Używam Antigen do zarządzania moimi wtyczkami, więc włączenie tego było tak proste, jak dodanie tego do mojego
.zshrc
:źródło
Zsh-vim-mode wtyczka jest w stanie pokazać wskaźnik dla wkładki, dowodzenia, wyszukiwanie, zamienianie i trybów wizualnych. Wykorzystuje podstawową technikę innych odpowiedzi, aby podłączyć się do różnych zaczepów ZLE (zle-keymap-select, zle-isearch-update itp.). Sprawdza
[[ $ZLE_STATE = *overwrite* ]]
tryb zamiany. Sprawdza,$REGION_ACTIVE
aby zidentyfikować tryb wizualny.Logikę komplikują niektóre dziwactwa, w jaki sposób ZSH uruchamia zdarzenia podczas opuszczania trybu isearch.
Kolejną miłą cechą modułu jest możliwość zmiany kształtu i koloru kursora w zależności od trybu. Na przykład możesz użyć pionowego paska w trybie WSTAWIANIA i migającego podkreślenia w trybie WYSZUKIWANIA.
źródło