2015-06-22 11 views
8

Io uso la modalità vi in ​​bash tutto il tempo. Sarebbe davvero utile vedere visivamente se sono in modalità comando o inserimento.C'è un modo in modalità bash -o vi per fare in modo che il prompt indichi la modalità normale/comando, ecc.

Per esempio quando voglio cercare la storia, digitando /my_search sia in modalità sembra lo stesso fino a quando si preme Invio , e da allora è troppo tardi. Mi ritrovo a premere Esc molto più del necessario solo per assicurarsi che io sono nel modo giusto ....

+4

Disabilitare la modalità vi e utilizzare '' quando è effettivamente necessario modificare qualcosa. – romainl

+0

È possibile utilizzare l'output da 'bind -v' per trovare la mappa dei tasti corrente. È possibile mappare l'inserimento/lasciare collegamenti degli insiemi per impostare una variabile di shell/ecc. in modo appropriato ma non sono sicuro di dove mostrereste quel valore in quel punto. (Il prompt non funziona quindi dovrebbe essere in qualche luogo più liberamente aggiornabile ... a meno che tu non voglia iniziare a giocare con le dimensioni dei prompt e spostare il cursore per sovrascrivere una stringa in un punto specifico, ecc.) –

+0

I trovato questa pagina che fa quello che vuoi: http://www.snip2code.com/Snippet/205517/Display-Vim-mode-in-Bash-prompt - richiede bash 4.3 –

risposta

1

Non sono sicuro che si può fare questo nel prompt per sé, ma credo che un cursore l'indicatore forma/colore è almeno altrettanto utile.

Il seguente setup fornisce a un cursore quadrato, verde, a blocchi in modalità normale e un cursore di sottolineatura grigio, piatto, grigio in modalità di inserimento. Potrebbe esserci un modo per farlo in bash, ma ho funzionato in Zsh, quindi lo condividerò. Capita di essere in URxvt, ma dovrebbe funzionare anche in xterm. In ~/.zshrc:

# Modal cursor color for vi's insert/normal modes. 
zle-keymap-select() { 
    if [ $KEYMAP = vicmd ]; then 
    echo -ne "\033]12;Green\007" 
    echo -ne "\033[2 q" 
    else 
    echo -ne "\033]12;Grey\007" 
    echo -ne "\033[4 q" 
    fi 
} 
zle -N zle-keymap-select 
zle-line-init() { 
    zle -K viins 
    echo -ne "\033]12;Gray\007" 
    echo -ne "\033[4 q" 
} 
zle -N zle-line-init 

Risorse: https://bbs.archlinux.org/viewtopic.php?id=95078 E https://unix.stackexchange.com/questions/115009/how-to-change-the-cursor-theme-in-cli

EDIT: ho postato un comprehensive guide per ottenere questo lavoro in un combo di vim, zsh, tmux e urxvt.

2

È possibile configurarlo nel file .inputrc utilizzato dalla lettura.

set show-mode-in-prompt 

Per me, questo disegna un + come primo carattere in modalità di inserimento, un : in modalità normale, e nessun personaggio in modalità di ricerca.

(È anche possibile attivare la modalità vi in ​​qui utilizzando set editing-mode vi, che lo abiliterà per tutti i programmi che utilizzano readline, come gli interpreti python e ruby, invece di bash).