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
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 kbd billentyűt >, 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
ciwha 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.
<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.<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.