Używam świeżej instalacji Ubuntu 16.04 z powłoką bash. Są dwie rzeczy, które chcę zrobić:
- Ustaw tryb vi, aby móc wykonywać ruchy podobne do vima z terminala
- wyjdź z trybu wstawiania, pisząc
jk
W innym poście przeczytałem, jak to zrobić zsh
, jak to zrobić bash
?
tl; dr
umieść bind '"jk":vi-movement-mode'
w swoim .bashrc
pliku po set -o vi
:)
server@thinkpad:~$ tail -n 2 .bashrc
set -o vi
bind '"jk":vi-movement-mode'
Bardziej szczegółowe wyjaśnienia znajdują się w odpowiedzi @ grochmal
bash
keyboard-shortcuts
vi
Mbigras
źródło
źródło
jk
? Czy to jakiś specjalny klawisz na klawiaturze?.bashrc
jest zwykle wywoływany przy każdej powłoce (np. Jeśli się nie wydostajeszvi
), ale.bash_profile
jest wywoływany tylko przy powłokach logowania. To.bashrc
jest właściwe miejsce dlaset -o vi
. Nie mam odpowiedzi na twoje poprawione drugie pytanie :-(set -o vi
wchodzi.bashrc
, zobacz Dlaczego mój ~ / .bash_profile nie działa?Odpowiedzi:
TL; DR
Bash ma podobną funkcjonalność
zsh
„sbindkey
dziękibind
, ale nie posiada kilkavi
trybów, takich jakzsh
. Poset -o vi
tym, jak możesz:co jest odpowiednikiem
zsh
'sbindkey -M <all vi modes> jk vi-movement-mode
Te
vi-movement-mode
funkcje pochodziinputrc
(patrz/etc/inputrc
na listy z nich).Pełny tekst
Jak zauważa Stephen Harris w swoim komentarzu:
.bashrc
jest wywoływany przezbash
always (a zwłaszcza nie przez inne powłoki)..bash_profile
jest wywoływany tylko w powłokach logowania (i ponownie, tylko bash).Kilka dystrybucji ma
.bash_profile
szkielet wyglądający następująco:Jest to dobra treść,
.bash_profile
ponieważ można po prostu zapomnieć, że istnieje.Teraz do mapy jk, aby Escw sesji powłoki, to nie jest w ogóle możliwe. Kiedy to zrobisz:
W Vimie po wpisaniu jVim wie, że musi trochę poczekać, aby sprawdzić, czy piszesz kdalej, i powinien wywołać mapowanie (lub że wpiszesz inny klucz i mapowanie nie powinno zostać uruchomione). Jako dodatek jest to kontrolowane przez
:set timeoutlen=<miliseconds>
Vima (patrz:h timeoutlen
).Kilka powłok lub X11 nie ma takiej kontroli limitu czasu i nie pozwala na mapowanie wielu znaków. Dozwolone jest tylko mapowanie jednego klucza (ale patrz uwagi pomocy technicznej poniżej).
Nie czyta
.vimrc
, imituje tylko niektórevi
(nawetvim
) kombinacje klawiszy, które mogą być użyte w powłoce. To samo można powiedzieć-o emacs
, nie ma pełnej mocyemacs
.obsługa zsh
zsh
faktycznie obsługuje limit czasu mapy. Możesz użyć następujących mapjk
do<esc>
:(Trzeba będzie przejść do
~/.zshrc
nie~/.bashrc
)Jednak odradzam to. Używam
vim
i przezzsh
większość czasu. Maminoremap jk <esc>
w sobievimrc
i próbowałem użyćbindkey
powyższej kombinacji.zsh
zbyt długo czeka na wydrukowaniej
, a to mnie bardzo denerwuje.wsparcie bash
bash
obsługujereadline
bind
. Wierzę, żebash
można to skompilować bez,readilne
dlatego mogą istnieć niektóre rzadkie systemy, które mają bash, które nie obsługująbind
(bądź czujny). Aby odwzorowaćjk
aby<esc>
wbash
trzeba zrobić:(tak, to podwójny poziom cytowania, jest potrzebny)
Ponownie sprawia to, że pisanie jest
j
dość denerwujące. Ale w jakiś sposób mniej irytujące niżzsh
rozwiązanie na moim komputerze (prawdopodobnie domyślny limit czasu jest krótszy).Obejście (dla powłok innych niż bash i nie-zsh)
Powodem ponownego przypisania Escklawisza jest to, że leży on dość daleko na klawiaturze, a wpisanie zajmuje trochę czasu. Sztuką, którą można pożyczyć od
emacs
facetów, jest remap, CapsLockponieważ i tak jest to bezużyteczny klucz.emacs
chłopaki to odwzorowujemy, Ctrlale my zmienimy to Esc.Użyjmy,
xev -event keyboard
aby sprawdzić kod CapsLock:I aby sprawdzić funkcję Esc:
Bardzo dobrze, CapsLockma kod 66 i Escjego funkcja nazywa się „Escape”. Teraz możemy zrobić:
Powyższe należy wykonać w tej kolejności. Teraz za każdym razem, CapsLockgdy naciskasz , działa jak Escklucz.
Trudną częścią jest to, gdzie to ustawić. Plik
~/.Xmodmap
z zawartością:Powinny być respektowane przez większość dystrybucji (tak naprawdę menedżery wyświetlania, ale mówię o dystrybucji dla uproszczenia), ale widziałem takie, które nie szanują kilku
~/X*
plików. W przypadku takich dystrybucji możesz wypróbować coś takiego:W twoim
.bashrc
.(Teoretycznie byłoby lepiej,
~/.xinitrc
ale jeśli menedżer wyświetlania nie przestrzega.Xmodmap
go, to na pewno nie uszanuje~/.xnintrc
.)Dodatkowa uwaga: Ten remaps tylko CapsLockaby Escw sesji X11, dlatego że mapa będzie działać tylko w emulatory terminali. Rzeczywiste
tty
nie zobaczą mapy.Referencje i dodatkowe lektury:
.bashrc
vs..bash_profile
źródło
jk
zamiastCapsLock
? Mam to ustawione na mojej maszynie OSX; jednak nie mam go przez resztę weekendu i nie pamiętam, jak to zrobiłem :)zsh
:bindkey -v; bindkey -s jk \\e
. Ale to jest coś, że wróci i ugryzie cię z powrotem, kiedy trzebajk
, bo zegar nie jest konfigurowalny, a ty nie masz<leader>
wzsh
.zsh
i niebash
, czy nie jest to możliwe w bash?man bash
znalazłambind
tę pracę bardzo podobny dozsh
„sbindkey
. Zaktualizuję odpowiedź. Proszę bardzo, używamzsh
za dużo.Dzięki, za poprzednie odpowiedzi, używam tego w moim ~ / .zshrc dla skrótów vi w moim terminalu. Mam nadzieję, że to komuś pomoże.
źródło