Im Folgenden ^
zeigt das die Position des Cursors an.
Ich verwende bash auf Terminal unter OS X Yosemite und möchte die Zeilenbearbeitung im vi-Stil verwenden:
prompt$ set -o vi
^
Standardmäßig startet es im vi-Einfügemodus, sodass ich sofort tippen kann
prompt$ hello
^
Nehmen wir nun an, ich benutze die linke Pfeiltaste ←oder Hum mich nach links zu bewegen:
prompt$ hello
^
Jetzt kann ich mich nicht mehr mit entweder oder nach rechts vom o
in bewegen :hello
→L
prompt$ hello # I can't move here anymore!
^
Wenn ich etwas anhängen soll, muss ich Escdann drücken ShiftA.
Dies passiert nicht im Emacs-Modus ( set -o emacs
) oder auf bestimmten Linux-Rechnern (ssh in SLC 6.6 mit Bash 4.1 oder nativ auf dem meines Freundes (ich glaube Arch) mit Bash 4.3). In all diesen führt mich ←dann →zum Ende der Zeile, wo ich weiter tippen kann; Auf meinem Mac-Terminal kann ich nicht, es sei denn, ich verlasse den Einfügemodus.
Dies passiert auch nicht mit vim auf meinem Mac; Mit vim kann ich im Einfügemodus mit den Pfeiltasten über das Zeilenende hinausgehen. Es ist nur readline vi-Modus.
Ich habe versucht, meine Bash (mit Homebrew) von 3.2 auf 4.3 zu aktualisieren; das hat es nicht behoben.
Ich habe versucht, mein .bash_profile zu entfernen und ein unverändertes Terminal zu verwenden. das hat es nicht behoben. (Ich habe einige Aliase und Eingabeaufforderungsmodifikatoren in meinem .bash_profile.)
Ich habe dies , dies und dies gelesen . Sie haben keine Antworten.
Danke im Voraus für jeden Rat!
Bearbeiten: Auf einem Linux-System, auf dem die Dinge so funktionieren, wie ich es möchte, gibt die TERM-Variable
prompt$ echo $TERM
xterm-256color
Der Inhalt von /etc/inputrc
sind
# 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
Es stellt sich heraus, dass die Lösung einfach ist: Aktualisieren Sie bash auf 4.3 . Die Standard-Bash auf Macs (sogar Yosemite) ist 3.2. (Meine obige Frage besagt, dass ich aktualisiert habe und es nicht funktioniert hat, aber ich denke, es hat eine Weile gedauert, bis es "dauerte".)
Installieren Sie Homebrew mit
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
dann mach
brew install bash
Ändern Sie dann Ihren Standard-Shell-Pfad (in den Terminaleinstellungen) in
/usr/local/bin/bash
und das ist es. Überprüfen Sie Ihre Bash-Version mit
bash --version
und als zusätzlichen Bonus können Sie Modusanzeigen erhalten!
bind 'set show-mode-in-prompt on'
und es wird ein +
für den Einfügemodus und :
für den Befehlsmodus angezeigt.
/etc/shells
und dann Ihre Shell mit chsh
(oder System Preferences > Accounts ) ändern.
mjturner
TERM
Umgebungsvariablen sowie den Inhalt von/etc/inputrc
und~/.inputrc
(falls vorhanden) von einem der Systeme posten, auf denen dieses Verhalten so funktioniert, wie Sie es möchten (nur die nicht kommentierten Zeilen, da die Datei möglicherweise ziemlich groß ist) ?Riju Dasgupta
.inputrc
in meinem Home-Verzeichnis. Ich habe den Inhalt von gepostet/etc/inputrc
, er war ziemlich kurz, aber ich weiß nicht, ob dieser hier genau der/etc/inputrc
ist, den Sie wollen, da der Linux-Rechner, auf dem ich arbeite, vielen Benutzern dient.mjturner
Riju Dasgupta