Por que o vim demora por um segundo sempre que uso o comando 'O' (abra uma nova linha acima e insira)?

26

Quando uso a maioria dos comandos, eles entram em vigor instantaneamente. Quando eu uso o Ocomando, no entanto, vejo o "O" substituir o caractere atual por cerca de um segundo, o caractere atual é retornado e uma nova linha é inserida e aberta.

Não tenho esse problema com o ocomando (abra uma nova linha abaixo e insira).

Se fizer alguma diferença, estou usando vimfrom bash, no Gnome Terminal no Ubuntu 10.04.

Mateus
fonte

Respostas:

27

Se a tecla anterior pressionada foi ESC, isso ocorre porque existem teclas que podem gerar seqüências de escape começando com ESC O. Por exemplo, dependendo do modo da tecla cursor, a tecla de seta para cima pode gerar a seqüência de escape ESC O A.

Se houver uma sequência de escape parcial, o vim aguardará um tempo limite curto para ver se outro caractere é recebido que corresponde a uma das seqüências de escape definidas para o seu tipo de terminal. Caso contrário, tratará os caracteres como pressionamentos de tecla separados. Você pode testar isso inserindo uma letra maiúscula A enquanto aguarda a linha abrir para ver se a trata como uma seta para cima.

Existem algumas configurações do vim que podem ser usadas para controlar isso. :set ttimeoutlen=100alterará o tempo limite da sequência de escape para 100ms. :set noesckeysdesativará completamente o reconhecimento de teclas que enviam uma sequência de escape quando no modo de inserção. Além disso, o modo vi-compatível não terá esse problema porque as teclas de atalho estão desativadas nesse modo - é por isso que vim -u NONEfunciona.

mark4o
fonte
Apenas para esclarecer, minha "experiência" com o arquivo de linha de 140k estava no modo vim completo com meu complemento padrão de plug-ins e tipos de arquivos. Eu posso ver onde você pode ter concluído que eu tinha usado, -u NONEmas ainda não temos confirmação do OP.
msw
Uau! isso foi levemente irritante por um tempo, mas eu nunca pensei nisso. faz todo o sentido agora. Esc OA realmente funciona como seta para cima.
Vitaly Kushner
2
:set noesckeysprovavelmente não é o que você deseja - defina-o e pressione as teclas de seta no modo de inserção, mesmo se você não planeja usá-las, não quer que elas façam isso! noesckeys também não acelera as coisas fora do modo de inserção. ttimeoutlené definitivamente o caminho a seguir
JonnyRaa