Kuinka historiahaku suoritetaan Vi-tilassa bashissa

Haluan löytää vaihtoehdon ctrl + R hakuhistorialle bashissa. Voin ottaa käyttöön vi-tilan bashissa, mutta en voi tehdä siitä hakua. Kun teen /search tai ?search, mitään ei tapahdu. Onko jotain muuta mitä minun pitäisi painaa? Yritin painaa Enter ja sitten se tapahtuu:

$ set -o vi $ ls|grep f $ /gr -bash: /gr: No such file or directory $ 

Kommentit

  • Onko <C-r> ei todellakaan toimi sinulle lukuviivan vi-tilassa? Se toimii minulle hyvin viimeisimmällä versiolla bashista.
  • @ D.BenKnoble Kyllä se on, mutta mielestäni <C-r> on emacs-tila ja haluan oppia vi-tila.
  • <C-r> on vain rekursiivinen haku; ei ole varma, että sillä on mitään tekemistä emacs vs vi: n kanssa, varsinkin kun se voi olla bash-spesifinen laajennus (muistini on epäselvä tästä yksityiskohdasta). En estä sinua käyttämästä /, vain että jokaisella on (eri) käyttötarkoituksensa.

Vastaa

Vim-tyylin haku on varmasti bash / readline. Itse asiassa komentorivisi on olennaisesti pienennetty versio Vim-editorista, ja käytettävissäsi on huomattava määrä Normal-tilan komentoja. Lisää siitä sekunnissa, mutta ensimmäinen haku. Keskeinen tarvitsemasi tieto on, että kun tuijotat vilkkuvaa kohdistinta komentorivilläsi, olet vastaava kuin Vim: n lisäystila. Kuinka pääsemme normaalitilaan? Lyömällä Esc tietysti.

Sieltä paina / , kirjoita hakutermi ja paina Enter . Nyt voit käyttää n ja N siirtyäksesi edestakaisin tulosten läpi. (Olet todennäköisesti etsimässä taaksepäin oletusarvoisesti n … etsimällä eteenpäin alusta alkaen ei antaisi tuloksia, koska tulevaisuudessa ei ole historiaa!) Nykyisen tuloksen suorittaminen komennona paina Enter uudelleen.

Älä unohda, että sinä ” olet kuitenkin normaalitilassa, joten jos et löydä etsimääsi ja haluat palata tekstin syöttämiseen lisäystilassa, tee se, mitä yleensä teet Vimissä. Esimerkiksi painamalla i , se tehdään. Tai voit käyttää Vim-komentoa C, joka poistaa kaikki tekstit kohdistimen jälkeen ja siirtyvät lisäystilaan, mikä on kätevää. (Voit edetä sen kohdalla 0, jos siirrit kohdistimen ensimmäisen sarakkeen ohi.) Tai käytä A, a, R, s, s, I, Ctrl-C … saat kuvan.

Saapuvien lisäystilaan siirtyvien komentojen lisäksi voit navigoida b, B, e, E , w, W, 0, $yB, c2e, d$ jne. 1 Lopuksi u ndo toimii myös! Kokeile itse jotain muuta.

Voi, ja jos eksyt hiukan tai, kuten minulle sattuu silloin tällöin, jonkin verran funktiota rivin käärimisen kanssa sekoittaa sinun c / l, voit pudottaa teeskentelyn ja painaa v. Tämä vetää komentorivisi sisällön Vim: n todelliseen esiintymään, jotta voit muokata sitä Täysin aseistetulla ja toiminnallisella tekstieditorilla . Kun olet valmis, :wq lähetä omasi kuoreen suoritettavaksi.

1 Valitettavasti operaattori + liikekomentoja (caw, dis, yap jne.) ei tueta. Mutta @EdNeville ”alla olevassa kommentissa on linkki joihinkin readline-asetuksiin , jotka lisäävät näennäisesti jokainen siellä oleva op-motion -komento on sekä joukko muita. Voit todella täydentää komentorivipohjaista Vim-kokemustasi lisäämällä ne .inputrc-tiedostoosi.


Lisätietoja : Et ole rajoitettu käyttämään vain sitä, mitä set -o vi tai set -o emacs antaa sinulle. Voit käyttää mitä tahansa käytettävissä olevista readline-komennoista. Mielestäni Ctrl-R pitäisi olla käytettävissä myös Vim-tilassa, mutta jos ei, voit yrittää lisäämällä tämä ~/.inputrc -kansioon …

set editing-mode vi "\C-r": reverse-search-history "\C-s": forward-search-history 

Parempi vielä voit lisätä joitain muuten käytettävissä olevia komentoja, kuten

"\C-o": operate-and-get-next 

Tämän jälkeen kun olet valinnut komennon historiasta (esim.Vim-haun kautta) osuma Ctrl-O Enter -kohdan sijaan, ja Bash suorittaa komennon ja lisää seuraavan komennon historiasta, valmis suoritettavaksi.

Katso täydellinen luettelo Bash-sivun Readline-komentojen nimet -osiosta.

(Voit määrittää ne myös komentoriviltä bind -komento, mutta olen jo tulossa liian kauas täältä.)

Kommentit

  • Hienoa. Oppimishetki.
  • @niklas, tämä on vastauksesi
  • @glennjackman Käytän voimakkaasti tätä toimintoa. Todella hyödyllinen minulle.
  • @NiklasRosencrantz Jep, ymmärsin. yritä kirjoittaa vastauksia, jotka ovat yleensä hyödyllisiä eikä keskittynyt yksinomaan kyselyyn, joten lisäsin lisätietoa eri tilojen komentojen sekoittamisesta.
  • Voit myös lisätä esimerkiksi ciw Jos muokkaat .inputrc: usenix.org.uk/content/bash.html#input

Vastaus

mitä @ B-Layer mainitsi, toimii melko hyvin bashissa ja vastaavasti zsh: ssä.

Koska käytät jo VIM: ää ja jos käytät neovim tai vim8, voit myös kokeilla :terminal, joka avaa oletuspäätteen hakemistossa vim.

Sitten voit käyttää vim-komentoa navigoidaksesi terminaalin lähdössä sekä navigoidaksesi päätelaitteen komentojen historiassa.

Viite

  1. http://vimcasts.org/episodes/neovim-terminal/
  2. https://neovim.io/doc/user/nvim_terminal_emulator.html
  3. https://github.com/vim/vim/blob/master/runtime/doc/terminal.txt

Vastaa

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *