Chci najít alternativu k ctrl + R pro hledání historie v bash. Mohu povolit režim vi v bash, ale nemohu ho vyhledávat. Když udělám /search
nebo ?search
nic se neděje. Je něco víc, co bych měl stisknout? Zkusil jsem stisknout klávesu Enter a pak se to stalo:
$ set -o vi $ ls|grep f $ /gr -bash: /gr: No such file or directory $
Komentáře
Odpovědět
Určitě existuje vyhledávání stylů Vim v bash / readline. Ve skutečnosti je váš příkazový řádek v podstatě zmenšenou verzí editoru Vim se značným počtem příkazů v normálním režimu, které máte k dispozici. Více o tom za sekundu, ale nejdříve Hledat. Klíčovou informací, kterou potřebujete, je to, že když se díváte na blikající kurzor na příkazovém řádku, jste v ekvivalentu režimu Vimova vložení. Jak se tedy dostaneme do normálního režimu? Stisknutím klávesy Esc , samozřejmě.
Odtud stiskněte / , zadejte hledaný výraz a stiskněte Enter . Nyní můžete použít n a N pro pohyb tam a zpět ve výsledcích. (Ve výchozím nastavení budete efektivně hledat vzad a n
… hledat vpřed od začátku nedal bych žádné výsledky, protože v budoucnu nebude žádná historie!) Chcete-li provést aktuální výsledek jako příkaz, stiskněte Enter znovu.
Nezapomeňte, že vy “ jste v normálním režimu, takže pokud nenajdete, co hledáte, a chcete se vrátit k zadávání textu v režimu Vložit, udělejte to, co obvykle děláte ve Vimu. Například stisknutí klávesy i to udělá. Nebo můžete použít příkaz Vim C
, který odstraní veškerý text za kurzorem a vstoupí do režimu Vložit, což je užitečné. (Tomu můžete předcházet 0
, pokud jste kurzor přesunuli za první sloupec.) Nebo použijte A
, a
, R
, s
, s
, I
, Ctrl-C
… získáte obrázek.
Kromě různých příkazů, které vstupují do režimu Vložit, můžete procházet pomocí b
, B
, e
, E
, w
, W
, 0
, $
atd. Jsou tam také Yank / delete / put a můžete je v nich použít v akci + navigační příkazy jako yB
, c2e
, d$
atd. 1 Nakonec u
ndo funguje také! Jděte do toho a vyzkoušejte některé další věci sami.
Ach, a pokud se trochu ztratíte, nebo, jak se mi občas stane, nějaká funkčnost se zalamováním řádků zakóduje vaše c / l, můžete odhodit předstírání a stisknout v
. Tím se obsah vašeho příkazového řádku vtáhne do skutečné instance Vim, takže jej můžete upravovat pomocí plně ozbrojeného a provozního textového editoru . Po dokončení :wq
odešlete do shellu to, co máte k provedení.
1 Bohužel, operátor + pohybové příkazy (caw
, dis
, yap
atd.) nejsou podporovány. Ale @EdNeville níže uvedený komentář obsahuje odkaz na některá nastavení readline , která zdánlivě přidá každý příkaz op-motion existuje stejně jako řada dalších. Svůj zážitek z Vim založené na příkazovém řádku můžete opravdu zaokrouhlit přidáním do souboru .inputrc.
Další informace : Nejste omezeni na používání toho, co set -o vi
nebo set -o emacs
vám dává. Můžete použít kterýkoli z dostupných příkazů readline. Věřím, že Ctrl-R
by měl být k dispozici i v režimu Vim, ale pokud ne, můžete to zkusit vložením do ~/.inputrc
…
set editing-mode vi "\C-r": reverse-search-history "\C-s": forward-search-history
Ještě lépe, můžete přidat některé jinak nedostupné příkazy jako
"\C-o": operate-and-get-next
Tímto způsobem, jakmile vyberete příkaz z historie (např.pomocí vyhledávání Vim) stiskněte Ctrl-O
místo Enter
a Bash spustí příkaz a vloží další příkaz z historie, připravený ke spuštění.
Úplný seznam najdete v části Názvy příkazových řádků pro čtení na stránce Bash.
(Můžete je také nakonfigurovat z příkazového řádku pomocí bind
příkaz, ale už se sem dostávám příliš daleko.)
Komentáře
- Pěkné. Učební moment.
- @niklas, toto je vaše odpověď
- @glennjackman Tuto funkci velmi využívám. Opravdu užitečné pro mě.
- @NiklasRosencrantz Ano, rozuměl jsem. zkuste napsat odpovědi, které jsou obecně užitečné, nikoli pouze zaměřené na tazatele, a tak jsem přidal další informace o míchání příkazů z různých režimů.
- Můžete také přidat věci jako
ciw
pokud upravíte .inputrc: usenix.org.uk/content/bash.html#input
Odpověď
to, co zmínila @ B-Layer, funguje docela dobře v bash a podobně v zsh.
Protože již používáte VIM , a pokud používáte neovim
nebo vim8
, můžete také vyzkoušet :terminal
, které otevře výchozí terminál v vim
.
Potom můžete pomocí příkazu vim procházet výstup terminálu a procházet historii příkazů terminálu.
Ref.
<C-r>
opravdu pro vás nefunguje v režimu vi pro readline? Funguje mi dobře s nejnovější verzí bash.<C-r>
je režim emacs a já se chci naučit režim vi.<C-r>
je pouze rekurzivní vyhledávání; nejste si jisti, že to má něco společného s emacs vs vi, zejména proto, že by to mohlo být rozšíření specifické pro bash (moje paměť je na tomto detailu fuzzy). Nedoporučuji vám používat/
, jen každý z nich má své (jiné) využití.