Søk etter en forrige kommando med prefikset jeg nettopp skrev

Vi kan bruke pil opp og pil ned for å navigere i kommandolinje.

I noen IDEer, for eksempel Matlab, hvis vi skriver inn noe og trykker på piltastene, blar vi bare mellom historikkommandoer som begynner med det vi har input. Det er veldig praktisk, men i en skallterminal fungerer dette ikke.

Er det noen måte å få en lignende funksjon i en skallterminal? Og noen andre tips for å forbedre effektiviteten i terminalbruk?

Kommentarer

  • Du kan ganske enkelt bruke et skall som gir en slik funksjon, som fish😉
  • @yoann du ‘ antar at bash ikke ‘ t . Det er, via readline, bare ikke tilgjengelig som standard.
  • @muru I ‘ er klar over CTRL + R i bash, og egmont ‘ s svar gir en fin måte å gjøre det med Page Up / Page Down. Er det imidlertid en måte å gjøre det med piltastene?
  • @yoann sjekk ut unix.stackexchange.com/a/76591/70524. I stedet for \e[5~ og \e[6~, bruk \e[A, \e[B.

Svar

Det du leter etter er Ctrl R .

Skriv Ctrl R , og skriv deretter inn en del av kommandoen du vil ha. Bash viser den første samsvarende kommandoen. Fortsett å skrive Ctrl R og bash vil bla gjennom tidligere samsvarende kommandoer.

For å søke bakover i historikken, skriv Ctrl S i stedet. (Hvis Ctrl S ikke fungerer slik for deg, betyr det sannsynligvis at du må deaktivere XON / XOFF flytkontroll: for å gjøre det, kjør stty -ixon.)

Dette er dokumentert under «Søker» i man bash.

Kommentarer

  • Ctrl-Q for å avslutte den frosne tilstanden, hvis du allerede har slått Ctrl-S uten å slå av strømningskontrollen først og fikk terminalen frossen.

Svar

Plasser disse i ~/.inputrc:

"\e[5~": history-search-backward "\e[6~": history-search-forward 

Disse lager Page Up og Side ned oppfører deg som du ønsker. (Noen distribusjoner har den allerede konfigurert for deg.) Jeg personlig synes denne måten er mer praktisk enn Ctrl + R eller history.

Kommentarer

  • Dette er den mest praktiske måten i alle aktuelle svar. Kunne du plz gi litt forklaring på arbeidsmekanismen?
  • ~/.inputrc eller /etc/inputrc eller filen det refereres til av miljøvariabelen $INPUTRC er konfigurasjonsfilen for linjeredigering av alle applikasjoner som bruker readline, inkludert bash (skallet ditt). Den har visse innebygde redigeringsfunksjoner, inkludert disse to: i bash ‘ s manuelle sidesøk etter et av disse nøkkelordene for å finne ut mer. \e[5~ / \e[6~ er rømningssekvensene generert av Page Up / Down-tastene i de fleste terminalemulatorene; For å se det, start cat kommandoen og trykk deretter på disse tastene (rømningsbyten er representert i terminalen som ^[, i inputrc som \e).
  • Eksemplet i det opprinnelige spørsmålet ditt sier at Opp / Ned-tastene fungerer på denne måten i Matlab. Det ville være interessant å se hva som skjedde hvis du plasserte sekvensen opp og ned i inputrc og tilordnet denne handlingen; ville det fungere riktig, eller ha ubehagelige bivirkninger ettersom det er i konflikt med standardadferd. Jeg vet ikke ‘, jeg ‘ vil gjerne høre funnene dine hvis du eksperimenterer med dette.
  • Når jeg gjør echo $INPUTRC, er den tom. Jeg ‘ bruker Ubuntu 14.04
  • Jeg foretrekker personlig å overstyre pil opp og ned for å gjøre dette: "\e[A": history-search-backward og "\e[B": history-search-forward

Svar

Foruten ^ r / ^ s historie i -søk:

alt . setter inn det siste «ordet» i forrige kommando ved markøren. Gjenta det for å få siste ord fra eldre kommandoer. (Men vær oppmerksom på at et etterfølgende & teller som det siste ordet for bakgrunnskommandoer).

Dette er veldig nyttig for mkdir foo, cd alt-dot. Enda raskere enn pil opp, ^ a, alt-d (slett fremoverord), cd.

For å få det siste til siste ordet, bruk esc - 2 alt+. (dvs. bruk et numerisk argument i emacs-stil for å alt+..Negativt teller inn fra slutten, positivt teller fremover fra starten.) Men dette er vanligvis mer problemer enn det er verdt; på et eller annet tidspunkt er det raskere å nå frem til musen og kopiere / lime inn, eller opp-pil og ^ w / ^ y en del av den (se nedenfor).


Hvis terminalen din er konfigurert pent / ordentlig, vil ctrl-venstre og ctrl-høyre gå bakover / fremover med ord. Hvis ikke, vil forhåpentligvis alt-b og alt-f gjøre det samme.


ctrl- / er en angre. Du kan bruke automatisk repetisjon for å slette ord mye mer effektivt hvis du kan angre når du skyver litt.


Kraftigere blanding / matching av kommandoer kommer fra å bruke kill-ring, som fungerer akkurat som i Emacs. ctrl-y for å lime inn det siste ctrl-w / ctrl-u / ctrl-backspace / alt-d. alt-y for å bla gjennom eldre drepte tekster.

Flere ctrl-w eller hva som helst på rad gjør på kill-ring oppføring. Bruk venstre og høyre pil eller noe for å dele opp oppføringen hvis du vil fjerne to ting og bare lime inn en senere.

Når du kombinerer alle disse sammen, kan du

  • begynn å skrive en kommando
  • ctrl-r for å gå tilbake til en gammel kommando og ta en del av den med control-w eller lignende.
  • esc-r eller alt+r for å gjenopprette det slik det var før du slettet en del av det.
  • alt- > for å gå til slutten av historien (dvs. pil ned hele veien), for å komme tilbake til kommandoen du var midt i.

Andre tips om interaktiv bruk:

Aktiver shopt -s globstar, slik at du kan gjøre **/*.c (rekursivt inkludert gjeldende dir). Noen ganger praktisk for interaktiv bruk, men vanligvis er find -name "*.c" -exec foo {} + bedre.

Hvis du skriver bash-skript, vil du finne det nyttig å ha shopt -s extglob også aktivert i dine interaktive skall. Du vil noen ganger finne en bruk for ting som *.!(c|h) for å matche filer som ikke slutter med .c eller .h.

Finn aliaser du liker for ls -l, less, og alt annet du gjør mye. (cp -i, mv -i og rm -I er fine. Ikke få for vane av avhengig av dem for å gjøre en selektiv rm. GNU rm «s -Jeg ber en gang for alle argumenter.)

Jeg liker alias m=less (m for «mer»). Jeg har less satt opp med , og . bundet til forrige / neste fil (lesskey). Standard er en flertastetrykk-sekvens som ikke kan brukes med autorepeat.


Jeg liker å gjøre alt i GNU-skjermen. Jeg synes det er lettere å holde styr på nummererte skjermvinduer enn en boatload av faner i Konsole (eller en hvilken som helst annen terminalemulator jeg har prøvd). Hvis du ikke allerede vet screen, kan du lære tmux fordi det er nyere og mindre grovt.

For å få noe som funksjonaliteten til å åpne et nytt skall med samme cwd som et annet skall, jeg bruker en tilpasset krok for cd / pushd / popd som lar meg gjøre cds 8 til cd til hva som helst dir mitt skall i skjermvindu 8 bruker. Dette fungerer selv for skjell utenfor skjermøkten, så lenge det bare er en skjermøkt.

Kommentarer

  • Mine ser ikke ut ‘ » riktig konfigurert «. Mange av snarveiene jeg ser her, fungerer ikke ‘, jeg bruker lagerterminal fra Ubuntu 14.04. Hvordan kan jeg konfigurere den?
  • @JorgeeFG: Jeg tror det fungerte for meg ut av boksen med gnome-terminal i Ubuntu 14.04, før jeg byttet til KDE. Det relevante alternativet er i terminalinnstillingene, esc-prefiks vs hig h-bit, og kanskje noen andre innstillinger. Noen av dem fungerer ikke ‘ t perfekt for meg gjennom ssh. (f.eks. ctrl venstre / høyre munge rømningskoden for piltasten, og jeg får 5D vises bokstavelig)

Svar

Legg til følgende linjer i ~/.inputrc

"\e[A": history-search-backward "\e[B": history-search-forward 

Dette ligner på egmont sitt svar, men i stedet for å bruke Page Up og Page Down, bruker det escape-sekvensene for Pil opp og Pil ned. Denne måten er mye mer praktisk å bruke på en Mac.

Svar

Jeg pleier alltid å konfigurere maskinene mine med et stort HISTSIZE verdi slik at den holder en lengre historikkliste, så vel som HISTTIMEFORMAT med tidsstempelverdien Jeg kan se når ble kommandoen kjørt.

export HISTSIZE=10000 export HISTTIMEFORMAT="%m/%d/%Y %T " 

Svar

Midlene jeg vanligvis bruker er å kombinere history kommando med grep

IE:

history | grep <command im looking for> 

Som viser en nummerert historie med kommandoer du har skrevet som inneholder den kommandoen, kan du bruke:

!<number listed in history command> 

for å gjøre om den kommandoen.

IE:

history | grep history

142 history 143 history | grep lvresize 568 history | grep echo 570 history | grep echo 571 history | grep history 

etterfulgt av: !571

vil gjenta history | grep history

Kommentarer

  • CR = mye bedre + mye tryggere
  • Kanskje, personlig, finner jeg en historie som går til grep for å være et raskere middel for å finne de fleste kommandoer. Så langt som tryggere, er jeg ‘ ikke sikker på hva du mener, hva er de iboende risikoene ved å bruke historikk som beregnet på å søke gjennom den med cR?
  • @ Gravy Jeg mistenker at PSkocik betyr at ! erstatning for historie er mindre trygg.
  • @Gravy De iboende risikoene vil ved et uhell få feil linje. Ingen anelse om hvorfor terminalen din har frosset, med mindre du brukte Control-S og du har aktivert xon / xoff flow control (ofte standard). I så fall vil Control-Q bringe det tilbake.
  • Jeg er enig med @PSkocik, cr er mye bedre fordi det ‘ s lettere å redigere historikklinjen, i stedet for å bare kjøre den igjen på samme måte. Å kjøre nøyaktig den samme kommandoen igjen er et trivielt tilfelle av hva du kan gjøre for å spare tid på å skrive inn varianter på komplekse enlinjer eller tabulere en annen fil i en lang bane. Se svaret mitt.

Svar

Jeg brukte daglig 4 tips (og noen andre) i min bash-terminal:

  • Utfør siste kommando: !!

  • Utfør kommando N fra historien: !N

  • Skriv ut siste kommando som begynner med prefiks fra historien: !prefix:p

  • Utfør siste kommando som starter med prefiks fra historikk: !prefix

Kommentarer

  • Jeg tror at bruk av kommandoen N fra historien er en av de største stiene noen gang for å skyte seg i foten for de fleste mennesker 🙂 Bare si

Svar

Hvis det er greit at du bruker zsh i stedet for bash, du kan bruke oh-mi-zsh for det.

Du kan navigere i kommandohistorikken med pil opp og ned. Den tillater også den samme navigasjonen når du allerede har skrevet teksten (som i Mathlab).

rediger: Oh-my-zsh er en stor, utviklerorientert programvarepakke som inneholder mange andre funksjoner, f.eks aliaser, temaer, plugins. Disse tilleggene gjør distribusjonen mer kompleks å bruke enn en hurtigtast.

https://github.com/robbyrussell/oh-my-zsh

Kommentarer

  • oh-my-zsh inneholder mange ting. Du kan like gjerne si: Denne eksakte funksjonen er inkludert i den distroen, når alt du trenger er en bestemt innstilling eller app.
  • Jeg redigerte innlegget: Jeg advarte om at det er større enn en enkel app.

Svar

Legg til følgende alias til ~ / .bashrc

alias h="history | awk """""{$1="";print}""""" |sed "s/^ *//" |grep -v "^h " | sort | uniq | grep" 

Bruk: h fire gir meg en liste over kommandoer som inneholder brann . eller h ^fire vil gi meg en liste over kommandoer som begynner med brann .

Dette er nyttig når jeg vil se en serie med kommandoer samtidig.

Forresten, """"" er stygt, men jeg kunne ikke finne andre måter å unngå enkelt anførselstegn i enkelt anførselstegn.

Kommentarer

  • fyi – h="history | awk '{\$1=\"\"; print}' skal fungere. Alternativt kan du opprette en funksjon og kalle det.
  • takk DarkHeart, men jeg prøvde koden din, fant ikke arbeidet i mitt miljø, kanskje er det noe annet i mitt

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *