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
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.
<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.