Putem folosi săgeata sus și jos pentru a naviga în istoricul comenzilor.
În unele IDE, cum ar fi Matlab, dacă introducem ceva și apoi apăsăm tastele săgeată, ne derulăm doar între comenzile istorice începând cu ceea ce avem introdus. Este foarte convenabil, dar într-un terminal shell, acest lucru nu funcționează.
Există vreo modalitate de a obține o funcție similară într-un terminal shell? Și alte sfaturi pentru îmbunătățirea eficienței în utilizarea terminalului?
Comentarii
Răspuns
Ceea ce căutați este Ctrl R .
Tastați Ctrl R și apoi tastați o parte din comanda dorită. Bash va afișa prima comandă potrivită. Continuați să tastați Ctrl R și bash va parcurge comenzile de potrivire anterioare.
Pentru a căuta înapoi în istoric, tastați Ctrl S în schimb. (Dacă Ctrl S nu funcționează așa pentru dvs., probabil că înseamnă că trebuie să dezactivați controlul fluxului XON / XOFF: pentru a face acest lucru, rulați stty -ixon
.)
Aceasta este documentată la „Căutare” în man bash
.
Comentarii
-
Ctrl-Q
pentru a ieși din starea înghețată, dacă apăsați deja peCtrl-S
fără a dezactiva mai întâi controlul fluxului și ați blocat terminalul.
Răspuns
Plasați-le în ~/.inputrc
:
"\e[5~": history-search-backward "\e[6~": history-search-forward
Acestea fac Pagină în sus și Pagină în jos se comportă după cum doriți. (Unele distribuții l-au configurat deja pentru dvs.) Personal, acest lucru mi se pare mai convenabil decât Ctrl + R sau history
.
Comentarii
- Acesta este cel mai convenabil mod în toate răspunsurile actuale. u plz da un pic explicație despre mecanismul de lucru?
-
~/.inputrc
sau/etc/inputrc
sau fișierul la care face referire variabila de mediu$INPUTRC
este fișierul de configurare pentru editarea liniei tuturor aplicațiilor care utilizează readline, inclusiv bash (shell-ul dvs.). Are anumite capabilități de editare a liniilor încorporate, inclusiv aceste două: în pagina manuală bash ‘ căutați unul dintre aceste cuvinte cheie pentru a afla mai multe.\e[5~
/\e[6~
sunt secvențele de evacuare generate de tastele Pagină sus / jos în majoritatea emulatoarelor terminale; pentru ao vedea, lansați comandacat
și apoi apăsați aceste taste (octetul de evacuare este reprezentat în terminal ca^[
, în inputrc ca\e
). - Exemplul din întrebarea inițială spune că tastele Sus / Jos funcționează astfel în Matlab. Ar fi interesant să vedeți ce s-a întâmplat dacă ați plasa secvența Sus și Jos în inputrc și ați atribui această acțiune; ar funcționa corect sau ar avea efecte secundare urâte deoarece intră în conflict cu comportamentul lor implicit. ‘ nu știu, ‘ aș fi fericit să vă aud concluziile dacă experimentați acest lucru.
- Când fac
echo $INPUTRC
este gol. ‘ folosesc Ubuntu 14.04 - Personal prefer să înlocuiesc săgeata în sus și în jos pentru a face acest lucru:
"\e[A": history-search-backward
și"\e[B": history-search-forward
Răspuns
Pe lângă istoricul ^ r / ^ s -search:
alt . introduce ultimul „cuvânt” al comenzii anterioare la cursor. Repetați-l pentru a obține ultimul cuvânt din comenzi mai vechi. (Dar rețineți că un &
final contează ca ultimul cuvânt pentru comenzile de fundal).
Acest lucru este foarte util pentru mkdir foo
, cd
alt-dot. Chiar mai rapid decât săgeata în sus, ^ a, alt-d (șterge cuvântul înainte), cd
.
Pentru a obține al doilea până la ultimul cuvânt, utilizați esc
-
2
alt+.
utilizați un argument numeric în stil emacs pentru a alt+.
.Contorizări negative de la sfârșit, contorizări pozitive înainte de la început.) Dar aceasta este de obicei mai multă problemă decât merită; la un moment dat este mai rapid să ajungeți la mouse și să copiați / lipiți, sau săgeată sus și ^ w / ^ y parte din el (vezi mai jos).
Dacă terminalul este configurat frumos / corect, ctrl-stânga și ctrl-dreapta vor merge înapoi / înainte prin cuvinte. Dacă nu, sperăm că cel puțin alt-b și alt-f vor face același lucru.
ctrl- / este o anulare. Puteți utiliza repetarea automată pentru ștergerea cuvintelor mult mai eficient dacă puteți anula când depășiți puțin.
Amestecarea / potrivirea mai puternică a comenzilor provine din folosirea kill-ring, care funcționează la fel ca în Emacs. ctrl-y pentru a lipi ultimul ctrl-w / ctrl-u / ctrl-backspace / alt-d. alt-y pentru a parcurge textul mai vechi ucis.
Ctrl-w multiplu sau orice altceva dintr-un rând face la intrarea kill-ring. Utilizați săgeata stânga și dreapta sau ceva pentru a sparge intrarea dacă doriți să eliminați două lucruri și să lipiți una mai târziu.
Combinând toate acestea împreună, puteți
- începeți să tastați o comandă
- ctrl-r pentru a reveni la o comandă veche și a apuca o parte din aceasta cu control-w sau similar.
- esc-r sau
alt+r
pentru a-l restabili cum era înainte de a șterge o parte din acesta. - alt-
>
pentru a merge la sfârșitul istoriei (adică săgeata în jos până la capăt), pentru a reveni la comanda în care te aflați.
Alte sfaturi de utilizare interactivă:
Activați shopt -s globstar
, astfel încât să puteți face **/*.c
(recursiv inclusiv actualul dir). Uneori la îndemână pentru utilizare interactivă, dar de obicei find -name "*.c" -exec foo {} +
este mai bun.
Dacă scrieți scripturi bash, veți găsi la îndemână să aveți shopt -s extglob
activat și în shell-urile dvs. interactive. Veți uneori găsi o utilizare pentru lucruri precum *.!(c|h)
pentru a se potrivi fișierelor care nu se termină cu .c sau .h.
Găsiți aliasuri care vă plac pentru ls -l
, less
și orice altceva faceți mult. (cp -i
, mv -i
și rm -I
sunt frumoase. Nu vă obișnuiți de în funcție de ei pentru a face un rm selectiv. GNU rm „s -I cere o dată pentru toate argumentele.)
Îmi place alias m=less
(m pentru „mai mult”). Am less
configurat cu , și . legat de fișierul anterior / următor (lesskey
). Implicit este o secvență de apăsare pe mai multe taste care nu poate fi utilizată cu repetarea automată.
Îmi place să fac totul în ecranul GNU. Mi se pare mai ușor să urmăresc ferestrele numerotate decât o încărcarea de file în Konsole (sau orice alt emulator de terminal am încercat). Dacă nu știți deja screen
, învățați tmux deoarece este mai nou și mai puțin dificil.
Pentru a obține ceva de genul funcționalității deschiderii unui shell nou cu același cwd cu un alt shell, eu folosesc un cârlig personalizat pentru cd / pushd / popd care îmi permite să fac cds 8
pentru a cd la orice se folosește dir-ul meu în fereastra 8 a ecranului. Acest lucru funcționează chiar și pentru shell-urile din afara sesiunii de ecran, atâta timp cât există o singură sesiune de ecran.
Comentarii
- Al meu nu ‘ nu pare să fie ” configurat corect „. Multe dintre comenzile rapide pe care le văd aici nu funcționează ‘ nu funcționează, folosesc Terminalul stoc din Ubuntu 14.04. Cum îl pot configura?
- @JorgeeFG: Cred că a funcționat pentru mine din cutie cu
gnome-terminal
în Ubuntu 14.04, înainte de a trece la KDE. Opțiunea relevantă este în setările terminalului dvs., esc-prefix vs hig h-bit și poate alte setări. Unii dintre ei nu ‘ nu funcționează perfect pentru mine prin ssh. (de exemplu, ctrl stânga / dreapta combină codul de evacuare pentru tasta săgeată și am5D
care apare literal)
Răspuns
Adăugați următoarele rânduri la ~/.inputrc
"\e[A": history-search-backward "\e[B": history-search-forward
Acest lucru este similar cu răspunsul lui egmont, dar în loc să utilizeze Pagină sus și Pagină jos, folosește secvențele de evacuare pentru Săgeată sus și Săgeată jos. Acest mod este mult mai convenabil de utilizat pe un Mac.
Răspuns
Întotdeauna tind să-mi configurez mașinile cu un HISTSIZE , astfel încât să păstreze o listă mai lungă a istoricului, precum și HISTTIMEFORMAT cu valoarea marcajului de timp, astfel încât Văd când a fost executată comanda.
export HISTSIZE=10000 export HISTTIMEFORMAT="%m/%d/%Y %T "
Răspuns
Mijloacele pe care le folosesc de obicei este să combin history
cu grep
IE:
history | grep <command im looking for>
Aceasta va afișa un istoric numerotat al comenzilor pe care le-ați introdus și care conțin acea comandă, apoi puteți utiliza:
!<number listed in history command>
pentru a reface acea comandă.
IE:
history | grep history
142 history 143 history | grep lvresize 568 history | grep echo 570 history | grep echo 571 history | grep history
urmat de: !571
va repeta history | grep history
Comentarii
- CR = mult mai bine + mult mai sigur
- Poate că, personal, găsesc un istoric canalizat către grep pentru a fi un mijloc mai rapid de a găsi majoritatea comenzilor. În ceea ce privește mai sigur, ‘ nu știu ce vrei să spui, care sunt riscurile inerente în utilizarea istoriei, așa cum se presupune căutarea prin ea cu cR?
- @ Gravy Bănuiesc că PSkocik înseamnă că
!
substituirea istoricului este mai puțin sigură. - @ Grevy Riscurile inerente ar fi obținerea accidentală a unei linii greșite. Nici o idee de ce terminalul dvs. a înghețat, cu excepția cazului în care ați folosit Control-S și ați activat controlul fluxului xon / xoff (adesea implicit). Dacă da, Control-Q îl va aduce înapoi.
- Sunt de acord cu @PSkocik, cr este mult mai bun, deoarece ‘ s este mai ușor să editați linia istorică, mai degrabă decât să o rulați din nou în același mod. Executarea din nou a aceleiași comenzi este un caz banal a ceea ce puteți face pentru a economisi timp re-tastând variații pe un singur liner complex sau completarea unui tab diferit într-o cale lungă. Vedeți răspunsul meu.
Răspuns
Am folosit zilnic 4 sfaturi (și câteva altele) în terminalul meu bash:
-
Executați ultima comandă:
!!
-
Executați comanda N din istoric:
!N
-
Imprimați ultima comandă începând cu prefix din istorie:
!prefix:p
-
Executați ultima comandă începând cu prefix din istorie:
!prefix
Comentarii
- Cred că folosirea comenzii N din istorie este una dintre cele mai mari căi de tragere în picior pentru majoritatea oamenilor 🙂 Doar spunând
Răspunde
Dacă este în regulă să utilizați zsh
în loc de bash
, puteți utiliza oh-mi-zsh pentru asta.
Puteți naviga în istoricul comenzilor cu săgețile sus și jos. De asemenea, permite aceeași navigare atunci când ați tastat deja textul (ca în Mathlab).
edit: Oh-my-zsh este un pachet software mare, orientat spre dezvoltatori, care include multe alte caracteristici, de ex aliasuri, teme, pluginuri. Aceste extras fac distribuția mai complexă de utilizat decât o comandă rapidă de la tastatură.
https://github.com/robbyrussell/oh-my-zsh
Comentarii
-
oh-my-zsh
conține tone de lucruri. S-ar putea la fel de bine să spuneți: această caracteristică exactă este inclusă în acea distribuție, când tot ce aveți nevoie este o setare sau o aplicație specifică. - Am editat postarea: am avertizat că este mai mare decât o aplicație simplă.
Răspuns
Adăugați următorul alias la ~ / .bashrc
alias h="history | awk """""{$1="";print}""""" |sed "s/^ *//" |grep -v "^h " | sort | uniq | grep"
Utilizare: h fire
îmi va oferi o listă de comenzi care conțin foc . sau h ^fire
îmi va oferi o listă de comenzi care începe cu foc .
Acest lucru este util atunci când doresc să vizualizez o serie de comenzi în același timp.
Apropo, """""
este urât, dar nu am putut găsi alte modalități de a evita ghilimelele simple între ghilimelele unice.
Comentarii
- fyi –
h="history | awk '{\$1=\"\"; print}'
ar trebui să funcționeze. alternativ creați o funcție și apelați-o. - mulțumesc DarkHeart, dar am încercat codul tău, nu am funcționat în mediul meu, poate există ceva diferit în al meu
fish
😉\e[5~
și\e[6~
, utilizați\e[A
,\e[B
.