Keressen egy korábbi parancsot az imént beírt előtaggal

Fel és le nyíl segítségével navigálhatunk a parancsok történetében.

egyes IDE-k, például a Matlab, ha beírunk valamit, majd megnyomjuk a nyílbillentyűket, akkor csak az előzményparancsok között görgetünk, kezdve azzal, amit bevittünk. Ez nagyon kényelmes, de egy shell terminálban ez nem működik.

Van valamilyen módja annak, hogy hasonló funkciót nyerjünk egy shell terminálban? És van még valami tipp a terminálhasználat hatékonyságának javítására?

Megjegyzések

  • Egyszerűen használhat egy shellt, amely ilyen funkciót biztosít, például a fish😉
  • @yoann you ‘ újra feltételezi, hogy a bash nem ‘ t . Readline-on keresztül csak alapértelmezés szerint nem érhető el.
  • @muru I ‘ tudatában vagyok a CTRL + R-nek a bash-ban, és az egmont válasza elegáns módot kínál a Page Up / Page Down használatával. Van rá mód azonban a nyílbillentyűkkel?
  • @ nem tudja megnézni a unix.stackexchange.com/a/76591/70524. \e[5~ és \e[6~ helyett használja a \e[A, \e[B.

Válasz

Amit keres, az Ctrl R .

Írja be a Ctrl R parancsot, majd írja be a kívánt parancs egy részét. A Bash megjeleníti az első egyező parancsot. Gépelje tovább a Ctrl R parancsot, és a bash végiglapozza a korábbi egyező parancsokat.

Ha vissza szeretne keresni az előzményekben, írja be a Ctrl parancsot. S helyett. (Ha a Ctrl S nem így működik, ez valószínűleg azt jelenti, hogy le kell tiltania az XON / XOFF folyamatirányítást: ehhez futtassa a stty -ixon.)

Ezt a “Keresés” részben a man bash dokumentum tartalmazza.

Megjegyzések

  • Ctrl-Q a fagyott állapotból való kilépéshez, ha már eltalálta a anélkül, hogy előbb kikapcsolná az áramlásszabályozást, és a terminálját lefagyasztaná.

Válasz

Helyezze ezeket a ~/.inputrc helyre:

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

Ezek Page Up és A Page Down úgy viselkedik, ahogy akarja. (Egyes disztribúciók már konfigurálták az Ön számára.) Ezt én személy szerint kényelmesebbnek találom, mint a Ctrl + R vagy history.

Megjegyzések

  • Ez a legkényelmesebb módszer az összes aktuális válaszban. u plz adj egy keveset magyarázat a működési mechanizmusra?
  • ~/.inputrc vagy /etc/inputrc vagy a $INPUTRC az összes, a readline-t használó alkalmazás sorszerkesztő konfigurációs fájlja, beleértve a bash-t (a shell-et is). Bizonyos beépített vonalas szerkesztési képességekkel rendelkezik, köztük ezt a kettőt: a bash ‘ s kézi oldalon keressen rá ezekre a kulcsszavakra, hogy többet megtudjon. A \e[5~ / \e[6~ azok a menekülési szekvenciák, amelyeket az Oldal Fel / Le billentyűk generálnak a legtöbb terminál emulátorban; megtekintéséhez indítsa el a cat parancsot, majd nyomja meg ezeket a gombokat (a menekülési bájt a terminálban ^[, az inputrc \e).
  • Az eredeti kérdés példája azt mondja, hogy a Fel / Le billentyűk így működnek a Matlab-ban. Érdekes lenne megnézni, hogy mi történt, ha az Upr és Down sorozatot az inputrc-be helyezi, és ehhez a művelethez rendeli; megfelelően működne, vagy csúnya mellékhatásai lennének, mivel ütközik az alapértelmezett viselkedésükkel. Nem tudom, hogy ‘ nem tudom, én ‘ örülnék, ha hallanám a megállapításaidat, ha ezzel kísérletezel.
  • Amikor megcsinálom echo $INPUTRC az üres. ‘ m az Ubuntu 14.04 használatával
  • Ennek érdekében személy szerint jobban szeretem a felfelé és lefelé mutató nyíl felülírását: "\e[A": history-search-backward és "\e[B": history-search-forward

Válasz

A ^ r / ^ előzmények mellett i -search:

alt . beszúrja a kurzorba az előző parancs utolsó “szavát”. Ismételje meg, hogy megkapja a régebbi parancsok utolsó szavát. (De vegye figyelembe, hogy a záró & a háttérparancsok utolsó szavának számít).

Ez nagyon hasznos a mkdir foo, cd alt-dot. Még gyorsabb, mint a felfelé mutató nyíl, a ^ a, az alt-d (törli az előre mutató szót), cd.

A 2–2. Szó megszerzéséhez használja a esc - 2 alt+. (azaz használjon emacs stílusú numerikus argumentumot az alt+. kifejezéshez.A negatív a végétől számít, a pozitív a kezdetektől fogva előre számít.) De ez általában nagyobb gondot jelent, mint amennyit megér; egy ponton gyorsabban elérheti az egeret és másolhat / beilleszthet, vagy a felfelé mutató nyíl és ^ w / ^ y része (lásd alább).


Ha a terminálod szépen / megfelelően van beállítva, a ctrl-left és a ctrl-right szavakkal előre / hátra lép. Ha nem, akkor remélhetőleg legalább az alt-b és az alt-f ugyanazt fogja tenni.


A ctrl- / visszavonás. Az automatikus ismétlést sokkal hatékonyabban használhatja a szavak törléséhez, ha visszavonhatja, ha kicsit túllépi.


A parancsok erőteljesebb keverése / illesztése a kill-ring használatával jön létre, ami működik akárcsak Emacs-ben. ctrl-y az utolsó ctrl-w / ctrl-u / ctrl-backspace / alt-d beillesztéséhez. Az alt-y a régebbi megölt szövegek közötti váltáshoz.

Több ctrl-w vagy bármi más a sorban a kill-ring bejegyzésnél. Használja a bal és a jobb nyíl vagy valami hasonlót a beosztás felosztásához, ha két dolgot el akar távolítani, és csak egyet később szeretne beilleszteni.

Mindezeket összekapcsolva

  • kezdje el beírni a parancsot
  • ctrl-r, hogy visszatérjen egy régi parancshoz, és megragadja annak egy részét a control-w vagy hasonlóval.
  • esc-r vagy alt+r, hogy visszaállítsa a korábbi állapotának visszaállításához.
  • alt- > a történelem végére (azaz a lefelé mutató nyíl végig) való visszatéréshez, hogy visszatérjen a parancs közepére.

Egyéb interaktív használatra vonatkozó tippek:

Engedélyezze a shopt -s globstar lehetőséget, így megteheti a **/*.c funkciót (rekurzív, beleértve az aktuális verziót is) dir). Néha hasznos interaktív használatra, de általában a find -name "*.c" -exec foo {} + jobb.

Ha bash szkripteket írsz, akkor hasznosnak találod, ha shopt -s extglob engedélyezve van az interaktív héjakban is. néha megtalálhatja a *.!(c|h) fájlokhoz hasonló dolgokat a nem végződő fájlokhoz. .c vagy .h. használatával.

Találja meg a ls -l, less és más egyéb tetsző szerinti álneveket nagyon. (cp -i, mv -i és rm -I kedvesek. Ne szokj hozzá attól függően, hogy tőlük szelektív rm-et csinálnak. GNU rm “s -egyszer kérek minden argust.)

Tetszik a alias m=less (m a “többre”). less beállítottam a , és a beállításokkal. az előző / következő fájlhoz kötöttem (lesskey). Az alapértelmezés egy több gombnyomással végrehajtott szekvencia, amelyet nem lehet automatikus ismétléssel használni.


Mindent szeretek csinálni a GNU képernyőn. Könnyebbnek tartom a számozott képernyő-ablakok nyomon követését, mint egy csatolmány füleket a Konsole-ban (vagy bármely más terminálemulátorban, amelyet megpróbáltam). Ha még nem tudod screen, akkor tanuld meg a tmux-ot, mert az újabb és kevésbé durva.

Ahhoz, hogy valami olyat kapj, mint egy új shell megnyitása ugyanaz a cwd, mint egy másik shell, egy egyéni horgot használok a cd / pushd / popd számára, amely lehetővé teszi számomra, hogy cds 8 -et bárhová cd-re tegyek. A héjam a 8. képernyőablakban használja. Ez még a képernyő-munkameneten kívüli héjak esetében is működik, mindaddig, amíg csak egy képernyő-munkamenet van. class = “comments”>

  • Az enyém nem úgy tűnik, hogy ‘ ” megfelelően van beállítva “. Sok itt látható parancsikon nem működik,
  • nem működik, az Ubuntu 14.04-ből használom az állományterminált. Hogyan konfigurálhatom?

  • @JorgeeFG: Azt hiszem, nekem ez a dobozból kivált gnome-terminal -vel az Ubuntu 14.04-ben, mielőtt átálltam a KDE-re. A megfelelő opció a terminál beállításaiban található, esc-prefix vs hig h-bit, és talán néhány más beállítás. Közülük némelyik nem tökéletesen működik az ssh-en keresztül. (pl. a ctrl bal / jobb oldali munge a nyíl billentyű escape kódját, és 5D szó szerint jelenik meg)
  • Válasz

    Adja hozzá a következő sorokat a ~/.inputrc

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

    Ez hasonlít az egmont válaszához, de a Page Up és Page Down helyett a Escape Up és az Arrow Down menekülési szekvenciákat használja. Ez sokkal kényelmesebb Mac gépen.

    Válasz

    Én mindig hajlamos vagyok konfigurálni a gépeimet egy nagy HISTSIZE értéket, így hosszabb előzménylistát vezet, valamint HISTTIMEFORMAT az időbélyeg értékével, Látom, mikor futott a parancs.

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

    Válasz

    Az általában használt eszközök a history parancs grep

    IE:

    history | grep <command im looking for> 

    Ez megjeleníti a beírt parancsok számozott előzményeit, amelyek tartalmazzák ezt a parancsot, majd ezt használhatja:

    !<number listed in history command> 

    a parancs újbóli elvégzéséhez.

    IE:

    history | grep history

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

    , amelyet követ: !571

    megismétli a history | grep history

    megjegyzéseket

    • CR = sokkal jobb + sokkal biztonságosabb
    • Lehet, hogy személy szerint a grepeléshez vezetett előzményeket találom a legtöbb parancs gyorsabb megtalálásának eszközeként. Ami a Biztonságot illeti, én ‘ nem vagyok biztos abban, hogy mire gondolsz, milyen kockázatok rejlenek abban, ha a történelmet olyan módon használják, hogy a cR-vel keressenek rá?
    • @ Gravy Gyanítom, hogy a PSkocik azt jelenti, hogy a ! történelempótlás kevésbé biztonságos.
    • @Gravy Az eredendő kockázatok véletlenül rossz irányba kerülnek. Fogalma sincs, miért fagyott le a terminál, hacsak nem használta a Control-S-t, és engedélyezi az xon / xoff áramlásszabályozást (gyakran az alapértelmezett). Ha igen, a Control-Q visszahozza.
    • Egyetértek a @PSkocik véleményével, a cr sokkal jobb, mert ‘ s könnyebben szerkesztheti az előzmények sorát, nem csak ugyanúgy futtatja újra. A pontosan ugyanezen parancs ismételt futtatása elenyésző eset annak, hogy mit tehet az idő megtakarításáért, ha újból beírja a variációkat a bonyolult egysorosokba, vagy egy másik fájlt tabulátorral tölt be hosszú úton. Nézze meg a válaszomat.

    Válasz

    Naponta 4 tippet használtam (és néhányat) a bash terminálomban:

    • Végrehajtja az utolsó parancsot: !!

    • Futtassa a parancsot N az előzményekből: !N

    • Az utolsó parancs nyomtatása előtag a történelemből: !prefix:p

    • Végezze el az utolsó parancsot előtag az előzményekből: !prefix

    megjegyzések

    • Úgy gondolom, hogy az N parancs az előzményekből az egyik Az eddigi legnagyobb utak ahhoz, hogy a legtöbb ember lábra lője 🙂 Csak azt mondja

    Válasz

    Ha rendben van, ha zsh -t használ a bash helyett, használhatja a oh-mi-zsh t azért.

    A felfelé és lefelé mutató nyilakkal navigálhat a parancsok történetében. Ugyanazt a navigációt teszi lehetővé, amikor már beírta a szöveget (mint a Mathlab-ban).

    edit: Oh-my-zsh egy nagy, fejlesztőorientált szoftvercsomag, amely számos egyéb funkciót tartalmaz, pl álnevek, témák, bővítmények. Ezek az extrák a terjesztést bonyolultabbá teszik, mint a billentyűparancs.

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

    Megjegyzések

    • oh-my-zsh rengeteg cuccot tartalmaz. Azt is mondhatja: Ez a pontos szolgáltatás benne van abban a disztribúcióban, amikor csak egy adott beállításra vagy alkalmazásra van szüksége.
    • Szerkesztettem a bejegyzést: Figyelmeztettem, hogy nagyobb, mint egy egyszerű alkalmazás.

    Válasz

    Adja hozzá a következő álnevet a ~ / .bashrc

    Használat: h fire kapok egy listát a fire t tartalmazó parancsokról. vagy a h ^fire segítségével megkapom a fire kezdetű parancsok listáját.

    Ez akkor hasznos, ha parancssorozatot akarok megtekinteni egyúttal.

    Egyébként a """"" csúnya, de nem találtam más módszert az egyetlen idézőjel elkerülésére.

    Megjegyzések

    • fyi – h="history | awk '{\$1=\"\"; print}' működnie kell. Alternatív megoldásként hozzon létre egy függvényt és hívja meg.
    • köszönöm DarkHeart, de kipróbáltam a kódod, azt találtam, hogy nem működik a környezetemben, talán van valami más az enyémben

    Vélemény, hozzászólás?

    Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük