nnoremap - vim key mapping
vim retrocede hojas ^? (13)
En Vim, cuando backspace
tecla de backspace
en el modo de insert
, sale ^?
carácter y no elimina el carácter que se supone debe eliminar.
Tengo lo siguiente en mi .vimrc
syntax on
set number
set expandtab
set incsearch
set nocompatible
set backspace=indent,eol,start
fixdel
Esto sucede en el modo comando también. Cuando escribo W
incorrectamente en lugar de w
para guardar, backspace
tecla de backspace
y me da lo siguiente:
:W^?
¿Alguna idea sobre qué está mal y cómo solucionarlo?
ACTUALIZACIÓN: antes de publicar esta pregunta en SO, realicé una búsqueda básica en Google e intenté con todas las sugerencias desde la primera página del resultado de la búsqueda pero sin éxito.
@strcat Estoy usando vim versión 7.0.237, consola KDE 1.6.4, máquina Linux 2.6.18 x86_64.
@graywh wrt cat -v, para borrar, obtengo ^[[3~
y para el retroceso, obtengo ^?
.
La salida de stty -a
es la siguiente
speed 38400 baud; rows 38; columns 194; line = 0;
intr = ^C; quit = ^/; erase = ^H; kill = ^U; eof = ^D; eol = <undef>; eol2 = <undef>; swtch = <undef>; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R; werase = ^W; lnext = ^V; flush = ^O;
min = 1; time = 0;
-parenb -parodd cs8 -hupcl -cstopb cread -clocal -crtscts -cdtrdsr
-ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr icrnl -ixon -ixoff -iuclc -ixany -imaxbel iutf8
opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0
isig icanon iexten echo echoe echok -echonl -noflsh -xcase -tostop -echoprt echoctl echoke
De la http://vim.wikia.com/wiki/Backspace_and_delete_problems , pasé a leer :help :fixdel
it sugiere esto:
if &term == "termname"
set t_kb=^V<BS>
fixdel
endif
Donde "^ V" es CTRL-V y "" es la tecla de retroceso
(¡no escriba cuatro caracteres!). Reemplazar "nombre de término"
con tu nombre de terminal
Para mí, el fixdel
hace que el retroceso funcione como eliminar. Mi primer error también fue hacer el retroceso CTRL-V en gvim, hacer en el sistema que no puede hacer que la clave funcione correctamente para que pegue la tecla de retroceso que ve la sesión problemática.
Ahora tengo en mi .vimrc
:
if &term == "xterm-256color"
set t_kb=^?
endif
En FreeBSD con CSH debes reemplazar esto en tu .cshrc:
bindkey "^W" backward-delete-word
Con este :
bindkey "^?" backward-delete-word
En Mac, si está utilizando Terminal, vaya a Preferencias -> Perfiles -> Avanzado, luego seleccione "Eliminar Envía Control-H"
Por favor, consulte el siguiente enlace para ayudar a resolver su problema:
EDITAR:
Encontré lo que parece ser un problema similar al descrito por usted:
http://lj4newbies.blogspot.com/2007/05/backspace-and-delete-keys-problem-in.html
Prueba agregar:
noremap! <C-?> <C-h>
a su ~/.vimrc
.
Esto mapas C-? para retroceder, y funcionó para mí.
Pruebe ctrl + del / ctrl + retroceso o alt + del / alt + retroceso , no puedo recordar cuál, pero creo que hará el truco para usted.
Si eso no funciona intente shift + backspace / del . Me encontré con este problema antes, hay una tecla combinada que puede presionar para enviar el código correcto para eliminar.
Si está usando KDE, conozco ese dolor. Esta es la solución más completa que he encontrado hasta ahora http://www.yalla.nu/blog/post/86
Tenía exactamente el mismo problema, excepto que Ctrl + H no funcionaba para mí. stty
ajustes stty
también están bien. Solo quiero mencionar mi entorno, si alguien tiene los mismos problemas:
- Usando cygwin con xterm, bajo X, por supuesto :)
- Ssh''ed a RHEL6.4-> bash-> tmux-> vim
¡Después de agregar fixdel
a .vimrc
funciona! Todas las soluciones anteriores no funcionaban para mí.
Tuve el mismo problema donde vim retrocede hojas ^?
, mientras que en la línea de comando funcionó correctamente.
Esto es lo que funcionó para mí, usando el mapeo vim:
In .vimrc, type: imap ^? ^H
Esto asignará CTRL-H (que es el retroceso predeterminado en vim) a la tecla de retroceso. Espero que ayude.
Tuve este problema y encontré la siguiente configuración en mi .vimrc:
:set t_kb=^H
Eliminar esa línea resolvió el problema.
Una buena solución para este problema es establecer la configuración "Terminal> Teclado" para asignar la tecla de retroceso a "Control-H" en PuTTY; Esto es si está usando PuTTY y experimenta el "^?" problema al presionar la tecla Retroceso.
He creado un artículo sobre esto aquí:
https://alvinbunk.wordpress.com/2017/08/23/vi-or-vim-using-backspace-inserts/
¡Gracias a @ j03m por la sugerencia!
poner stty borrar ^? en tu .bashrc
Ejecute su .bashrc
ejecutar comando: stty -a
speed 38400 baud; rows 48; columns 157; line = 0;
intr = ^C; quit = ^/; ***erase = ^?***; kill = ^U; eof = ^D; eol = <undef>; eol2 = <undef>; swtch = <undef>; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R;
werase = ^W; lnext = ^V; flush = ^O; min = 1; time = 0;
-parenb -parodd cs8 -hupcl -cstopb cread -clocal -crtscts -cdtrdsr
-ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr icrnl ixon -ixoff -iuclc -ixany -imaxbel -iutf8
opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0
isig icanon iexten echo echoe echok -echonl -noflsh -xcase -tostop -echoprt echoctl echoke
El borrado ya se cambiará con un nuevo valor ^?
y tu retroceso funcionará ahora.
^?
es el carácter de borrar; el carácter de retroceso es ^H
Solo uno de estos es reconocido por su terminal como "borrar", y esto está determinado por la configuración del terminal, stty
. (bash y otros proyectiles entienden esto como un problema y hacen cosas especiales para reconocer ambos)
Si su emulador de terminal (ssh, putty, xterm, lo que sea) no está de acuerdo con la configuración de su terminal, entonces verá este comportamiento. Por lo general, es correcto de manera predeterminada, pero muy a menudo las personas ponen comandos stty
en su .bashrc que rompe las cosas.
Es probable que tengas algo así como stty erase ^H
en tu bashrc. Si lo haces, deshazte de él, o cambia la configuración de tu terminal para tener un retroceso envía ^H
lugar de DEL ( ^?
)
También puedes arreglar esto con mapeos vim, pero eso está ignorando el problema básico.