Ich verwende eine Neuinstallation von Ubuntu 16.04 mit der Bash-Shell. Es gibt zwei Dinge, die ich tun möchte:
- Richten Sie den vi-Modus so ein, dass ich vom Terminal aus vim-ähnliche Bewegungen ausführen kann
- Beenden Sie den Einfügemodus durch Eingabe
jk
Ich habe in einem anderen Beitrag gelesen, wie das geht zsh
, wie kann ich das machen bash
?
tl; dr
setzen bind '"jk":vi-movement-mode'
in die .bashrc
Datei nach set -o vi
:)
server@thinkpad:~$ tail -n 2 .bashrc
set -o vi
bind '"jk":vi-movement-mode'
Eine ausführlichere Erklärung finden Sie in der Antwort von @ gro♀
bash
keyboard-shortcuts
vi
mbigras
quelle
quelle
jk
? Ist das eine spezielle Taste auf Ihrer Tastatur?.bashrc
Wird für Ihre erste Shell normalerweise für jede Shell aufgerufen (z. B. wenn Sie eine Shell verlassenvi
),.bash_profile
wird jedoch nur für Login-Shells aufgerufen. Also.bashrc
ist der richtige Ort dafürset -o vi
. Ich habe keine Antwort auf Ihre überarbeitete 2. Frage :-(set -o vi
geht rein.bashrc
, siehe Warum funktioniert mein ~ / .bash_profile nicht?Antworten:
TL; DR
Bash hat eine ähnliche Funktionalität wie
zsh
'sbindkey
through'bind
, aber es gibt nicht mehrerevi
Modi wiezsh
. Nachdemset -o vi
Sie tun können:das ist das Äquivalent von
zsh
'sbindkey -M <all vi modes> jk vi-movement-mode
Die
vi-movement-mode
Funktionen kommen voninputrc
(siehe/etc/inputrc
für eine Liste von ihnen).Voller Text
Wie Stephen Harris in seinem Kommentar betont:
.bashrc
wird vonbash
immer (und insbesondere nicht von anderen Muscheln) aufgerufen ..bash_profile
wird nur bei Login-Shells aufgerufen (und wieder nur bei Bash).Einige Distributionen haben ein
.bash_profile
Skelett, das wie folgt aussieht:Welches ist ein guter Inhalt für,
.bash_profile
da Sie einfach vergessen können, dass es existiert.Nun zur Karte jkzu Escin der Shell - Sitzung, die nicht wirklich möglich ist. Wenn Sie das tun:
In Vim jweiß Vim nach der Eingabe, dass es ein wenig warten muss, um zu sehen, ob Sie als knächstes eingeben, und es sollte die Zuordnung aufrufen (oder dass Sie einen anderen Schlüssel eingeben und die Zuordnung nicht ausgelöst werden sollte). Als Nachtrag wird dies von
:set timeoutlen=<miliseconds>
in Vim kontrolliert (siehe:h timeoutlen
).Einige Shells oder X11 haben keine solche Zeitüberschreitungssteuerung und erlauben keine Zuordnung mehrerer Zeichen. Es ist nur eine Zuordnung eines einzelnen Schlüssels zulässig (siehe jedoch die folgenden Support-Hinweise).
Liest nicht
.vimrc
, es ahmt nur einigevi
(nicht einmalvim
) Tastenkombinationen nach, die in der Shell verwendet werden können. Das gleiche kann gesagt werden-o emacs
, es kommt nicht mit der vollen Kraft vonemacs
.zsh Unterstützung
zsh
unterstützt tatsächlich das Karten-Timeout. Und Sie können die folgende verwenden , um Kartejk
zu<esc>
:(Das muss
~/.zshrc
nicht gehen~/.bashrc
)Ich rate jedoch davon ab. Ich benutze
vim
und diezsh
meiste Zeit. Ich habeinoremap jk <esc>
in meinemvimrc
und ich habe versucht, diebindkey
obige Kombination zu verwenden.zsh
wartet zu lange, um zu drucken,j
wenn ich es benutze, und das hat mich sehr geärgert.Bash-Unterstützung
bash
unterstütztreadline
bind
. Ich glaube, dassbash
dies kompiliert werden kann, ohnereadilne
dass es einige seltene Systeme gibt, die Bash haben, die nicht unterstützt werdenbind
(seien Sie wachsam). Zur Kartejk
zu<esc>
in wasbash
Sie tun müssen:(Ja, das ist eine doppelte Zitierstufe, es wird benötigt)
Auch dies macht das Tippen
j
ziemlich nervig. Aber irgendwie weniger nervig als diezsh
Lösung auf meinem Computer (wahrscheinlich ist das Standard-Timeout kürzer).Problemumgehung (für Nicht-Bash- und Nicht-Zsh-Shells)
Der Grund für die Neuzuordnung der EscTaste liegt darin, dass sie ziemlich weit entfernt auf der Tastatur liegt und das Eingeben einige Zeit in Anspruch nimmt. Ein Trick, der von den
emacs
Jungs ausgeliehen werden kann, ist die Neuzuordnung, CapsLockda es sich sowieso um einen nutzlosen Schlüssel handelt.emacs
Jungs ordnen es neu zu, Ctrlaber wir werden es neu zuordnen Esc.Lassen Sie uns
xev -event keyboard
den Schlüsselcode von überprüfen CapsLock:Und um die Funktion von zu überprüfen Esc:
Sehr gut, CapsLockist der Schlüsselcode 66 und Escdie Funktion heißt "Escape". Jetzt können wir tun:
Das Obige muss in dieser Reihenfolge erfolgen. Jetzt CapsLockfunktioniert es jedes Mal, wenn Sie es Escdrücken, wie eine Taste.
Der schwierige Teil ist, wo dies eingestellt werden soll. Eine Datei
~/.Xmodmap
mit dem Inhalt:Sollte von den meisten Distributionen respektiert werden (eigentlich Display-Manager, aber ich sage der Einfachheit halber Distributionen), aber ich habe solche gesehen, die mehrere
~/X*
Dateien nicht respektieren . Für solche Distributionen können Sie Folgendes ausprobieren:In deinem
.bashrc
.(Theoretisch wäre das besser,
~/.xinitrc
aber wenn ein Display-Manager dies nicht respektiert.Xmodmap
, wird er es definitiv nicht respektieren~/.xnintrc
.)Zusätzliche Anmerkung: Diese remaps nur CapsLockauf Escin einer X11 - Sitzung, damit die Karte funktioniert nur in Terminal - Emulatoren. Tatsächlich
tty
wird die Karte nicht angezeigt.Referenzen und zusätzliche Lektüre:
.bashrc
vs..bash_profile
quelle
jk
anstelle vonCapsLock
? Ich habe es auf meiner Osx-Maschine eingestellt; Ich habe es jedoch nicht für den Rest des Wochenendes und ich kann mich nicht erinnern, wie ich es gemacht habe :)zsh
:bindkey -v; bindkey -s jk \\e
. Aber das ist etwas , das kommt zurück und beißen Sie zurück , wenn Sie brauchenjk
, weil der Timer nicht konfigurierbar ist , und Sie haben nicht<leader>
inzsh
.zsh
und nichtbash
, ist es nicht möglich in Bash?man bash
fand ich ,bind
dass die Arbeit ziemlich ähnlich wiezsh
‚sbindkey
. Ich werde die Antwort aktualisieren. Los geht's, ich benutzezsh
zu viel.Vielen Dank, für frühere Antworten verwende ich dies in meinem ~ / .zshrc für vi-ähnliche Verknüpfungen in meinem Terminal. Ich hoffe es wird jemandem helfen.
quelle