Ho bisogno di un modo semplice (o complesso) per capire in quale modalità si trova l'utente. Devo sapere se l'utente è in Normale, Inserisci, Visual, Sostituisci, Cambia, ecc.Vim: Come rilevare la modalità in cui si trova l'utente, per statusline?
Sono consapevole del fatto Funzione mode()
, tuttavia non riesco a capire come far produrre una stringa intera invece di un solo carattere.
Il mio piano era di creare una funzione che modificasse dinamicamente i colori di sfondo e di primo piano della riga di stato in base alla stringa restituita da mode()
. Fondamentalmente una funzione con un gruppo di ifs e elseifs che lo farebbe per me. C'è un difetto con questo approccio, però, non posso sapere quale colore il setup del tema di default per quello.
Quindi, in pratica, ho bisogno di un po 'di suggerimenti/aiuto su come fare una funzione che esegue le operazioni seguenti:.
- sa quale modo l'utente è in Il resto delle funzioni reagiscono in modo diverso ogni volta che questo cambia.
- Imposta alcune variabili con valori
fg
ebg
che riflettono ciò che il tema corrente ha impostato per loro. - Modifica il primo piano e lo sfondo della riga di stato in base a questi valori.
Ho provato a farlo, ma era un modo molto crudo di farlo e non ha funzionato affatto. Ha solo impostato i colori una sola volta e successivamente non ha reagito ogni volta che è cambiato.
Grazie per il vostro aiuto! :)
EDIT:
Abbastanza sicuro di quello che ho provato prima di allora non ha funzionato è stato questo:
function! StatuslineModeColor()
let s:StatuslineMode=mode()
if s:StatuslineMode == 'n'
hi Statusline ctermbg=blue guibg=blue
elseif s:StatuslineMode == 'i'
hi Statusline ctermbg=red guibg=red
endif
endfunc
E nella linea di status ho messo il seguente:
let &stl.='%{StatuslineModeColor()}'
EDIT 2:
Ho capito che in pratica quello che devo fare è trovare un modo per afferrare qualsiasi colore s il tema stava usando prima. Questo è se io uso questa soluzione: http://www.reddit.com/r/vim/comments/gexi6/a_smarter_statusline_code_in_comments/c1n2oo5
Tuttavia, questa soluzione non è l'ideale nei miei standard, perché non è pulita, o pulita come potrebbe essere poiché crea un sacco di confusione. :/
@romainl Fatto, ho dimenticato di aggiungere quello. :) Non è la funzione esatta che ho usato prima, ma è abbastanza vicino. – greduan
@romainl Mi sembra di aver trovato una buona versione di Reddit di questo: http://www.reddit.com/r/vim/comments/gexi6/a_smarter_statusline_code_in_comments/c1n2oo5 L'unico problema è che non acquisisce i valori da il tema stesso, quale potrebbe essere un buon modo per farlo? – greduan
1. A cosa serve 'mode()' per produrre una stringa completa? 2. Che cosa fa la variabile locale script nella tua funzione? Dovrebbe essere locale ('l:' o niente al posto di 's:'). – ZyX