Come mostrare la modalità Vi corrente quando si usano le combinazioni di tasti Vi nella shell?


15

Uso le combinazioni di tasti vi nella mia shell tcsh.

Ora, non so in quale modalità vi sono ( insertmodalità o commandmodalità), il che porta a molta frustrazione.

Qualcuno sa come mostrare l'attuale modalità vi nella shell? (includendo nel prompt o qualcosa del genere)

Risposte:


4

Non credo che ci sia alcun modo per determinare visivamente in che modalità sei, ma se modifichi un po 'il tuo comportamento non importerà.

Se si desidera essere in modalità comando, premere ESC prima di digitare un comando.

Se si desidera essere in modalità inserimento, premere ESC e i prima di digitare il contenuto.

Finirai per premere ESC molto, ma ogni utente vi che abbia mai incontrato lo fa comunque.


1
Il problema è che, nella shell, gli ESC in più non vengono ignorati - quando do un ESC in più, quindi digito un comando (diciamo h per spostarsi a sinistra), emette semplicemente un segnale acustico e non fa nulla.
Sundar - Ripristina Monica il

2
Con "ESC aggiuntivo", intendo premere ESC quando sono già in modalità comando - cosa che faccio molto poiché non so in che modalità mi trovo.
Sundar - Ripristina Monica

Hai ragione. L'ho usato così a lungo che non mi accorgo più nemmeno quel comportamento. Ancora una volta, la risposta più semplice. Se premi ESC e h e non succede nulla, premi di nuovo h. Penso che si apre un'altra domanda. Perché se si preme ESC mentre si è in modalità "command" delle combinazioni di tasti vi, il carattere successivo non viene interpretato correttamente? vi stesso non lo fa. Posso digitare ESC 10 volte e il comando successivo funziona ancora come previsto.
Bob Weber,

Un altro consiglio, spegni il campanello. È incredibilmente fastidioso solo per il motivo che descrivi e perché emette un segnale acustico al completamento della scheda. Esistono vari modi per farlo a seconda del proprio ambiente.
Bob Weber,

1
Ok, attualmente sto provando questa soluzione. Mappare Caps Lock su Escape ha reso più semplice l'implementazione, ma devo ancora abituarmi a ESC-i per la modalità di inserimento. Spero di farlo presto. > Se premi ESC e h e non succede nulla, premi di nuovo h Il problema è che è piuttosto frustrante e interrompe molto il flusso. È una cosa in più a cui devo pensare oltre al comando che sto formando. Preferisco le combinazioni di tasti vi proprio per la ragione che sono nella mia memoria muscolare e danno una cosa in meno a cui pensare - questo tipo di interruzioni che lo scopo stesso ...
Sundar - Reinstalla Monica il

3

Ho dato un'occhiata alla documentazione e dovrei dire che non sono riuscito a trovare alcun modo per rilevare e visualizzare l'attuale modalità vi. Spero che tu abbia una piacevole sorpresa e qualcuno trovi una soluzione, ma di certo non riesco a vedere un modo per fare ciò che chiedi.

Penso che ci sia un modo per farlo, ma è eccessivo per un piccolo fastidio, e non penso che questo sia ciò che avevi in ​​mente quando hai posto questa domanda. Se questo è vero, smetti di leggere ora e goditi la vita.

OTOH, se questa è davvero la tua pipì per animali domestici, e ti sta facendo impazzire, e vuoi davvero assolutamente disperare di risolvere questo problema, ecco la mia idea di come procedere:

  1. Ottieni una copia di Advanced Programming in UNIX (R) Environment di W. Richard Stevens.
  2. Leggi i capitoli su Stream e Terminal I / O.
  3. Scarica il codice sorgente nel libro di cui sopra, che include un esempio di un flusso che può essere stratificato su un terminale.
  4. Implementa la tua gestione per la combinazione di tasti Esc (o entrambi i tasti di modifica della modalità) e indica tramite una campana o una manipolazione in background della linea corrente.

In breve, Unix implementa l'I / O terminale come un flusso I / O full duplex tra il driver del dispositivo e il processo utente, in cui è possibile inserire i moduli. È organizzato come una pila, quindi puoi sovrapporre tutti i flussi che desideri. La somma dei flussi iniettati crea il comportamento I / O terminale.

Quando viene inserito un personaggio, il primo modulo arriva a ispezionarlo e trasmetterlo (se lo desidera). Quando la risposta arriva nella direzione opposta, ha di nuovo la possibilità di ispezionarla e trasmetterla. Questo è il modo in cui un Ctrl-C viene gestito a un livello superiore rispetto a un normale tasto carattere.

È possibile creare un binario che implementa un modulo stream, che quando viene richiamato viene eseguito silenziosamente in primo piano, ispezionando e passando tutte le sequenze di tasti, eseguendo l'azione preferita sulle sequenze di tasti che ti interessano. A tutti gli effetti, sembrerà che tu stia lavorando sulla shell. Oooh. Puoi invocare questo binario sull'ultima (o prima, o su qualsiasi) riga del tuo .tcshrc e non sapresti nemmeno che è lì.

C'è un buon primer qui , ma non sono riuscito a trovare molto su questo argomento, probabilmente perché è passato agli inizi.


2

Questa pagina ha uno script abbastanza dettagliato che imposta ciò che vuoi (e altro) in zsh . Forse potrebbe essere adattato per funzionare con tcsh (non ho una grande familiarità con quella shell).


Non conosco neanche tcsh, ma penso che la pagina che hai mostrato usi i widget zsh (con zle). Non penso che altri shell lo abbiano, ma se lo facessero, farebbe sicuramente il trucco.
BrianH,

1

Per chiunque abbia questo esatto problema (come me): ho trovato una soluzione su StackOverflow . Apparentemente c'è un supporto nativo per questo in readline, quindi puoi semplicemente aggiungere quanto segue al tuo ~/.inputrc:

set show-mode-in-prompt on

E per personalizzare l'effettivo utilizzo del personaggio:

set vi-ins-mode-string "custom-ins"
set vi-cmd-mode-string "custom-cmd"

0

Modifica della riga di comando con tcsh

Esistono due modalità principali per la modifica della riga di comando,
basate sui due editor di testo più utilizzati, Emacs e vi.

Con i collegamenti vi , è necessario passare tra le modalità di inserimento e comando ;
comandi diversi sono utili in ciascuna modalità.

La modalità vi ha due sottomodalità, inserire emodalità di comando .

  • La modalità predefinita è insert .
  • È possibile alternare tra le modalità premendoEsc .
  • In alternativa, in modalità comando ,
    digitando 'a' (append) o 'i' (insert) si ritorna alla modalità insert
    .

Altre note sulla pagina di tcshpersonalizzazione già collegata sopra.


2
I tuoi collegamenti vanno ai libri di O'Reilly protetti da copyright ...
BrianH,

0

Ho avuto lo stesso identico problema e per caso ho trovato la soluzione. Sebbene questa discussione sia vecchia, non sono riuscito a trovare nessun altro sito web che offra una soluzione, quindi suppongo che pubblicare su questa discussione sia ok.

Basta ripristinare le impostazioni del programma terminale o della shell. Attualmente sto usando PuTTY e ho appena cancellato le mie impostazioni salvate per la mia connessione salvata e ricreato una sessione salvata. Ha funzionato come un fascino.

Spero che sia di aiuto!


0

Si prega di vedere la mia risposta su SO . Bash 4.4 / Readline 7.0 aggiungerà il supporto per questa funzionalità e, nel frattempo, ho pubblicato versioni di patch di Bash 4.3 / Readline 6.3 su github .

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.