Te doy la bienvenida a nuestra página, en este sitio vas a encontrar la resolución que buscas.
Solución:
TL; DR
Bash tiene una funcionalidad similar a zsh
‘s bindkey
mediante bind
, pero no tiene varios vi
modos como zsh
. Después set -o vi
tu puedes hacer:
bind '"jk":vi-movement-mode'
que es el equivalente de zsh
‘s bindkey -M
los vi-movement-mode
las funciones provienen de inputrc
(ver /etc/inputrc
para obtener una lista de ellos).
Texto completo
Como señala Stephen Harris en su comentario:
-
.bashrc
es llamado porbash
siempre (y notablemente no por otras conchas). -
.bash_profile
solo se llama en shells de inicio de sesión (y nuevamente, solo bash).
Varias distribuciones vienen con un .bash_profile
esqueleto que tiene el siguiente aspecto:
# ~/.bash_profile
[[ -f ~/.bashrc ]] && . ~/.bashrc
Que es un buen contenido para .bash_profile
ya que simplemente puedes olvidar que existe.
Ahora, para mapear jk para Esc en la sesión de shell, eso no es realmente posible. Cuando tu lo hagas:
inoremap jk
En Vim, después de escribir j, Vim sabe que debe esperar un poco para ver si escribe k siguiente y debería invocar el mapeo (o que escriba otro key y el mapeo no debe activarse). Como apéndice, esto está controlado por :set timeoutlen=
en Vim (ver :h timeoutlen
).
Varios shell o X11 no tienen tal control de tiempo de espera y no permiten múltiples asignaciones de caracteres. Solo un mapeo de un solo key está permitido (pero consulte las notas de soporte a continuación).
set -o vi
No lee .vimrc
, solo imita algunos vi
(ni siquiera vim
) key combinaciones que se pueden utilizar en el caparazón. Lo mismo puede decirse de -o emacs
, no viene con todo el poder de emacs
.
soporte zsh
zsh
en realidad admite el tiempo de espera del mapa. Y puede usar lo siguiente para mapear jk
para
:
bindkey -v # instead of set -o vi
bindkey -e jk \e
(Eso tendrá que ir a ~/.zshrc
no ~/.bashrc
)
Sin embargo, desaconsejo esto. yo suelo vim
y zsh
la mayor parte del tiempo. yo tengo inoremap jk
en mi vimrc
e intenté usar el bindkey
combinación anterior. zsh
espera demasiado para imprimir j
al usarlo, y eso me molestó mucho.
apoyo bash
bash
apoyos readline
bind
. Creo que bash
se puede compilar sin readilne
por lo tanto, puede haber algunos sistemas raros que tengan bash que no admitan bind
(esté atento). Para asignar jk
para
en bash
necesitas hacer:
set -o vi
bind '"jk":"e"'
(sí, eso es un doble nivel de cotización, es necesario)
De nuevo, esto hace que escribir j
bastante molesto. Pero de alguna manera menos molesto que el zsh
solución en mi máquina (probablemente el tiempo de espera predeterminado es más corto).
Solución alternativa (para shells que no son bash ni zsh)
La razón para reasignar el Esc key es que se encuentra bastante lejos en el teclado, y escribirlo lleva tiempo. Un truco que se puede tomar prestado del emacs
chicos es reasignar Bloq Mayús ya que es un inutil key de todas formas. emacs
chicos lo reasignan a control pero lo reasignaremos a Esc.
Usemos xev -event keyboard
para comprobar el código clave de Bloq Mayús:
KeyPress event, serial 25, synthetic NO, window 0x1c00001,
root 0x496, subw 0x0, time 8609026, (764,557), root:(765,576),
state 0x0, keycode 66 (keysym 0xffe5, Caps_Lock), same_screen YES,
XLookupString gives 0 bytes:
XmbLookupString gives 0 bytes:
XFilterEvent returns: False
Y para comprobar la función de Esc:
KeyPress event, serial 25, synthetic NO, window 0x1c00001,
root 0x496, subw 0x0, time 9488531, (571,525), root:(572,544),
state 0x0, keycode 9 (keysym 0xff1b, Escape), same_screen YES,
XLookupString gives 1 bytes: (1b) "
XmbLookupString gives 1 bytes: (1b) "
XFilterEvent returns: False
Muy bien, Bloq Mayús es el código clave 66 y EscLa función de se llama “Escape”. Ahora podemos hacer:
# diable caps lock
xmodmap -e "remove lock = Caps_Lock"
# make an Esc key from the keycode 66
xmodmap -e "keycode 66 = Escape"
Lo anterior debe hacerse en este orden. Ahora, cada vez que golpeas Bloq Mayús funciona como un Esc key.
La parte complicada es dónde configurar esto. Un archivo ~/.Xmodmap
con el contenido:
remove lock = Caps_Lock
keycode 66 = Escape
Debería ser respetado por la mayoría de las distribuciones (en realidad, los administradores de pantalla, pero digo distribuciones por simplicidad), pero vi algunas que no respetan varias ~/X*
archivos. Para tales distribuciones, puede probar algo como:
if [ "x" != "x$DISPLAY" ]; then
xmodmap -e "remove lock = Caps_Lock"
xmodmap -e "keycode 66 = Escape"
fi
En tus .bashrc
.
(En teoría, estaría mejor situado en ~/.xinitrc
pero si un administrador de pantallas no respeta .Xmodmap
definitivamente no respetará ~/.xnintrc
.)
Nota adicional: esto solo reasigna Bloq Mayús para Esc en una sesión X11, por lo tanto, el mapa solo funcionará en emuladores de terminal. Real tty
no verá el mapa.
Referencias y lecturas adicionales:
- Deshabilitar el bloqueo de mayúsculas
- Respuesta muy detallada sobre cómo key reasignación en X11 funciona
.bashrc
vs..bash_profile
Gracias, por las respuestas anteriores, utilizo esto en mi ~ / .zshrc para accesos directos tipo vi en mi terminal. Espero que ayude a alguien.
bindkey -v
bindkey 'jk' vi-cmd-mode
Comentarios y valoraciones
Si sostienes alguna suspicacia o disposición de arreglar nuestro post eres capaz de escribir una apostilla y con deseo lo ojearemos.