Vim bloccato nella modalità di inserimento


52

Uso Vim da diversi mesi tramite il mio host web (consentono l'accesso allo stucco). All'improvviso, la escapechiave non ha risposto. Non posso esistere inserire o qualsiasi altra modalità semplicemente premendo Esc. Devo colpire F1che richiama l'aiuto in vim e mi mette in modalità comando.

Sono certo che il mio tasto Esc sulla tastiera funzioni correttamente poiché tutte le scorciatoie di Windows che usano il tasto Esc funzionano normalmente.

So che questa è una domanda ridicola e sono certo che c'è molto di più da considerare riguardo una soluzione. Ciò di cui ho veramente bisogno è un solido indizio su dove iniziare a cercare.

Cose che potrebbero aiutare:

  1. Sto usando VIM tramite Putty
  2. Accedo usando il jailshell
  3. Non sono root

quali sono le impostazioni del tuo terminale? cioè, su cosa è esattamente impostata la variabile d'ambiente TERM (nella shell remota)?
Quack Quixote

$ TERM è impostato su 'xterm'
Levi Hack con l'

Funziona Ctrl-[? Cosa ottieni se premi e Ctrl-vpoi scappi? Dovrebbe mostrare come ^[.
In pausa fino a nuovo avviso.

Il Ctrl- [ha funzionato. Rock on! Questo mi risparmia molta frustrazione. C'è qualche possibilità che tu possa spiegare perché escnon funziona più? Inoltre, pubblica il tuo commento come risposta in modo che io possa accettarlo.
Levi Hack con l'

Il mio primo pensiero quando ho letto questo: "Oh, ha rotto il suo pulsante" Fammi uscire di qui ""
Daniel

Risposte:


16

Prova a utilizzare Ctrl-[invece di Esc.

Qual è il risultato di:

python -c "print ord(raw_input('char '))"

quando si preme Esce Enter? Dovrebbe essere "27". Qual è il risultato della pressione Ctrl-Vallora Esc?

Hai controllato tutte le impostazioni in PuTTY per vedere se sono ragionevoli?

Stai usando Bash sul sistema remoto? Guarda l'output di

bind -p | grep -i '\\e' | less

e vedi se vedi qualcosa di insolito. Hai un file chiamato ~/.inputrc? Guarda i suoi contenuti per vedere se qualcosa è insolito.

Guarda il tuo ~/.vimrce vedi se anche tutto va bene.


Anche Ctrl-c dovrebbe terminare la modalità di inserimento (il '[' a volte è un po 'complicato da usare su alcune tastiere)
Akira

1
Ho eseguito lo script Python ed è tornato come una stringa vuota. Come posso risolvere questo problema? Sto usando lo stucco.
Keith,

@Keith: hai provato qualcuno degli altri suggerimenti diagnostici?
In pausa fino a nuovo avviso.

ctrl + [ha funzionato per me per qualsiasi motivo, non ho idea di cosa ho fatto per rimanere bloccato.
Derek Adair,

147

Ho erroneamente premuto Ctrl+ se mi sono bloccato nella modalità di inserimento. Per uscirne usa Ctrl+ q.


7
Questa non è la modalità di inserimento XOFF. Puoi disabilitare il controllo del flusso del software facendo stty -ixon(aggiungilo al tuo ~/.bashrc). Quindi quel tasto sarà disponibile per essere associato a qualcos'altro. Di default in Bash è associato forward-search-history(l'opposto di Ctrl-r). Ctrl-q (Bash quoted-insert) sarà anche disponibile.
In pausa fino a nuovo avviso.

@DennisWilliamson Non .bash_profilesarebbe un posto migliore? Non è necessario disattivarlo nella shell non interattiva, vero?
Piotr Dobrogost

1
@PiotrDobrogost: "Quando viene avviata una shell interattiva che non è una shell di login, Bash legge ed esegue i comandi da ~ / .bashrc, se quel file esiste." .bash_profileviene eseguito solo quando Bash è una shell di accesso. "Quindi, in genere, il tuo ~ / .bash_profile contiene la riga if [ -f ~/.bashrc ]; then . ~/.bashrc; fi"
Messo in pausa fino a nuovo avviso.

@DennisWilliamson Hai ragione. Quello che intendevo dire è che probabilmente ha senso disabilitare il controllo del flusso del software solo nelle shell interattive. Se questo è vero, successivamente avrebbe senso trovare un modo per dire se una shell è interattiva e disabilitare il controllo del flusso del software solo in questo caso.
Piotr Dobrogost,

@PiotrDobrogost: Vedi la mia risposta a "Come posso controllare bash se una shell è in esecuzione in modalità interattiva?"
In pausa fino a nuovo avviso.

4

Forse stai utilizzando la modalità di inserimento .

'insertmode' 'im' 'noinsertmode' 'noim'
booleano (impostazione predefinita disattivata)
Fa funzionare Vim in modo che la modalità Inserisci sia la modalità predefinita. Utile se si desidera utilizzare Vim come editor non modale. Usato per | evim |.
[...]
- Utilizzare CTRL-Oper eseguire un comando in modalità normale | i_CTRL-O |). Quando si tratta di una mappatura, viene eseguita come se 'insertmode' fosse disattivato. La modalità normale rimane attiva fino al termine della mappatura. - Utilizzare CTRL-Lper eseguire una serie di comandi in modalità Normale, quindi utilizzare Escper tornare alla modalità Inserisci. Nota che CTRL-Lsposta il cursore a sinistra, come quando non è impostato 'insertmode'. | i_CTRL-L |

Suggerisco la modifica ~/.vimrcper aggiungere la seguente riga:

set noinsertmode         "disable insert mode

1
Nel mio caso si è bloccato in modalità insert perché avevo accidentalmente usato `-y` nella riga di comando Come detto nel manuale: -y Avvia Vim in modalità facile, proprio come l'eseguibile era chiamato" evim "o" eview ". Fa sì che Vim si comporti come un editor click-and-type. Per uscire da questa "modalità facilità" basta usare <kbd> CTRL </kbd> + <kbd> l </kbd> (L minuscola) come dice + SandRock
ton

0

Ho avuto questo problema, ma mi sono reso conto che era stato modificato accidentalmente la modalità di input SCIM in "Altro - CODICE RAW". L'ho cambiato in inglese / tastiera e non ho avuto più problemi.

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.