¿Cómo muevo el cursor más allá del final de la línea en el modo Insertar cuando uso la edición de la línea de estilo vi en bash?

2

En todo lo que sigue, el ^ indica la posición del cursor.

Estoy usando bash en Terminal en OS X Yosemite y me gustaría usar la edición de línea de estilo vi:

prompt$ set -o vi
                 ^

Por defecto, se inicia en el modo Insertar vi, por lo que puedo escribir inmediatamente

prompt$ hello
             ^

Ahora digamos que uso la tecla de flecha izquierda o H para mover a la izquierda:

prompt$ hello
            ^

Ahora ya no puedo moverme a la derecha del o en hello usando o L :

prompt$ hello  # I can't move here anymore!
             ^

Si tengo que añadir algo, tengo que pulsar Esc y luego Shift A .

Esto no sucede en el modo emacs ( set -o emacs ) o en ciertas máquinas Linux (ssh'd en SLC 6.6 con bash 4.1, o de forma nativa en el de mi amigo (creo que Arch) con bash 4.3). En todos estos, luego me lleva al final de la línea donde puedo seguir escribiendo; en mi terminal Mac no puedo a menos que salga del modo Insertar.

Esto tampoco sucede con vim en mi Mac; vim me permite avanzar más allá del final de las líneas con las teclas de flecha en el modo Insertar. Es solo el modo readline vi.

Intenté actualizar mi bash (con Homebrew) de 3.2 a 4.3; Eso no lo solucionó.

Intenté quitar mi .bash_profile y usar una Terminal sin modificar; Eso no lo solucionó. (Tengo algunos alias y modificadores de solicitud en mi .bash_profile.)

He leído this , this , y esto . No tienen respuestas.

Gracias de antemano por cualquier consejo!

Editar: En un sistema Linux en el que las cosas funcionan como quisiera, la variable TERM da

prompt$ echo $TERM
xterm-256color

Los contenidos de /etc/inputrc son

# do not bell on tab-completion
#set bell-style none

set meta-flag on
set input-meta on
set convert-meta off
set output-meta on

# Completed names which are symbolic links to
# directories have a slash appended.
set mark-symlinked-directories on

$if mode=emacs

# for linux console and RH/Debian xterm
"\e[1~": beginning-of-line
"\e[4~": end-of-line
# commented out keymappings for pgup/pgdown to reach begin/end of history
#"\e[5~": beginning-of-history
#"\e[6~": end-of-history
"\e[5~": history-search-backward
"\e[6~": history-search-forward
"\e[3~": delete-char
"\e[2~": quoted-insert
"\e[5C": forward-word
"\e[5D": backward-word
"\e[1;5C": forward-word
"\e[1;5D": backward-word

# for rxvt
"\e[8~": end-of-line
"\eOc": forward-word
"\eOd": backward-word

# for non RH/Debian xterm, can't hurt for RH/DEbian xterm
"\eOH": beginning-of-line
"\eOF": end-of-line

# for freebsd console
"\e[H": beginning-of-line
"\e[F": end-of-line
    
pregunta Riju Dasgupta 11.08.2015 - 11:04

1 respuesta

1

Resulta que la solución es simple: actualizar bash a 4.3 . El bash predeterminado en Mac (incluso Yosemite) es 3.2. (Mi pregunta anterior dice que actualicé y no funcionó, pero creo que tardó un tiempo en "tomarla").

Instala Homebrew con

ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

luego hazlo

brew install bash

luego cambia tu ruta de acceso al shell predeterminada (en Preferencias de Terminal) a

/usr/local/bin/bash

y eso es todo. Comprueba tu versión de bash con

bash --version

y como un bono adicional, puedes obtener indicadores de modo!

bind 'set show-mode-in-prompt on'

y mostrará un + para el modo Insertar y : para el modo Comando.

    
respondido por el Riju Dasgupta 11.08.2015 - 14:21

Lea otras preguntas en las etiquetas