Søg efter en tidligere kommando med præfikset. Jeg har lige skrevet

Vi kan bruge pil op og pil ned til at navigere i kommandohistorikken.

I nogle IDEer, såsom Matlab, hvis vi indtaster noget og derefter trykker på piletasterne, ruller vi kun mellem historikkommandoerne, der starter med det, vi har input. Det er virkelig praktisk, men i en shell-terminal fungerer det ikke.

Er der en eller anden måde at få en lignende funktion i en shell-terminal? Og andre tip til forbedring af effektiviteten i terminalbrug?

Kommentarer

  • Du kan simpelthen bruge en shell, der giver en sådan funktion, som fish😉
  • @yoann dig ‘ antager, at bash ikke ‘ t . Det er, via readline, bare ikke tilgængeligt som standard.
  • @muru I ‘ er opmærksom på CTRL + R i bash og egmont ‘ s svar giver en pæn måde at gøre det med Page Up / Page Down. Er der dog en måde at gøre det på med piletasterne?
  • @yoann tjek unix.stackexchange.com/a/76591/70524. I stedet for \e[5~ og \e[6~ skal du bruge \e[A, \e[B.

Svar

Det du leder efter er Ctrl R .

Skriv Ctrl R , og skriv derefter en del af den ønskede kommando. Bash viser den første matchende kommando. Fortsæt med at skrive Ctrl R og bash vil gennemgå tidligere matchende kommandoer.

For at søge baglæns i historikken skal du skrive Ctrl S i stedet. (Hvis Ctrl S ikke fungerer sådan for dig, betyder det sandsynligvis, at du skal deaktivere XON / XOFF-flowkontrol: For at gøre det skal du køre stty -ixon.)

Dette er dokumenteret under “Søgning” i man bash.

Kommentarer

  • Ctrl-Q for at afslutte den frosne tilstand, hvis du allerede har ramt Ctrl-S uden først at slukke for flowkontrol og få din terminal frossen.

Svar

Placer disse i din ~/.inputrc:

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

Disse gør Page Up og Side ned opfører dig som du ønsker. (Nogle distributioner har det allerede konfigureret til dig.) Jeg finder personligt denne måde mere bekvemt end Ctrl + R eller history.

Kommentarer

  • Dette er den mest bekvemme måde i alle aktuelle svar. Kunne du giver lidt forklaring på arbejdsmekanismen?
  • ~/.inputrc eller /etc/inputrc eller filen der henvises til af miljøvariablen $INPUTRC er konfigurationsfilen til linieredigering af alle applikationer, der bruger readline, inklusive bash (din shell). Det har visse indbyggede linieredigeringsfunktioner, herunder disse to: i bash ‘ s manuel sidesøgning efter et af disse nøgleord for at finde ud af mere. \e[5~ / \e[6~ er flugtsekvenser genereret af Page Up / Down-tasterne i de fleste terminalemulatorer; for at se det skal du starte kommandoen cat og derefter trykke på disse taster (escape-byten er repræsenteret i terminalen som ^[, i inputrc som \e).
  • Eksemplet i dit originale spørgsmål siger, at Op / Ned-tasterne fungerer på denne måde i Matlab. Det ville være interessant at se, hvad der skete, hvis du placerede rækkefølgen af op og ned i inputrc og tildelte denne handling; ville det fungere korrekt eller have ubehagelige bivirkninger, da det er i modstrid med deres standardadfærd. Jeg ved ikke ‘, jeg ‘ ville være glad for at høre dine fund, hvis du eksperimenterer med dette.
  • Når jeg gør echo $INPUTRC, er den tom. Jeg ‘ bruger Ubuntu 14.04
  • Jeg foretrækker personligt at tilsidesætte pil op og pil ned for at gøre dette: "\e[A": history-search-backward og "\e[B": history-search-forward

Svar

Udover ^ r / ^ s historie i -søgning:

alt . indsætter det sidste “ord” i den forrige kommando ved markøren. Gentag det for at få det sidste ord fra ældre kommandoer. (Men bemærk, at et efterfølgende & tæller som det sidste ord for baggrundskommandoer).

Dette er super praktisk til mkdir foo, cd alt-dot. Endnu hurtigere end pil op, ^ a, alt-d (slet fremadord), cd.

For at få det 2. til sidste ord skal du bruge esc - 2 alt+. brug et numerisk argument for emacs-stil til alt+..Negativt tæller ind fra slutningen, positivt tæller frem fra starten.) Men dette er normalt mere besvær end det er værd; på et tidspunkt er det hurtigere at nå ud til musen og kopiere / indsætte eller pil op og ^ w / ^ y en del af det (se nedenfor).


Hvis din terminal er opsat pænt / ordentligt, vil ctrl-venstre og ctrl-højre gå baglæns / fremad med ord. Hvis ikke, forhåbentlig vil i det mindste alt-b og alt-f gøre det samme.


ctrl- / er en fortrydelse. Du kan bruge automatisk gentagelse til at slette ord meget mere effektivt, hvis du kan fortryde, når du overskyder lidt.


Mere kraftfuld blanding / matching af kommandoer kommer fra at bruge kill-ring, som fungerer ligesom i Emacs. ctrl-y for at indsætte det sidste ctrl-w / ctrl-u / ctrl-backspace / alt-d. alt-y for at bladre igennem ældre dræbt tekst.

Flere ctrl-w eller hvad som helst i træk gør ved kill-ring-indgang. Brug venstre og højre pil eller noget for at opdele posten, hvis du vil fjerne to ting og kun indsætte en senere.

Ved at kombinere alle disse sammen kan du

  • start med at skrive en kommando
  • ctrl-r for at gå tilbage til en gammel kommando og få fat i en del af den med kontrol-w eller lignende.
  • esc-r eller alt+r for at gendanne det, som det var, før du slettede en del af det.
  • alt- > for at gå til slutningen af historien (dvs. pil ned hele vejen) for at komme tilbage til den kommando, du var midt i.

Andre interaktive brugstips:

Aktivér shopt -s globstar, så du kan gøre **/*.c (rekursiv inklusive den aktuelle dir). Nogle gange praktisk til interaktiv brug, men normalt er find -name "*.c" -exec foo {} + bedre.

Hvis du skriver bash-scripts, vil du finde det praktisk at have shopt -s extglob også aktiveret i dine interaktive skaller. Du vil nogle gange finde en brug for ting som *.!(c|h) til at matche filer, der ikke slutter med .c eller .h.

Find aliasser, du kan lide for ls -l, less og alt andet, du gør en masse. (cp -i, mv -i og rm -I er rart. Må ikke have en vane af afhængig af dem for at lave en selektiv rm. GNU rm “s -Jeg beder en gang om alle args.)

Jeg kan godt lide alias m=less (m for “mere”). Jeg har less opsat med , og . bundet til forrige / næste fil (lesskey). Standard er en sekvens med flere tastetryk, der ikke kan bruges med autorepeat.


Jeg kan godt lide at gøre alt inden i GNU-skærmen. Jeg finder det lettere at holde styr på nummererede skærmvinduer end en boatload af faner i Konsole (eller enhver anden terminalemulator, jeg har prøvet). Hvis du ikke allerede kender screen, skal du lære tmux, fordi det er nyere og mindre groft.

For at få noget som funktionaliteten ved at åbne en ny skal med den samme cwd som en anden shell, jeg bruger en brugerdefineret krog til cd / pushd / popd, der lader mig gøre cds 8 til cd til hvad som helst dir my shell i skærmvindue 8 bruger. Dette fungerer selv for skaller uden for skærm sessionen, så længe der kun er en skærm session.

Kommentarer

  • Mine ser ikke ud til ‘ ” korrekt konfigureret “. Mange af de genveje, jeg ser her, fungerer ikke ‘ t, jeg bruger lagerterminal fra Ubuntu 14.04. Hvordan kan jeg konfigurere det?
  • @JorgeeFG: Jeg synes, det fungerede for mig ud af kassen med gnome-terminal i Ubuntu 14.04, før jeg skiftede til KDE. Den relevante mulighed er i dine terminalindstillinger, esc-prefix vs hig h-bit og måske nogle andre indstillinger. Nogle af dem ‘ fungerer ikke perfekt for mig gennem ssh. (f.eks. ctrl venstre / højre munge flugtkoden til piletasten, og jeg får 5D vises bogstaveligt)

Svar

Føj følgende linjer til din ~/.inputrc

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

Dette svarer til egmonts svar, men i stedet for at bruge Page Up og Page Down bruger det escape-sekvenserne til Arrow Up og Arrow Down. Denne måde er meget mere praktisk at bruge på en Mac.

Svar

Jeg har altid en tendens til at konfigurere mine maskiner med et stort HISTSIZE værdi, så den holder en længere historikliste samt HISTTIMEFORMAT med tidsstempelværdien Jeg kan se, hvornår blev kommandoen kørt.

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

Svar

Det middel, jeg normalt bruger, er at kombinere history kommando med grep

IE:

history | grep <command im looking for> 

Der vises en nummereret historik over kommandoer, du har skrevet, der indeholder den kommando, du kan derefter bruge:

!<number listed in history command> 

til at gentage denne kommando.

IE:

history | grep history

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

efterfulgt af: !571

gentager history | grep history

Kommentarer

  • CR = meget bedre + meget sikrere
  • Måske finder jeg personligt, at en historie sendt til grep er et hurtigere middel til at finde de fleste kommandoer. Så vidt det er sikrere, er jeg ‘ ikke sikker på, hvad du mener, hvad er de iboende risici ved at bruge historien, som det er bestemt til at søge gennem den med cR?
  • @ Gravy Jeg formoder, at PSkocik betyder, at ! historiens udskiftning er mindre sikker.
  • @Gravy De iboende risici ville ved et uheld få den forkerte linje. Ingen idé om, hvorfor din terminal er frossen, medmindre du har brugt Control-S, og du har aktiveret xon / xoff-flowkontrol (ofte standard). I så fald vil Control-Q bringe det tilbage.
  • Jeg er enig med @PSkocik, cr er meget bedre, fordi det ‘ s lettere at redigere historiklinjen i stedet for bare at køre den igen på samme måde. At køre den nøjagtige samme kommando igen er et trivielt tilfælde af, hvad du kan gøre for at spare tid på genindtastning af variationer på komplekse one-liners eller tabulering af en anden fil i en lang sti. Se mit svar.

Svar

Jeg brugte dagligt 4 tip (og nogle andre) i min bash-terminal:

  • Udfør sidste kommando: !!

  • Udfør kommando N fra historikken: !N

  • Udskriv sidste kommando startende med præfiks fra historikken: !prefix:p

  • Udfør sidste kommando startende med præfiks fra historik: !prefix

Kommentarer

  • Jeg synes, at det er en af kommandoen N fra historien de største stier til nogensinde at skyde sig i foden for de fleste mennesker 🙂 Bare sige

Svar

Hvis det er okay for dig at bruge zsh i stedet for bash, kan du bruge oh-mi-zsh for det.

Du kan navigere i din kommandohistorik med pilene op og ned. Det tillader også den samme navigation, når du allerede har skrevet teksten (som i Mathlab).

edit: Oh-my-zsh er en stor, udviklerorienteret softwarepakke, der indeholder mange andre funktioner, f.eks aliaser, temaer, plugins. Disse ekstra gør distributionen mere kompleks at bruge end en tastaturgenvej.

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

Kommentarer

  • oh-my-zsh indeholder masser af ting. Du kan lige så godt sige: Denne nøjagtige funktion er inkluderet i den distro, når alt hvad du behøver er en bestemt indstilling eller app.
  • Jeg redigerede indlægget: Jeg advarede om, at det er større end en simpel app.

Svar

Føj følgende alias til ~ / .bashrc

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

Brug: h fire giver mig en liste over kommandoer, der indeholder ild . eller h ^fire giver mig en liste over kommandoer, der begynder med brand .

Dette er nyttigt, når jeg vil se en række kommandoer på samme tid.

Forresten, """"" er grimt, men jeg kunne ikke finde andre måder at undgå enkelt citater i enkelt citater.

Kommentarer

  • fyi – h="history | awk '{\$1=\"\"; print}' skal fungere. Opret alternativt en funktion og kald det.
  • tak DarkHeart, men jeg prøvede din kode, fandt ikke fungeret i mit miljø, måske er der noget andet i min

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *