Come si sposta il cursore oltre la fine della riga in modalità di inserimento quando si utilizza la modifica in linea in stile vi su bash?

2

In tutto ciò che segue, ^ indica la posizione del cursore.

Sto usando bash su Terminal su OS X Yosemite e mi piacerebbe usare il montaggio in linea in stile vi:

prompt$ set -o vi
                 ^

Per impostazione predefinita, inizia in modalità di inserimento vi, quindi posso digitare immediatamente

prompt$ hello
             ^

Ora diciamo che uso il tasto freccia sinistra o H per spostarci a sinistra:

prompt$ hello
            ^

Ora non posso più spostarmi al giusto del o in hello usando o L :

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

Se devo aggiungere qualcosa, devo premere Esc quindi Shift A .

Questo non accade in modo emacs ( set -o emacs ) o su alcune macchine Linux (ssh'd in SLC 6.6 con bash 4.1, o in modo nativo sul mio amico (credo Arch) con bash 4.3). In tutti questi, quindi mi porta alla fine della riga dove posso continuare a digitare; sul mio terminale Mac non posso a meno che non esca dalla modalità Insert.

Anche questo non succede con vim sul mio Mac; vim mi consente di passare oltre la fine delle linee con i tasti freccia nella modalità di inserimento. È solo in modalità vi di lettura.

Ho provato ad aggiornare il mio bash (con Homebrew) da 3.2 a 4.3; che non ha risolto il problema.

Ho provato a rimuovere il mio .bash_profile e ad usare un Terminale non modificato; questo non l'ha risolto (Ho alcuni alias e modificatori di prompt nel mio .bash_profile.)

Ho letto questo , questo , e questo . Non hanno risposte.

Grazie in anticipo per qualsiasi consiglio!

Modifica: Su un sistema Linux in cui le cose funzionano come vorrei, la variabile TERM dà

prompt$ echo $TERM
xterm-256color

Il contenuto di /etc/inputrc è

# 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
    
posta Riju Dasgupta 11.08.2015 - 11:04
fonte

1 risposta

1

Si scopre che la soluzione è semplice: aggiorna bash a 4.3 . Il bash predefinito su Mac (anche Yosemite) è 3.2. (La mia domanda di cui sopra dice che ho fatto l'aggiornamento e non ha funzionato, ma penso ci sia voluto un po 'per "prendere".)

Installa Homebrew con

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

quindi fai

brew install bash

quindi modifica il percorso della shell di default (in Preferenze Terminale) su

/usr/local/bin/bash

e basta. Controlla la tua versione di bash con

bash --version

e come bonus aggiuntivo, puoi ottenere gli indicatori di modalità!

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

e mostrerà un + per la modalità di inserimento e : per la modalità di comando.

    
risposta data 11.08.2015 - 14:21
fonte

Leggi altre domande sui tag