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
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åttCtrl-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, startcat
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år5D
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
fish
😉\e[5~
og\e[6~
, bruk\e[A
,\e[B
.