Voimme navigoida ylös- ja alas-nuolilla komentohistoriassa.
Jotkut IDE: t, kuten Matlab, jos syötämme jotain ja painamme sitten nuolinäppäimiä, vieritämme vain historiakomentoja, jotka alkavat syötettävällä. Se on todella kätevää, mutta shell-päätelaitteessa tämä ei toimi.
Onko jollain tavalla mahdollista saada samanlainen toiminto shell-päätelaitteessa? Ja muita vinkkejä päätelaitteiden käytön tehostamiseksi?
Kommentit
vastaus
Etsitkö Ctrl R .
Kirjoita Ctrl R ja kirjoita sitten haluamasi komento. Bash näyttää ensimmäisen vastaavan komennon. Kirjoita Ctrl R ja bash selaa edelliset vastaavat komennot.
Jos haluat hakea taaksepäin historiasta, kirjoita Ctrl S . (Jos Ctrl S ei toimi tällä tavalla sinulle, se tarkoittaa todennäköisesti sitä, että sinun on poistettava XON / XOFF-virtauksen hallinta käytöstä: jotta voit tehdä sen, suorita stty -ixon
.)
Tämä on dokumentoitu kohdassa ”Haku” kohdassa man bash
.
Kommentit
-
Ctrl-Q
lopettaa jäädytetty tila, jos jo painatCtrl-S
sammuttamatta ensin virtauksen hallintaa ja päätelaite jäätynyt.
Vastaa
Sijoita nämä ~/.inputrc
-kansioon:
"\e[5~": history-search-backward "\e[6~": history-search-forward
Nämä tekevät Sivun ylös ja Sivu alas käyttäydy haluamallasi tavalla. (Joissakin jakeluissa se on jo määrittänyt sen puolestasi.) Pidän näitä henkilökohtaisesti mukavammina kuin Ctrl + R tai history
.
Kommentit
- Tämä on mukavin tapa kaikissa vastauksissa. Voisiko u plz antaa vähän selitys toimintamekanismista?
-
~/.inputrc
tai/etc/inputrc
tai tiedostoon, johon ympäristömuuttuja$INPUTRC
on kaikkien readlinea käyttävien sovellusten rivinmuokkausmääritystiedosto, mukaan lukien bash (komentotulkki). Sillä on tietyt sisäänrakennetut rivinmuokkausominaisuudet, mukaan lukien nämä kaksi: etsi bash ’ -sivulla manuaalisesti yksi näistä avainsanoista saadaksesi lisätietoja.\e[5~
/\e[6~
ovat paeta sekvenssit, jotka Sivu ylös / alas-näppäimet tuottavat useimmissa pääteemulaattoreissa; nähdäksesi sen, käynnistäcat
-komento ja paina sitten näitä näppäimiä (poistumistavu on terminaalissa^[
, inputrc-muodossa kuin\e
). - Alkuperäisen kysymyksesi esimerkissä sanotaan, että Ylös / Alas-näppäimet toimivat tällä tavalla Matlabissa. Olisi mielenkiintoista nähdä, mitä tapahtui, jos asetat Ylös- ja Alas-sarjat inputrc: hen ja määrität tälle toiminnolle; toimiiko se oikein vai aiheuttaako se ikäviä sivuvaikutuksia, koska se on ristiriidassa heidän oletuskäyttäytymisensä kanssa. En tiedä ’ en, en ’ ole iloinen kuullessani havainnoistasi, jos kokeilet tätä.
- Kun teen
echo $INPUTRC
, se on tyhjä. ’ m Ubuntu 14.04 -käyttöjärjestelmällä - Pidän henkilökohtaisesti mieluummin ylä- ja alanuolen ohittamista:
"\e[A": history-search-backward
ja"\e[B": history-search-forward
vastaus
^ r / ^ historian lisäksi -search:
alt . lisää edellisen komennon viimeisen ”sanan” kohdistimeen. Toista se saadaksesi viimeisen sanan vanhemmista komennoista. (Huomaa kuitenkin, että perässä oleva &
lasketaan taustakomentojen viimeiseksi sanaksi).
Tämä on erittäin kätevä mkdir foo
, cd
alt-piste. Jopa ylänuolta nopeammin, ^ a, alt-d (poista eteenpäin oleva sana), cd
.
Saadaksesi toisesta viimeiseen sanan, käytä esc
-
2
alt+.
(eli käytä emacs-tyylistä numeerista argumenttia alt+.
.Negatiivinen laskee loppupäästä, positiivinen laskee eteenpäin alusta alkaen.) Mutta tämä on yleensä enemmän vaivaa kuin sen arvoinen; jossain vaiheessa sitä on nopeammin tavoittaa hiiri ja kopioida / liittää tai ylös-nuoli ja ^ w / ^ y osa siitä (katso alla).
Jos pääte on asetettu oikein / oikein, ctrl-left ja ctrl-right siirtyvät taaksepäin / eteenpäin sanoin. Jos ei, toivottavasti ainakin alt-b ja alt-f tekevät saman.
ctrl- / on kumottu. Voit käyttää automaattista toistoa sanojen poistamiseen paljon tehokkaammin, jos voit kumota, kun ylität hiukan.
Voimakkaampi komentojen sekoittaminen / sovittaminen syntyy kill-renkaan käytöstä, joka toimii aivan kuten Emacsissa. ctrl-y liittää viimeinen ctrl-w / ctrl-u / ctrl-askelpalautin / alt-d. alt-y selaa vanhempaa tapettua tekstiä.
Useita ctrl-w tai mitä tahansa peräkkäin tekee kill-ring-merkinnästä. Käytä vasenta ja oikeaa nuolta tai jotain hajottaaksesi merkinnän, jos haluat poistaa kaksi asiaa ja liittää vain yhden myöhemmin.
Yhdistämällä kaikki nämä yhdessä voit
- ala kirjoittaa komentoa
- ctrl-r palataksesi takaisin vanhaan komentoon ja tarttumalla sen osaan control-w tai vastaavalla.
- esc-r tai
alt+r
palauttaaksesi sen tilaan, joka oli ennen osan poistamista. - alt-
>
siirtyäksesi historian loppuun (eli alaspäin osoittava nuoli koko matkan) ja palataksesi takaisin komentoon, jonka keskellä olit.
Muut vuorovaikutteisen käytön vinkit:
Ota käyttöön shopt -s globstar
, jotta voit tehdä **/*.c
(rekursiivinen, mukaan lukien nykyinen dir). Joskus kätevä interaktiiviseen käyttöön, mutta yleensä find -name "*.c" -exec foo {} +
on parempi.
Jos kirjoitat bash-komentosarjoja, sinun on kätevää olla shopt -s extglob
käytössä myös interaktiivisissa kuoreissasi. Löydät joskus käyttötarkoituksen *.!(c|h)
kaltaisille tiedostoille vastaamaan tiedostoja, jotka eivät pääty .c tai .h kanssa.
Löydä haluamasi aliakset ls -l
, less
ja muulle tekemäsi paljon. (cp -i
, mv -i
ja rm -I
ovat mukavia. Älä tapaa riippuen heidän tekevän valikoivan rm: n. GNU rm ”s -Pyydän kerran kaikki argit.)
Pidän alias m=less
(m merkille ”enemmän”). less
on määritetty , ja . sidottu edelliseen / seuraavaan tiedostoon (lesskey
). Oletusarvo on usean näppäimen painallusjakso, jota ei voi käyttää automaattisen toistamisen kanssa.
Haluan tehdä kaiken GNU-näytössä. Minusta on helpompaa seurata numeroituja näyttöikkunoita kuin veneiden määrä välilehtiä Konsolessa (tai missä tahansa muussa päätelaitteessa, jota olen kokeillut). Jos et vielä tiedä screen
, opi tmux, koska se on uudempi ja vähemmän raakaa.
Jos haluat saada aikaan jotain, kuten uuden kuoren avaaminen sama cwd kuin toinen kuori, käytän mukautettua koukkua cd / pushd / popd: lle, jonka avulla voin tehdä cds 8
cd: ksi mihin tahansa dir shellin käyttö ruutuikkunassa 8 on käytössä. Tämä toimii myös kuorien kanssa ruudun istunnon ulkopuolella, kunhan vain yksi ruudun istunto on.
Kommentit
- Minun ei näytä olevan ’ ” oikein määritetty ”. Monet näkemistäni pikanäppäimistä eivät toimi ’, mutta käytän Ubuntu 14.04: n osaketerminaalia. Kuinka voin määrittää sen?
- @JorgeeFG: Luulen, että se toimi minulle alusta
gnome-terminal
Ubuntu 14.04: ssä, ennen kuin vaihdoin KDE: hen. Asiaankuuluva vaihtoehto on päätelaitteen asetuksissa, esc-etuliite vs hig h-bit, ja ehkä joitain muita asetuksia. Jotkut heistä eivät toimi
t minulle täydellisesti ssh: n kautta. (esim. ctrl vasemmalle / oikealle munge nuolinäppäimen pakokoodi, ja saan5D
kirjaimellisesti)
vastaus
Lisää seuraavat rivit ~/.inputrc
"\e[A": history-search-backward "\e[B": history-search-forward
Tämä on samanlainen kuin egmontin vastaus, mutta sen sijaan, että käytettäisi Sivu ylös ja Sivu alas, se käyttää pakosarjoja Nuoli ylös ja Nuoli alas. Tätä tapaa on paljon helpompi käyttää Macissa.
vastaus
Minulla on tapana konfiguroida koneeni aina suurella HISTSIZE -arvo, joten se pitää pidempää historialuetteloa sekä HISTTIMEFORMAT ja aikaleiman arvo niin Näen, milloin komento suoritettiin.
export HISTSIZE=10000 export HISTTIMEFORMAT="%m/%d/%Y %T "
vastaus
Tarkoitan tavallisesti yhdistää history
-komento grep
IE:
history | grep <command im looking for>
Se näyttää kirjoittamiesi komentojen numeroidun historian, joka sisältää kyseisen komennon. Voit sitten käyttää tätä:
!<number listed in history command>
toistaaksesi komennon.
IE:
history | grep history
142 history 143 history | grep lvresize 568 history | grep echo 570 history | grep echo 571 history | grep history
ja sen jälkeen: !571
toistaa history | grep history
kommentit
- CR = paljon parempi + paljon turvallisempi
- Ehkä, Henkilökohtaisesti mielestäni grepiin ladattu historia on nopeampi tapa löytää useimmat komennot. Turvallisemman suhteen en ’ ole varma, mitä tarkoitat, mitkä ovat riskit historian käytössä, kun sitä käytetään hakemiseen sen kautta cR: llä?
- @ Kastike Epäilen, että PSkocik tarkoittaa, että
!
historian korvaaminen on vähemmän turvallista. - @Gravy Luontaiset riskit olisivat vahingossa väärän linjan saaminen. Ei ole aavistustakaan, miksi päätelaite on jäätynyt, ellet ole käyttänyt Control-S: ää ja xon / xoff-virtauksen hallinta on käytössä (usein oletus). Jos on, Control-Q tuo sen takaisin.
- Olen samaa mieltä @PSkocikin kanssa, cr on paljon parempi, koska se ’ s historiarivin muokkaaminen on helpompaa kuin vain suorittaa se samalla tavalla. Aivan saman komennon suorittaminen uudelleen on vähäpätöinen tapa, jolla voit säästää aikaa kirjoittamalla muunnelmia monimutkaisille yhden rivin linjoille tai täydentämällä eri tiedoston sarkainta pitkällä polulla. Katso vastaukseni.
Vastaa
Käytin päivittäin 4 vinkkiä (ja joitain muita) bash-pääteessäni:
-
Suorita viimeinen komento:
!!
-
Suorita komento N historiasta:
!N
-
Tulosta viimeinen komento, joka alkaa etuliite historiasta:
!prefix:p
-
Suorita viimeinen komento, joka alkaa etuliite historiasta:
!prefix
kommentit
- Luulen, että historian komennon N käyttö on yksi kaikkien aikojen suurimmat polut ampua itsesi jalkaan useimmille ihmisille 🙂 Pelkkä sanominen
Vastaa
Jos Voit käyttää zsh
bash
-tilan sijaan. Voit käyttää oh-mi-zsh sen vuoksi.
Voit selata komentohistoriaa ylös- ja alas-nuolilla. Se sallii myös saman navigoinnin, kun olet jo kirjoittanut tekstin (kuten Mathlabissa).
edit: Oh-my-zsh on suuri, kehittäjälähtöinen ohjelmistopaketti, joka sisältää monia muita ominaisuuksia, esim aliakset, teemat, laajennukset. Nämä lisäominaisuudet tekevät jakelusta monimutkaisemman käyttää kuin pikanäppäin.
https://github.com/robbyrussell/oh-my-zsh
Kommentit
-
oh-my-zsh
sisältää tonnia tavaraa. Voit myös sanoa: Tämä tarkka ominaisuus sisältyy kyseiseen jakeluun, kun tarvitset vain tietyn asetuksen tai sovelluksen. - Muokatin viestiä: Varoitin, että se on isompi kuin yksinkertainen sovellus.
vastaus
Lisää seuraava alias kohteeseen ~ / .bashrc
alias h="history | awk """""{$1="";print}""""" |sed "s/^ *//" |grep -v "^h " | sort | uniq | grep"
Käyttö: h fire
saa luettelon komennoista, jotka sisältävät tulipalon . tai h ^fire
saa minulle luettelon komennoista, jotka alkavat tulella .
Tästä on hyötyä, kun haluan tarkastella komentosarjaa samaan aikaan.
Muuten, """""
on ruma, mutta en voinut löytää muita tapoja välttää yksittäisiä lainauksia yksittäisissä lainauksissa.
Kommentit
- fyi –
h="history | awk '{\$1=\"\"; print}'
pitäisi toimia. vaihtoehtoisesti luoda funktio ja kutsua se. - kiitos DarkHeart, mutta yritin koodiasi, ei löytänyt toimivan ympäristössäni, ehkä minun omassani on jotain erilaista
fish
😉\e[5~
ja\e[6~
sijasta\e[A
,\e[B
.