En bash, la tecla home/ end/ deleteestá insertando una tilde, o si está precedida por la tecla de escape:[1~
Así que escribo echo hellp
, muevo el cursor hel|lp
y escribo delete, y bam, obtuve~tilde
Además, escribo echo hellp
, muevo el cursor hel|lp
y escribo esc, luego elimino, y bam, obtuve[3~
$ echo hel~lp
hel~lp
$ echo hell[3~o
hell[3~o
~
Mi versión de bash:
$ bash --version
GNU bash, version 3.1.17(1)-release (i686-pc-msys)
Copyright (C) 2005 Free Software Foundation, Inc.
Lo que quiero es un comportamiento como cmd.exe
:
- Quiero que Esc borre la línea / búfer actual
- Quiero que Home mueva el cursor al inicio de la línea antes del primer carácter
- Quiero que End mueva el cursor al final de la línea antes del primer carácter
- Quiero eliminar para eliminar el siguiente carácter (a la derecha del cursor) de la línea / búfer actual
¿Qué tengo que editar para arreglar esto? ¿Es esto predeterminado en tu bash?
actualización: estoy en una máquina Windows que ejecuta un programa de Windows, sh.exe (como puede ver arriba GNU bash), compilado con mingw para msys:
$ uname -s -m -o
MINGW32_NT-5.1 i686 Msys
command-line
bash
keyboard-shortcuts
key-binding
Opcional
fuente
fuente
Respuestas:
Puede personalizar bash a través de un
.inputrc
archivo en su/home/username
, puede copiar el predeterminadoaquí está el mío (los comentarios comienzan con #)
para averiguar lo que necesita escribir en su computadora en el lado izquierdo (el código de escape, ya que puede variar entre la computadora portátil / escritorio ...), en el símbolo del sistema,
echo '
luego escribaCtrl-V
seguido de la tecla, comoHome
, luego escriba'
ejemploluego vuelva a colocar cada uno
^[
con\e
complemento\M-
paraAlt
teóricamente tendrá que utilizar\C-
paraCtrl
pero actualmente no funciona (ventanas limitación)los comandos disponibles (como
backward-kill-line
) se enumeran en http://www.gnu.org/software/bash/manual/bashref.html#index-backward_002dkill_002dline-_0028C_002dx-Rubout_0029puede ver los atajos / atajos de teclado existentes con
bind -p
ono te metas con TERMCAP
fuente
find / -name 'inputrc.default'
No encuentra nada en mi máquina. Mi casa y mi fin solían funcionar ... :( Además, para tu información: para volver a cargar el archivo .inputrc, usabind -f ~/.inputrc
.$if mode=emacs
bloque. ¡Agregué estas dos líneas y funcionan de nuevo! : D"\e[1~": beginning-of-line ... "\e[4~": end-of-line
.Bueno, ya que dice que está trabajando en Windows y no está utilizando un emulador de terminal adecuado como PuTTY (con mintty , puttycyg et al ), le recomendaría que consulte la documentación de readline y aprenda los accesos directos para readline. Será mejor a la larga.
Si usara un emulador de terminal en lugar de la ventana de la consola (sin hablar del intérprete / shell aquí) que viene con Windows, obtendría una alternativa más configurable. Una vez que intentes usar otros programas como Vim, las cosas solo empeorarán.
La esencia: use un emulador de terminal adecuado, incluso en Windows o aprenda los atajos de línea de lectura. Probé los que más uso en este momento y con los que trabajan
msys.bat
.El archivo de edición podría ser
/usr/share/terminfo
(que no existe en MinGW) - El usotic
de reglas "Compilar" (que ni siquiera se incluye porque todo el mundo sabe que el apoyo se paralizó gravemente). Sin embargo, no he visto ningún desarrollo útil para hacer que esto sea casi utilizable en Windows. Es por eso que debe usar un emulador de terminal adecuado en primer lugar. Pero estoy seguro de que un cirujano podrá usar un cuchillo de cocina para la cirugía, entonces, ¿por qué no debería usar las ventanas de consola incorporadas de Windows? Buena suerte.fuente
Verifique la instalación de Readline
Cuando esto sucede en una instalación mínima de Debian / Ubuntu reciente, probablemente sea porque no ha instalado el
readline-common
paquete. Simplemente instalando el paquete lo resolverá.Por ejemplo, en Docker con Debian Stretch escribiendo
ls
HOME:Tenga en cuenta que después de instalar readline-common solo tendrá efecto en los nuevos shells de inicio de sesión.
fuente
exec bash
es una forma de reemplazar la instancia de bash actual con una nueva, sin salir del terminal (como puede ser necesario cuando se juega en un contenedor pTTY).También encontré lo siguiente útil: https://wiki.archlinux.org/index.php/Home_and_End_keys_not_working
Específicamente:
Si sus claves no funcionan, podría deberse a que su terminal particular envía códigos de escape que no están en esta lista. Primero debe averiguar qué códigos de escape se envían. Para verlos, puede usar un comando Readline llamado "cita-inserción" o ejecutar el comando showkey --scancodes que genera el valor de una clave literalmente. El enlace predeterminado para la inserción entre comillas es Ctrl + V.
Por ejemplo, podría dar la siguiente serie de entradas en su terminal:
Y obtener como salida
$ ^ [[1 ~ ^ [[4 ~
La ^ [indica un carácter de escape en su shell, por lo que esto significa que su tecla de inicio tiene un código de escape de [1 ~ y su tecla de finalización tiene un código de escape de [4 ~. Dado que estos códigos de escape no figuran en la configuración predeterminada de Readline, deberá agregarlos:
Tenga en cuenta que Readline usa \ e para indicar un carácter de escape.
La pieza relevante para mí fue poner esto en inputrc:
fuente