Estoy experimentando un problema extraño con una asignación de modo normal de Esc.
Si crea el archivo escmapvimrc
con el contenido:
set nocompatible
set showcmd " Doesn't affect the problem: just makes it easier to see
nnoremap <Esc> :noh<CR><esc>
Y luego inicie vim usando este vimrc:
vim --noplugin -u escmapvimrc
Luego, vim se iniciará en el modo pendiente del operador con un c
comando en espera de entrada adicional, mostrando un archivo vacío y con la línea de comando en pantalla :noh
.
Si quita la nnoremap
línea, el problema desaparece.
Si depura y recorre todo, obtendrá el siguiente resultado:
Entering Debug mode. Type "cont" to continue.
/[...]/escmapvimrc
line 1: set nocompatible
>s
/[...]/escmapvimrc
line 2: set showcmd " Doesn't affect the problem: just makes it easier to see
>s
/[...]/escmapvimrc
line 3: nnoremap <Esc> :noh<CR><esc>
>s
/[...]/escmapvimrc
line 4: End of sourced file
>s
Press ENTER or type command to continue
Después de presionar enter, se muestra la pantalla de inicio de Vim, y debajo:
Entering Debug mode. Type "cont" to continue.
cmd: noh
>s
La pantalla de inicio de Vim desaparece, y está en modo pendiente de operador, como se describió anteriormente.
¿Que esta pasando?
EDITAR: El comportamiento es como se describe en Vim 7.3. En Vim 7.4.52, nmap
hace que Vim se inicie en modo Reemplazar cuando se inicia Vim sin un archivo. ( Sin embargo, si Vim 7.4.52 se inicia con un archivo, también se inicia con un comando c en curso). De cualquier manera, el problema desaparece cuando se elimina el nmap.
fuente
:noh
para mí. Hacer lo mismo con gvim no mostró este comportamiento.nnoremap <c-l> :noh<cr><c-l>
/alksdjflaskj
para aclarar el resaltado de búsqueda, que también es bastante rápido.Respuestas:
Vim envía durante el inicio algunos códigos de terminal especiales (que generalmente contienen la
<esc>
clave) para determinar varias cosas (colores, bs, ...) Si lo mapeó,<esc>
esto probablemente confundirá al analizador de los códigos de retorno y pueden suceder cosas extrañas.Por lo tanto, use su mapa anterior solo después de que todo se haya configurado correctamente (por ejemplo, mediante un comando automático VimEnter).
fuente
'term'
se establece la opción. Eso suele ser solo durante el inicio, pero puede haber escenarios en los que se establece en tiempo de ejecución.VimEnter
específicamente no funcionó.El terminal de Linux utiliza secuencias de escape ANSI (es decir, cadenas de caracteres que comienzan con
<Esc>
) para enviar claves especiales a Vim y como parte del protocolo de comunicación con el que la aplicación consulta sus capacidades. Su mapeo interfiere con eso, y por lo tanto conduce a estos comportamientos "extraños".Por lo
<Esc>
tanto, no mapees . Usa otra llave. El problema es menos pronunciado en GVIM, pero tampoco lo recomendaría allí.fuente
<Esc><Esc>
?Prueba esto:
cf /programming//a/16027716/400545
fuente
escapemapvimrc
archivo con esto, cuando se completa el inicio de Vim, estoy en modo de línea de comando, con la línea de comando que contiene los siguientes contenidos::83/94/95^G
(eso es un literalCTRL-G
al final). Este poco:help
parece sugerir que este podría no ser el mejor momento para configurar el mapeo:Note that this event may be triggered halfway executing another event, especially if file I/O, a shell command or anything else that takes time is involved.
Intenté configurar un comando automático para configurar la asignación más adelante en el inicio, pero el problema aún ocurrió.* *
Finalmente creé un autocomando para que ocurra la primera vez que entro en el modo Insertar. Obviamente, esta no es una solución perfecta, pero para mí funcionará la mayor parte del tiempo, y parece ser lo mejor que puedo hacer:
ACTUALIZACIÓN : Después de usar la versión más larga a continuación sin problemas durante unos años, decidí que posiblemente estaba un poco sobre diseñada, y desde entonces he usado esta versión mucho más simple, que en cambio solo restablece el mapeo cada vez que ingresas al modo de inserción:
El mapeo no necesita reiniciarse cada vez que ingresa al modo de inserción, pero tampoco le hace ningún daño a Vim.
VERSIÓN ORIGINAL :
* He intentado instalarla en varios eventos:
VimEnter
,BufReadPost
,BufWinEnter
, e inclusoCursorMoved
(!), Pero todos ellos parece que el fuego demasiado pronto.fuente
TermResponse
autocomando?t_RV
,t_u7
,t_RF
,t_RB
, Y, posiblemente, otros.) Así que esto podría también dependen de su terminal