Cambia la forma del cursore (o il colore) per indicare la modalità vi in ​​bash


30

Per chiarire: non sto chiedendo come cambiare il cursore quando si utilizza vim all'interno di un terminale . Voglio che il cursore cambi quando si passa dalla modalità di input a quella di comando nella modalità vi di Bash:

set -o vi <CR> type some text <ESC> (the cursor changes shape/color)
i (cursor change back) etc... 

Ho trovato uno script che rende possibile cambiare il colore del cursore sulle modifiche di modalità in zsh , ma non voglio cambiare shell solo per questa caratteristica.

C'è un modo per far cambiare forma al cursore, come in gvim, (o anche solo nel colore) quando si passa tra le modalità di comando e inserimento nella riga di comando di Bash?


Stessa domanda a SO di Putty, nessuna risposta tho :( - stackoverflow.com/questions/2393383/...
studgeek

Risposte:


5

aggiungi queste due righe a ~ / .inputrc :

set vi-ins-mode-string \1\e[5 q\2
set vi-cmd-mode-string \1\e[2 q\2

4
Questa risposta sarebbe molto più utile se spieghi cosa fanno e fornisci un contesto, ad esempio, se le impostazioni richiedono all'utente di avere una versione particolare di Readline.
Anthony G - giustizia per Monica il


1
Funzionerà solo su terminali ed emulatori di terminali che comprendono DECSCUSR.
JdeBP,

Ho dovuto aggiungere set show-mode-in-prompt onin ~/.inputrcanche per fare questo lavoro.
ronakg

4

Copiato da qui - Modifica della riga di comando in stile vim

Dovrebbe essere disponibile in bash4.3 - consultare il log delle modifiche -

j.  New user-settable variable, show-mode-in-prompt, adds a characters to the
    beginning of the prompt indicating the current editing mode.

bash4.3 è attualmente allo rcstadio, dovresti essere in grado di ottenere pacchetti per la maggior parte delle distribuzioni senza compilare dalla fonte, anche se non nei repository principali. Per esempio. Ubuntu (amd64) qui e Debian (repository sperimentale) qui .


Nota che: il prompt non verrà aggiornato se usi una PS1 personalizzata che contiene un carattere di nuova riga. trovato qui
pgericson il

@pgericson Sembra funzionare con una PS1 personalizzata contenente una nuova riga per me su bash 4.4.12.
DuBistKomisch,

2

Non ho trovato una soluzione reale, ma forse questo potrebbe aiutare te (o qualcun altro) a trovarne una migliore.

Devi creare uno script (ad es. Kmtest.sh)

#!/bin/bash
# Script "kmtest.sh"

TEST=`bind -v | awk '/keymap/ {print $NF}'`
if [ "$TEST" = 'vi-insert' ]; then
   echo -ne "\033]12;Green\007"
else
   echo -ne "\033]12;Red\007"
fi

e dopo aggiungerlo alla tua PS1, qualcosa del tipo:

export PS1="\u@\h \$(kmtest.sh)> "

ma come ho detto, non è quello che vuoi, perché cambia il colore del cursore solo dopo un cr. In bocca al lupo

gb


Questo ha funzionato davvero per te? Non ha funzionato per me; ha appena reso rosso il cursore. Non penso che kmtest.sh venga eseguito ogni volta che passo tra le modalità di inserimento e comando. Sembra che verrebbe eseguito solo sulla creazione del prompt.
joecan,


1

Anche se non è esattamente quello che vuoi (cambiando dinamicamente il cursore), bash 4.4 / readline 7.0 aggiungerà il supporto per cambiare dinamicamente il prompt . Sarai in grado di specificare indicatori di modalità personalizzati per le modalità di inserimento / comando (questa è diversa show-mode-in-promptdall'opzione corrente che è hardcoded da usare +e :).

Sfortunatamente queste versioni sono attualmente in beta e non sembrano ancora aver risolto tutti i bug. Manca anche la possibilità di specificare dove nel prompt si desidera che si verifichi l'indicatore della modalità.

Nel frattempo ho pubblicato versioni di patch di bash 4.3 / readline 6.3 su github con questa funzionalità.


0

Ho fatto la stessa domanda qualche tempo fa su AskUbuntu mentre stavo passando da Gvim a Console Vim.

Ho ricevuto una risposta, ma ha comportato l'attivazione / disattivazione delle impostazioni dei terminali di gnome e queste impostazioni sono state applicate su tutti i terminali. Pertanto, a volte era possibile che il cursore del terminale gnomo fosse bloccato nello stato sbagliato.

Sono ancora interessato a sapere se ottieni una soluzione soddisfacente, ma nel tempo mi sono adattato alla mancanza di informazioni sullo stato della modalità nel cursore. Forse premo semplicemente Esc più spesso (ad esempio, escper essere in modalità comando; esc iper essere in modalità inserimento); forse guardo lo stato visualizzato nella parte inferiore dello schermo; forse ho appena interiorizzato la modalità.


3
Giusto per chiarire, la tua domanda non è la stessa della mia. Hai chiesto come cambiare il cursore all'interno di Vim sulla console. Questo è ben documentato sul wiki di Vim . Voglio sapere come farlo nella modalità vi di Bash .
joecan,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.