Sök efter ett tidigare kommando med prefixet. Jag skrev bara

Vi kan använda upp- och nedpilen för att navigera i kommandohistoriken.

I vissa IDE, som Matlab, om vi matar in något och sedan trycker på piltangenterna, bläddrar vi bara mellan historik kommandon som börjar med det vi har inmatat. Det är verkligen bekvämt, men i en skalterminal fungerar det inte.

Finns det något sätt att få en liknande funktion i en skalterminal? Och några andra tips för att förbättra effektiviteten vid terminalanvändning?

Kommentarer

  • Du kan helt enkelt använda ett skal som tillhandahåller en sådan funktion, som fish😉
  • @yoann du ’ antar att bash inte ’ t . Det är, via readline, bara inte tillgängligt som standard.
  • @muru I ’ är medveten om CTRL + R i bash och egmont ’ s svar ger ett snyggt sätt att göra det med Page Up / Page Down. Finns det dock ett sätt att göra det med piltangenterna?
  • @yoann kolla in unix.stackexchange.com/a/76591/70524. Istället för \e[5~ och \e[6~, använd \e[A, \e[B.

Svar

Vad du letar efter är Ctrl R .

Skriv Ctrl R och skriv sedan en del av det kommando du vill ha. Bash visar det första matchande kommandot. Fortsätt skriva Ctrl R och bash går igenom tidigare matchande kommandon.

Om du vill söka bakåt i historiken skriver du Ctrl S istället. (Om Ctrl S inte fungerar så för dig betyder det troligtvis att du måste inaktivera XON / XOFF flödeskontroll: för att göra det, kör stty -ixon.)

Detta dokumenteras under ”Söker” i man bash.

Kommentarer

  • Ctrl-Q för att avsluta det frysta tillståndet, om du redan trycker på Ctrl-S utan att först stänga av flödeskontrollen och fick din terminal fryst.

Svara

Placera dessa i din ~/.inputrc:

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

Dessa gör Page Up och Page Down beter sig som du vill. (Vissa distributioner har det redan konfigurerat för dig.) Jag tycker personligen att det här är bekvämare än Ctrl + R eller history.

Kommentarer

  • Detta är det mest praktiska sättet i alla aktuella svar. du plz ge lite förklaring på arbetsmekanismen?
  • ~/.inputrc eller /etc/inputrc eller filen som miljövariabeln refererar till $INPUTRC är konfigurationsfilen för radredigering för alla applikationer som använder readline, inklusive bash (ditt skal). Den har vissa inbyggda funktioner för redigering av rader, inklusive dessa två: i bash ’ s manuella sida söker efter ett av dessa nyckelord för att ta reda på mer. \e[5~ / \e[6~ är escape-sekvenser som genereras av Page Up / Down-tangenterna i de flesta terminalemulatorerna; för att se det, starta kommandot cat och tryck sedan på dessa tangenter (escape-byte representeras i terminalen som ^[, i inputrc som \e).
  • Exemplet i din ursprungliga fråga säger att Upp / Ner-tangenterna fungerar så här i Matlab. Det vore intressant att se vad som hände om du placerade sekvensen Upp och Ner i inputrc och tilldelade den här åtgärden. skulle det fungera korrekt eller ha otäcka biverkningar eftersom det strider mot deras standardbeteende. Jag vet inte ’, jag ’ skulle gärna höra dina resultat om du experimenterar med detta.
  • När jag gör echo $INPUTRC är den tom. Jag ’ jag använder Ubuntu 14.04
  • Jag föredrar personligen att göra uppåt- och nedåtpil för att göra detta: "\e[A": history-search-backward och "\e[B": history-search-forward

Svar

Förutom ^ r / ^ s historia i -sökning:

alt . infogar det sista ”ordet” i föregående kommando vid markören. Upprepa det för att få det sista ordet från äldre kommandon. (Men observera att ett efterföljande & räknas som det sista ordet för bakgrundskommandon).

Detta är super praktiskt för mkdir foo, cd alt-dot. Ännu snabbare än uppåtpil, ^ a, alt-d (radera framåtord), cd.

För att få ordet 2: a till sista, använd esc - 2 alt+. använd ett numeriskt argument för emacs-stil för att alt+..Negativt räknas in från slutet, positivt räknar framåt från början.) Men detta är vanligtvis mer besvär än det är värt; vid något tillfälle är det snabbare att nå musen och kopiera / klistra in, eller uppåtpil och ^ w / ^ y en del av den (se nedan).


Om din terminal är snyggt / ordentligt inställd kommer ctrl-vänster och ctrl-höger att gå bakåt / framåt med ord. Om inte, förhoppningsvis kommer åtminstone alt-b och alt-f göra samma sak.


ctrl- / är ett ångra. Du kan använda automatisk upprepning för att radera ord mycket mer effektivt om du kan ångra när du överskjuter lite.


Mer kraftfull blandning / matchning av kommandon kommer från att använda dödringen, som fungerar precis som i Emacs. ctrl-y för att klistra in det sista ctrl-w / ctrl-u / ctrl-backsteget / alt-d. alt-y för att bläddra igenom äldre dödad text.

Flera ctrl-w eller vad som helst i rad gör vid inmatning av kill-ring. Använd vänster- och högerpil eller något för att bryta upp posten om du vill ta bort två saker och bara klistra in en senare.

Om du kombinerar alla dessa kan du

  • börja skriva ett kommando
  • ctrl-r för att gå tillbaka till ett gammalt kommando och ta en del av det med kontroll-w eller liknande.
  • esc-r eller alt+r för att återställa det till hur det var innan du raderade en del av det.
  • alt- > för att gå till slutet av historien (dvs. nedåtpilen hela vägen), för att komma tillbaka till kommandot du var mitt i.

Andra tips för interaktiv användning:

Aktivera shopt -s globstar, så att du kan göra **/*.c (rekursivt inklusive nuvarande dir). Ibland praktiskt för interaktiv användning, men find -name "*.c" -exec foo {} + är vanligtvis bättre.

Om du skriver bash-skript kommer det att vara bra att ha shopt -s extglob aktiverat i dina interaktiva skal också. Du ibland hittar en användning för saker som *.!(c|h) för att matcha filer som inte slutar med .c eller .h.

Hitta alias som du gillar för ls -l, less och allt annat du gör mycket. (cp -i, mv -i och rm -I är trevliga. Var inte vana av beroende på dem för att göra en selektiv rm. GNU rm ”s -Jag frågar en gång för alla args.)

Jag gillar alias m=less (m för ”mer”). Jag har less konfigurerat med , och . bunden till föregående / nästa fil (lesskey). Standard är en sekvens med flera tangenter som inte kan användas med autorepeat.


Jag gillar att göra allt inuti GNU-skärmen. Jag har lättare att hålla reda på numrerade skärmfönster än en båtladdning av flikar i Konsole (eller någon annan terminalemulator jag har testat). Om du inte redan vet screen, lär dig tmux eftersom det är nyare och mindre grovt.

För att få något som fungerar som att öppna ett nytt skal med samma cwd som ett annat skal använder jag en anpassad krok för cd / pushd / popd som låter mig göra cds 8 till cd till vad som helst dir mitt skal i skärmfönster 8 använder. Detta fungerar även för skal utanför skärmens session, så länge det bara finns en skärmsession.

Kommentarer

  • Gruvan verkar inte vara ’ ” korrekt konfigurerad ”. Många genvägar som jag ser här fungerar inte ’, jag använder lagerterminal från Ubuntu 14.04. Hur kan jag konfigurera det?
  • @JorgeeFG: Jag tror att det fungerade för mig ur lådan med gnome-terminal i Ubuntu 14.04, innan jag bytte till KDE. Det relevanta alternativet finns i dina terminalinställningar, esc-prefix vs hig h-bit och kanske några andra inställningar. Vissa av dem fungerar inte ’ för ssh. (t.ex. ctrl vänster / höger munge flyktkoden för piltangenten och jag får 5D visas bokstavligt)

Svar

Lägg till följande rader i din ~/.inputrc

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

Detta liknar egmonts svar, men istället för att använda Page Up och Page Down använder det escape-sekvenserna för Arrow Up och Arrow Down. Det här är mycket bekvämare att använda på en Mac.

Svar

Jag brukar alltid konfigurera mina maskiner med ett stort HISTSIZE värde så att det håller en längre historiklista, såväl som HISTTIMEFORMAT med tidsstämpelvärdet så Jag kan se när kommandot kördes.

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

Svar

Det sätt jag brukar använda är att kombinera history kommando med grep

IE:

history | grep <command im looking for> 

Som visar en numrerad historik över kommandon som du har skrivit och som innehåller det kommandot, kan du sedan använda:

!<number listed in history command> 

för att göra om det kommandot.

IE:

history | grep history

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

följt av: !571

upprepas history | grep history

Kommentarer

  • CR = mycket bättre + mycket säkrare
  • Kanske, personligen tycker jag att en historia som går till grep är ett snabbare sätt att hitta de flesta kommandon. Så långt det är säkrare är jag ’ inte säker på vad du menar, vilka är de inneboende riskerna med att använda historik, som det är möjligt att söka igenom det med cR?
  • @ Gravy Jag misstänker att PSkocik betyder att ! historiensbyte är mindre säker.
  • @Gravy De inneboende riskerna skulle av misstag få fel linje. Ingen aning om varför din terminal har frusit, såvida du inte använde Control-S och du har aktiverat xon / xoff-flödeskontroll (ofta standard). I så fall tar Control-Q tillbaka det.
  • Jag håller med @PSkocik, cr är mycket bättre eftersom det ’ s lättare att redigera historikraden, snarare än att bara köra den igen på samma sätt. Att köra exakt samma kommando igen är ett trivialt fall av vad du kan göra för att spara tid på att skriva om variationer på komplexa enlinjer, eller genom att tabulera en annan fil på en lång väg. Se mitt svar.

Svar

Jag använde dagligen fyra tips (och några andra) i min bash-terminal:

  • Kör sista kommandot: !!

  • Kör kommando N från historia: !N

  • Skriv ut sista kommandot som börjar med prefix från historia: !prefix:p

  • Kör det sista kommandot som börjar med prefix från historia: !prefix

Kommentarer

  • Jag tror att det är en av att använda kommandot N från historia de största vägarna någonsin för att skjuta sig i foten för de flesta människor 🙂 Bara att säga

Svar

Om det är okej att du använder zsh istället för bash kan du använda oh-mi-zsh för det.

Du kan navigera i din kommandohistorik med upp- och nedpilarna. Det tillåter också samma navigering när du redan har skrivit in texten (som i Mathlab).

redigera: Oh-my-zsh är ett stort, utvecklarorienterat programvarupaket som innehåller många andra funktioner, t.ex. alias, teman, plugins. Dessa tillbehör gör distributionen mer komplex att använda än en kortkommando.

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

Kommentarer

  • oh-my-zsh innehåller massor av saker. Du kan lika gärna säga: Den här exakta funktionen ingår i den distro, när allt du behöver är en specifik inställning eller app.
  • Jag redigerade inlägget: Jag varnade för att det är större än en enkel app.

Svar

Lägg till följande alias till ~ / .bashrc

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

Användning: h fire ger mig en lista med kommandon som innehåller eld . eller h ^fire ger mig en lista med kommandon som börjar med eld .

Detta är användbart när jag vill se en serie kommandon samtidigt.

Förresten är """"" ful men jag kunde inte hitta andra sätt att undvika enstaka citat i enstaka citat.

Kommentarer

  • fyi – h="history | awk '{\$1=\"\"; print}' ska fungera. Alternativt kan du skapa en funktion och kalla det.
  • tack DarkHeart, men jag prövade din kod, hittade inte fungerade i min miljö, kanske finns det något annat i mitt

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *