Az előzmények keresésének futtatása Vi módban a bash

A ctrl + R alternatíváját szeretném megtalálni a bash keresési előzményei között. Engedélyezhetem a vi módot a bash-ban, de nem tudom keresésre késztetni. Amikor /search vagy ?search tennék, semmi sem történik. Van még valami, amit meg kell nyomnom? Megpróbáltam megnyomni az Enter billentyűt, és ez megtörténik:

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

Megjegyzések

  • Is <C-r> valóban nem működik az Ön számára a readline vi-módban? Számomra jól működik a bash legújabb verziójával.
  • @ D.BenKnoble Igen, igen, de szerintem a <C-r> emacs mód, és szeretnék megtanulni vi mód.
  • <C-r> csak rekurzív keresés; nem biztos, hogy köze van az emacs vs vi-hez, főleg, hogy ez egy bash-specifikus kiterjesztés lehet (a memóriám homályos ezen a részen). Nem vonom vissza a / használatától, csak azért, mert mindegyiknek megvan a (különböző) felhasználása.

Válasz

Bizonyára van Vim stílus keresés a bash / readline-ban. Valójában a parancssor lényegében a Vim szerkesztő kicsinyített változata, amely jelentős számú Normál módú parancsot áll rendelkezésre. Bővebben erről egy másodperces, de első keresés során. A legfontosabb információ, amire szüksége van, hogy amint a parancssorának villogó kurzorát bámulja, akkor a Vim Beszúrás módjának megfelelője van. Hogyan juthatunk el Normál módba? Ha lenyomja az Esc , természetesen.

Innen nyomja meg a / gombot, írja be a keresett kifejezést, majd nyomja meg az Enter gombot. Most használhatja a n és N az eredmények előre-hátra való mozgatásához. (Alapértelmezés szerint a n gombbal visszafelé kereshet ... ... előre keresve nem adna eredményt, mivel a jövőben nincsenek előzmények!) Az aktuális eredmény végrehajtásához parancsként nyomja meg az Enter Enter parancsot.

Ne felejtsd el, hogy te " Normál módban van, tehát ha nem találja meg azt, amit keres, és vissza szeretne térni a szövegbevitelhez Beszúrás módban, akkor tegye azt, amit általában a Vim-ben. Például az i lenyomása meg fogja tenni. Vagy használhatja a Vim parancsot C, amely eltávolítja a kurzor után minden szöveget, és belép a Beszúrás módba, ami hasznos. (Ezt megelőzheti 0 paranccsal, ha áthelyezte a kurzort az első oszlop mellé.) Vagy használja a A, a, R, s, s, I, Ctrl-C ... megkapja a képet.

A Beillesztés módba lépő különféle parancsok mellett a b, B, e, E , w, W, 0, $ stb. Yank / delete / put is vannak, és ezeket műveletben + navigációs parancsokban is használhatja, például yB, c2e, d$ stb. 1 Végül a u ndo is működik! Menj, próbáld ki magad más dolgokkal.

Ja, és ha kissé eltévedsz, vagy ahogy velem egyszer-egyszer előfordul, a vonalvezetés némi funkcionalitása összekeveri a c / l-t, akkor eldobhatod a színlelést, és lenyomhatod az v. Ez behúzza a parancssor tartalmát a Vim tényleges példányába, így szerkesztheti a Teljesen élesített és működőképes szövegszerkesztővel . Ha elkészült, :wq küldje be a héjba a végrehajtáshoz a szükséges dolgokat.

1 Jaj, az operátor + a mozgásparancsok (caw, dis, yap stb.) nem támogatottak. De @EdNeville "alábbi megjegyzés linket mutat néhány olvasási sor beállításához , amely látszólag hozzáadódik minden op-motion parancs létezik, valamint számos más is. A parancssori alapú Vim-élményt úgy egészítheti ki, hogy hozzáadja őket az .inputrc fájlhoz.


További információ : Ön nem korlátozódik arra, hogy csak set -o vi vagy set -o emacs ad. Használhatja az elérhető readline parancsok bármelyikét. Úgy gondolom, hogy a Ctrl-R -nek még Vim módban is elérhetőnek kell lennie, de ha nem, akkor megpróbálhatja ezt beírva a ~/.inputrc ...

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

Még jobb, ha hozzáad néhány amúgy nem elérhető parancsot, például

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

Ezzel, ha kiválasztott egy parancsot az előzményekből (pl.a Vim keresésen keresztül) nyomja meg az Ctrl-O elemet a Enter helyett, és a Bash futtatja a parancsot, és beszúrja a következő parancsot az előzményekből, futtatásra készen.

A teljes listát lásd a Bash kézikönyv Parancsnevek olvasása szakaszában.

(Ezeket a parancssorból is konfigurálhatja a bind parancs, de itt már túl messze vagyok.)

Megjegyzések

  • Szép. Tanulási pillanat.
  • @niklas, ez a válaszod
  • @glennjackman Ezt a funkciót nagyon kihasználom. Nagyon hasznos számomra.
  • @NiklasRosencrantz Igen, megértettem. Mi próbáljon olyan válaszokat írni, amelyek általában hasznosak, nem pedig kizárólag a kérdezőre összpontosítanak, ezért hozzáadtam a különféle módok különböző parancsainak keverésével kapcsolatos további információkat.
  • Hozzáadhat például ciw ha módosítja az .inputrc fájlt: usenix.org.uk/content/bash.html#input

Válasz

amit a @ B-Layer említett, elég jól működik a bash-ban és hasonlóan a zsh-ben.

Mivel már használod a VIM-et , és ha a neovim vagy a vim8 fájlt használja, akkor kipróbálhatja a :terminal alkalmazást is, amely megnyitja az alapértelmezett terminált a vim fájlban.

Ezután a vim paranccsal navigálhat a terminál kimenetén, valamint a terminálparancsok történetében is.

Ref.

  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

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