Vim preso no modo de inserção

52

Estou usando o Vim há vários meses agora através do meu host (eles permitem acesso à massa). De repente, a escapechave ficou sem resposta. Não posso existir inserção ou qualquer outro modo simplesmente pressionando escape. Eu tenho que acertar o F1que traz a ajuda no vim e me chuta no modo de comando.

Estou certo de que minha tecla de escape no teclado está funcionando bem, pois todos os atalhos do Windows que usam a tecla de escape funcionam normalmente.

Sei que essa é uma pergunta ridícula e tenho certeza de que há muito mais a ser analisado em relação a uma solução. O que eu realmente preciso é de uma sólida liderança sobre onde começar a procurar.

Coisas que podem ajudar:

  1. Estou usando o vim via massa
  2. Estou entrando usando jailshell
  3. Eu não sou raiz
Levi Hackwith
fonte
quais são as suas configurações de terminal? ou seja, qual é exatamente a variável de ambiente TERM definida como (no shell remoto)?
quack quixote
$ TERM está definido como 'xterm'
Levi Hackwith
Funciona Ctrl-[? O que você ganha se pressionar e Ctrl-vdepois escapar? Deve mostrar como ^[.
Pausado até novo aviso.
O Ctrl- [funcionou. Rock on! Isso me poupa muita frustração. Existe alguma chance de você explicar por que escnão funciona mais? Além disso, poste seu comentário como resposta para que eu possa aceitá-lo.
precisa saber é o seguinte
Meu primeiro pensamento ao ler isso: "Oh, ele quebrou o botão 'Me dê o fora daqui'" "
Daniel

Respostas:

16

Tente usar em Ctrl-[vez de Esc.

Qual é o resultado de:

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

quando você pressiona Esce Enter? Deve ser "27". Qual é o resultado de pressionar Ctrl-Ventão Esc?

Você verificou todas as configurações no PuTTY para ver se são razoáveis?

Você está usando o Bash no sistema remoto? Veja a saída de

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

e veja se você vê algo incomum. Você tem um arquivo chamado ~/.inputrc? Veja o conteúdo para ver se algo é incomum.

Olhe para o seu ~/.vimrce veja se está tudo bem também.

Pausado até novo aviso.
fonte
Ctrl-c deve terminar-modo de inserção, bem como (a '[' é por vezes um pouco complicado para chegar em alguns teclados)
akira
11
Eu executei o script python e ele voltou como uma string vazia. Como faço para corrigir isso? Estou usando massa de vidraceiro.
26412 Keith
@ Keith: Você tentou alguma das outras sugestões de diagnóstico?
Pausado até novo aviso.
ctrl + [funcionou para mim por qualquer motivo, não faço ideia do que fiz para deixar meu vim preso.
Derek Adair
147

Por engano, pressionei Ctrl+ se fiquei preso no modo de inserção. Para sair disso, use Ctrl+ q.

Bhaskar
fonte
7
Isso não é o modo de inserção XOFF. Você pode desativar o controle de fluxo de software executando stty -ixon(adicione-o ao seu ~/.bashrc). Em seguida, esse pressionamento de tecla estará disponível para ser vinculado a outra coisa. Por padrão, no Bash, é vinculado a forward-search-history(o oposto de Ctrl-r). Ctrl-q (Bash quoted-insert) também estará disponível.
Pausado até novo aviso.
@DennisWilliamson Não .bash_profileseria um lugar melhor? Não é necessário desativá-lo no shell não interativo, é?
Piotr Dobrogost
11
@PiotrDobrogost: "Quando um shell interativo que não é um shell de login é iniciado, o Bash lê e executa comandos de ~ / .bashrc, se esse arquivo existir." .bash_profilesó é executado quando o Bash é um shell de login. "Então, normalmente, seu ~ / .bash_profile contém a linha if [ -f ~/.bashrc ]; then . ~/.bashrc; fi"
Pausada até novo aviso.
@DennisWilliamson Você está certo. O que eu quis dizer é que provavelmente há sentido desabilitar o controle de fluxo de software apenas em shells interativos. Se isso for verdade, subseqüentemente, faria sentido encontrar uma maneira de saber se um shell é interativo e desativar o controle de fluxo de software apenas nesse caso.
Piotr Dobrogost
@PiotrDobrogost: Veja minha resposta para "Como posso fazer o check-in do bash se um shell está sendo executado no modo interativo?"
Pausado até novo aviso.
4

Talvez você esteja usando o modo de inserção .

'insertmode' 'im' 'noinsertmode' 'noim'
booleano (padrão desativado)
Faz com que o Vim funcione de maneira que o modo Inserir seja o modo padrão. Útil se você deseja usar o Vim como um editor sem modelo. Usado para | evim |.
[...]
- Use CTRL-Opara executar um comando no modo Normal | i_CTRL-O |). Quando esse é um mapeamento, ele é executado como se 'insertmode' estivesse desativado. O modo normal permanece ativo até o mapeamento terminar. - Use CTRL-Lpara executar vários comandos no modo Normal e, em seguida, use Escpara voltar ao modo Inserir. Observe que CTRL-Lmove o cursor para a esquerda, como acontece quando 'insertmode' não está definido. | i_CTRL-L |

Sugiro editar ~/.vimrcpara adicionar a seguinte linha:

set noinsertmode         "disable insert mode
SandRock
fonte
11
No meu caso, ele travou no modo de inserção porque eu usei acidentalmente `-y` na linha de comando Como dito no manual: -y Inicie o Vim no modo fácil, assim como o executável foi chamado "evim" ou "eview". Faz o Vim se comportar como um editor de clique e digitação. Para sair desse "modo de facilidade", use <kbd> CTRL </kbd> + <kbd> l </kbd> (L em minúscula), como dito por + SandRock
ton
0

Eu tive esse problema, mas percebi que se tratava de alterar acidentalmente o modo de entrada SCIM para "Outro - CÓDIGO RAW". Mudei novamente para inglês / teclado e não tive mais problemas.

vim_user
fonte