Jeg vil finne alternativet til ctrl + R for å søke historie i bash. Jeg kan aktivere vi-modus i bash, men jeg kan ikke få det til å søke. Når jeg gjør /search
eller ?search
skjer ingenting. Er det noe mer jeg burde trykke på? Jeg prøvde å trykke på enter og så skjer dette:
$ set -o vi $ ls|grep f $ /gr -bash: /gr: No such file or directory $
Kommentarer
Svar
Det er absolutt Vim-stil som søker i bash / readline. Faktisk er kommandolinjen din i hovedsak en nedskalert versjon av Vim-editoren med et betydelig antall kommandoer i Normalmodus tilgjengelig. Mer om det på et sekund, men først Søk. Nøkkelen informasjon du trenger er at når du stirrer på den blinkende markøren på kommandolinjen din, er du i tilsvarer Vims Insert-modus. Så hvordan kommer vi til Normal-modus? Ved å trykke Esc , selvfølgelig.
Derfra trykk / , skriv inn et søkeord og trykk Enter . Nå kan du bruke n og N for å gå frem og tilbake gjennom resultatene. (Du søker effektivt bakover som standard med n
… søker fremover fra starten ville ikke gi noen resultater siden det ikke er noen historie i fremtiden!) For å utføre gjeldende resultat som en kommando, trykk Enter igjen.
Ikke glem at du » er i Normal-modus, skjønt, så hvis du ikke finner det du leter etter, og vil komme tilbake til å skrive inn tekst i Sett inn-modus, gjør det du vanligvis gjør i Vim. Å treffe i , for eksempel, vil gjøre det. Eller du kan bruke Vim-kommandoen C
som fjerner tekst etter markøren og går inn i Sett inn-modus, noe som er praktisk. (Du kan gå foran 0
hvis du flyttet markøren forbi den første kolonnen.) Eller bruk A
, a
, R
, s
, s
, I
, Ctrl-C
… du får bildet.
Foruten de forskjellige kommandoene som går inn i Insert-modus kan du navigere med b
, B
, e
, E
, w
, W
, 0
, $
osv. Yank / delete / put er også der, og du kan bruke dem i dem i handling + navigasjonskommandoer som yB
, c2e
, d$
osv. 1 Endelig fungerer u
ndo også! Prøv å prøve noen andre ting selv.
Åh, og hvis du blir litt tapt eller, som det hender meg en gang i blant, noe funkiness med linjebryting krypterer c / l, kan du slippe pretensen og trykke v
. Dette trekker kommandolinjens innhold til en faktisk forekomst av Vim, slik at du kan redigere med en Fullt bevæpnet og operativ tekstredigerer Når du er ferdig, :wq
for å sende inn det du har til skallet for utføring.
1 Alas, operatøren + bevegelseskommandoer (caw
, dis
, yap
osv.) støttes ikke. Men @EdNeville «s kommentar nedenfor har en lenke til noen innstillinger for readline som tilsynelatende vil legge til hver op-motion-kommando der er i tillegg til en rekke andre. Du kan virkelig avrunde kommandolinjebasert Vim-opplevelse ved å legge dem til .inputrc-filen.
Tilleggsinformasjon : Du er ikke begrenset til å bruke akkurat det set -o vi
eller set -o emacs
gir deg. Du kan bruke hvilken som helst av de tilgjengelige readline-kommandoene. Jeg mener Ctrl-R
burde være tilgjengelig selv i Vim-modus, men hvis ikke, kan du prøve sette dette i ~/.inputrc
…
set editing-mode vi "\C-r": reverse-search-history "\C-s": forward-search-history
Enda bedre, du kan legge til noen ellers utilgjengelige kommandoer som
"\C-o": operate-and-get-next
Med dette, når du har valgt en kommando fra historikken (f.eks.via Vim-søk) trykk Ctrl-O
i stedet for Enter
og Bash vil kjøre kommandoen og sette inn neste kommando fra historikken, klar til å kjøre.
Se Readline Command Names delen i Bash manpage for fullstendig liste.
(Du kan også konfigurere disse fra kommandolinjen med bind
kommando, men jeg kommer allerede for langt her.)
Kommentarer
- Hyggelig. Et læringsøyeblikk.
- @niklas, dette er svaret ditt
- @glennjackman Jeg bruker mye av denne funksjonaliteten. Virkelig nyttig for meg.
- @NiklasRosencrantz Jepp, jeg forsto. Vi prøv å skrive svar som generelt er nyttige i stedet for å bare fokusere på spørgeren, så jeg la til ekstra informasjon om blandingskommandoer fra forskjellige moduser.
- Du kan også legge til ting som
ciw
hvis du endrer .inputrc: usenix.org.uk/content/bash.html#input
Svar
hva @ B-Layer nevnt fungerer ganske bra i bash og lignende i zsh.
Siden du allerede bruker VIM , og hvis du bruker neovim
eller vim8
, kan du også prøve :terminal
åpner standardterminalen i vim
.
Deretter kan du bruke vim-kommandoen til å navigere i utgangen av terminalen, samt navigere i historikken til terminalkommandoene.
Ref.
<C-r>
virkelig ikke fungerer for deg i vi-modus for readline? Det fungerer bra for meg med den nyeste versjonen av bash.<C-r>
er emacs-modus og jeg vil lære vi-modus.<C-r>
er bare rekursivt søk; ikke sikker på at det har noe å gjøre med emacs vs vi, spesielt da det kan være en bash-spesifikk utvidelse (minnet mitt er uklart på den detaljene). Jeg fraråder deg ikke å bruke/
, bare at hver har sine (forskjellige) bruksområder.