Gdy używasz trybu vi (set -o vi) z Bash, dobrze byłoby mieć podpowiedź zależną od trybu, w którym aktualnie jesteś (wstaw lub polecenie). Jak można dowiedzieć się o tym trybie edycji?
Też jestem tego ciekawa. Szukałem w dokumentacji basha, ale niczego nie znalazłem.
Andrew Ferrier,
Odpowiedzi:
67
Świeże bash 4.3 i readline 6.3 mają coś dla was .. z listy zmian:
4.NewFeaturesinReadline
j.New user-settable variable, show-mode-in-prompt, adds a characters to the
beginning of the prompt indicating the current editing mode.
Więc stawiając
set show-mode-in-prompt on
do / etc / inputrc lub ~ / .inputrc (thx stooj) powinny mieć wpływ na wszystkie twoje programy z obsługą readline;)
jakikolwiek status w tej sprawie? Próbuję znaleźć coś takiego (nie dla basha, ale dla innych podpowiedzi opartych na readline, których używam). Szukałem w Google i nie znalazłem żadnej innej aktualizacji (poza tym i artykułem, o którym wspomniałeś )
Mike HR
4
Po prostu dodając z eMPee584 - jeśli używasz basha 4.3 lub nowszego, dodaj następujące polecenie do zestawu plików ~ / .inputrc show-mode-in-prompt To dodaje + po lewej stronie zachęty, jeśli jesteś w trybie edycji i a: jeśli jesteś w trybie poleceń.
stooj
3
Więc podczas gdy to działa; czy jest sposób, aby przenieść się tam, gdzie ten znak trybu vi siedzi w monicie? Jeśli masz podpowiedzi wieloliniowe (niestandardowe), nie działa to tak dobrze :)
James Mills
W 4.3 jest zawsze na początku zachęty i niestety readline przerysuje tylko ostatnią linię wielowierszowej zachęty. Zobacz odpowiedź "Multiline prompt and .inputrc" dla obejścia lub zobacz odpowiedź na temat łatania basha 4.3 z poprawką 4.4.
Możesz wypróbować wersje beta, ale w tej chwili wydają się one nieco wadliwe. Nie obsługują też jeszcze określania miejsca w monicie, w którym ma się pojawiać wskaźnik trybu (co moim zdaniem jest funkcją zabójczą).
Jeśli nie chcesz czekać i nie boisz się małej kompilacji, opublikowałem załatane wersje bash 4.3 i readline 6.3 na github, które obsługują tę funkcjonalność.
Z poprawionymi wersjami możesz robić takie rzeczy:
Po przeszukaniu google, przejrzeniu strony podręcznika bash, a następnie przejrzeniu kodu źródłowego basha (lib / readline / vi_mode.c) wygląda na to, że nie ma łatwego sposobu na zmianę znaku zachęty podczas przechodzenia z trybu wstawiania do trybu poleceń. Wygląda na to, że ktoś może tutaj załatać źródło basha, ponieważ są wezwania do uruchamiania i zatrzymywania trybów w źródle.
Widząc twój post, zaciekawiło mnie ustawienie trybu bash vi. Uwielbiam vi i dlaczego nie w linii poleceń. Wygląda jednak na to, że będziemy musieli śledzić, czy jesteśmy w trybie wstawiania bez szybkiej zmiany (tak mówi wiele postów na forum) .Bo to jest warte, zawsze jesteś w trybie wstawiania, chyba że naciśniesz ESC. Ułatwia to trochę, ale nie zawsze jest tak intuicyjne.
Podnoszę twoje pytanie, ponieważ jestem zainteresowany zobaczeniem, dokąd to zmierza.
Inputrc ma opcję pokazania a +dla wstawiania i :dla trybu normalnego, dodając set show-mode-in-prompt ontak, ~/.inputrcjak napisał eMPee584, ale nie działa to dobrze z multilinią (ze starszymi wersjami bash i readline).
Rozwiązaniem jest pojedyncza linia PS1( >) i funkcja, która wyświetla coś przed monitem. Jest wbudowany w bash i nazywa się PROMPT_COMMAND.
Jeśli używasz kolorów w vi-cmd-mode-stringlub vi-ins-mode-string, powinny one być poprzedzone przedrostkiem \1i uzupełnione o \2. Zobacz tutaj . Ponadto, \[i \[nadal powinno być emitowane, ale będziesz potrzebować \\[i \\]wewnątrz printf.
Tom Hale
1
To jest to, co mam ~/.inputrc
set show-mode-in-prompt onset vi-ins-mode-string \1\e[34;1m\2└──[ins] \1\e[0m\2set vi-cmd-mode-string \1\e[33;1m\2└──[cmd] \1\e[0m\2
Tryb wstawiania ma kolor niebieski.
└──[ins]
Tryb poleceń ma kolor żółty.
└──[cmd]
Wadą jest to, że nie wyświetla się w ttyznaczeniu, działa tylko na emulatorze terminala, tylko kolory.
Próbuję również uzyskać wskaźnik trybu BASH vi i wszyscy nauczyliście się, że brzmi to prosto i po prostu nie ma sposobu, aby to zrobić.
Moje obecne podejście to: naciśnij „a”, gdy nie wiem, który tryb jest. JEŻELI 'a' pojawia się po BASH PROMOT, dowiaduję się, że jestem w trybie 'INSERT'. NASTĘPNIE naciskam „POWRÓT” i kontynuuję. To dla mnie łatwy sposób na rozwiązanie tej małej irytacji.
Nawiasem mówiąc, ja 'alias a =' cal 'lub coś innego, aby nadać pustemu trafieniu' trochę 'użyteczności.
Bardziej sensowne byłoby dla mnie naciśnięcie "esc || c- [" zamiast a. Wtedy nie musisz szukać, aby wiedzieć, w jakim trybie jesteś; lub wstaw niechciane znaki, które musisz usunąć (lub naciśnij klawisz Return)
Różne style podpowiedzi i kursorów za pośrednictwem .inputrc
Najpierw upewnij się, że używasz wersji basha wyższej niż 4.3:
$ bash --version
GNU bash, version 4.4
Następnie umieść następujące wiersze w swoim ~/.inputrc:
#################### VIM ##################### FOR MORE INFORMATION CHECK:# https://wiki.archlinux.org/index.php/Readline# TURN ON VIM (E.G. FOR READLINE)set editing-mode vi
# SHOW THE VIM MODE IN THE PROMPT (COMMAND OR INSERT)set show-mode-in-prompt on
# SET THE MODE STRING AND CURSOR TO INDICATE THE VIM MODE# FOR THE NUMBER AFTER `\e[`:# 0: blinking block# 1: blinking block (default)# 2: steady block# 3: blinking underline# 4: steady underline# 5: blinking bar (xterm)# 6: steady bar (xterm)set vi-ins-mode-string (ins)\1\e[5 q\2
set vi-cmd-mode-string (cmd)\1\e[1 q\2
W trybie poleceń kursor jest wyświetlany jako blok.
W trybie wstawiania kursor jest wyświetlany jako pionowy pasek.
Sam monit będzie wtedy wyglądał następująco, w zależności od trybu:
Odpowiedzi:
Świeże bash 4.3 i readline 6.3 mają coś dla was .. z listy zmian:
Więc stawiając
do / etc / inputrc lub ~ / .inputrc (thx stooj) powinny mieć wpływ na wszystkie twoje programy z obsługą readline;)
źródło
Bash 4.4 / Readline 7.0 doda obsługę ciągów trybu ustawianych przez użytkownika .
Możesz wypróbować wersje beta, ale w tej chwili wydają się one nieco wadliwe. Nie obsługują też jeszcze określania miejsca w monicie, w którym ma się pojawiać wskaźnik trybu (co moim zdaniem jest funkcją zabójczą).
Jeśli nie chcesz czekać i nie boisz się małej kompilacji, opublikowałem załatane wersje bash 4.3 i readline 6.3 na github, które obsługują tę funkcjonalność.
Z poprawionymi wersjami możesz robić takie rzeczy:
Więcej szczegółów, w tym sposób instalacji, można znaleźć pod adresem https://github.com/calid/bash
źródło
Po przeszukaniu google, przejrzeniu strony podręcznika bash, a następnie przejrzeniu kodu źródłowego basha (lib / readline / vi_mode.c) wygląda na to, że nie ma łatwego sposobu na zmianę znaku zachęty podczas przechodzenia z trybu wstawiania do trybu poleceń. Wygląda na to, że ktoś może tutaj załatać źródło basha, ponieważ są wezwania do uruchamiania i zatrzymywania trybów w źródle.
Widząc twój post, zaciekawiło mnie ustawienie trybu bash vi. Uwielbiam vi i dlaczego nie w linii poleceń. Wygląda jednak na to, że będziemy musieli śledzić, czy jesteśmy w trybie wstawiania bez szybkiej zmiany (tak mówi wiele postów na forum) .Bo to jest warte, zawsze jesteś w trybie wstawiania, chyba że naciśniesz ESC. Ułatwia to trochę, ale nie zawsze jest tak intuicyjne.
Podnoszę twoje pytanie, ponieważ jestem zainteresowany zobaczeniem, dokąd to zmierza.
źródło
Wielowierszowy monit i
.inputrc
Inputrc ma opcję pokazania a
+
dla wstawiania i:
dla trybu normalnego, dodającset show-mode-in-prompt on
tak,~/.inputrc
jak napisał eMPee584, ale nie działa to dobrze z multilinią (ze starszymi wersjami bash i readline).Rozwiązaniem jest pojedyncza linia
PS1
(>
) i funkcja, która wyświetla coś przed monitem. Jest wbudowany w bash i nazywa sięPROMPT_COMMAND
.Zwykłe łańcuchy zachęty nie są dostępne w echo printf. Służy
-e
do interpretacji kodów kolorów i nie trzeba dodawać\[
lub\]
, co i tak nie działa.Tryb wstawiania :
Tryb normalny :
Naciskając klawisz, powtarzam się tylko PS1, co dla mnie ma sens:
(Źródło)
źródło
vi-cmd-mode-string
lubvi-ins-mode-string
, powinny one być poprzedzone przedrostkiem\1
i uzupełnione o\2
. Zobacz tutaj . Ponadto,\[
i\[
nadal powinno być emitowane, ale będziesz potrzebować\\[
i\\]
wewnątrz printf.To jest to, co mam
~/.inputrc
Tryb wstawiania ma kolor niebieski.
Tryb poleceń ma kolor żółty.
Wadą jest to, że nie wyświetla się w
tty
znaczeniu, działa tylko na emulatorze terminala, tylko kolory.źródło
Próbuję również uzyskać wskaźnik trybu BASH vi i wszyscy nauczyliście się, że brzmi to prosto i po prostu nie ma sposobu, aby to zrobić.
Moje obecne podejście to: naciśnij „a”, gdy nie wiem, który tryb jest. JEŻELI 'a' pojawia się po BASH PROMOT, dowiaduję się, że jestem w trybie 'INSERT'. NASTĘPNIE naciskam „POWRÓT” i kontynuuję. To dla mnie łatwy sposób na rozwiązanie tej małej irytacji.
Nawiasem mówiąc, ja 'alias a =' cal 'lub coś innego, aby nadać pustemu trafieniu' trochę 'użyteczności.
źródło
dla zachęty Multiline, jak na tym obrazku
moja praca jest taka
mój monit bash
.inputrc
mam nadzieję, że ci to pomogło
źródło
Różne style podpowiedzi i kursorów za pośrednictwem
.inputrc
Najpierw upewnij się, że używasz wersji basha wyższej niż
4.3
:Następnie umieść następujące wiersze w swoim
~/.inputrc
:W trybie poleceń kursor jest wyświetlany jako blok.
W trybie wstawiania kursor jest wyświetlany jako pionowy pasek.
Sam monit będzie wtedy wyglądał następująco, w zależności od trybu:
źródło