2 votos

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

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íneas estilo vi:

prompt$ set -o vi
                 ^

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

prompt$ hello
             ^

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

prompt$ hello
            ^

Ahora ya no puedo moverme al derecha de la o en hello utilizando o L :

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

Si tengo que añadir algo, tengo que pulsar Esc entonces ShiftA .

Esto no ocurre en el modo emacs ( set -o emacs ) o en ciertas máquinas Linux (ssh'd into SLC 6.6 with bash 4.1, or natively on my friend's (I think Arch) with bash 4.3). En todas ellas, entonces 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 ocurre con vim en mi Mac; vim me permite moverme más allá del final de las líneas con las teclas de flecha en el modo Insertar. Es sólo el modo vi readline.

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

Intenté eliminar mi .bash_profile y utilizar un Terminal sin modificar; eso no lo solucionó. (Tengo algunos alias y modificadores de prompt en mi .bash_profile).

He leído este , este y este . No tienen respuestas.

Gracias de antemano por cualquier consejo.

Edita: En un sistema Linux donde las cosas funcionan como me gustaría, la variable TERM da

prompt$ echo $TERM
xterm-256color

El contenido 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

1voto

Riju Dasgupta Puntos 36

Resulta que la solución es sencilla: actualizar bash a 4.3 . El bash por defecto en Macs (incluso Yosemite) es 3.2. (Mi pregunta de arriba dice que actualicé y no funcionó, pero creo que tardó un poco en "coger").

Instalar Homebrew con

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

entonces hacer

brew install bash

a continuación, cambie la ruta predeterminada del intérprete de comandos (en Preferencias del terminal) a

/usr/local/bin/bash

y ya está. Compruebe su versión de bash con

bash --version

y, además, ¡puedes obtener indicadores de modo!

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

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

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X