( Raynes | 2021. 08. 01., v – 23:02 )

Visszaváltottam zsh-ról Bash-ra. Idegesített, hogy idézőjelezni kell a parancsokban az URL-eket, meg nem működött az LS_COLORS se! Plusz a Bash soványabb, mint a zsh és normálisan használja a readline-t, utóbbi nagy segítség sok terminálos programnál, főleg interpretereknél, pl. bc, calc, python, stb., amiket terminálos számológépként és matekprogramként használok. Ezekbe sokkal gyorsabb számítást, komplett műveletsort beverni gépírva, billentyűzetről, mint a GUI-s számológépekben szerencsétlenkedni.

Ha valakit érdekel, a fenti fzf-es Ctrl-R historykeresés Bash alatt így néz ki a ~/.bashrc fájlban:

bash-history-widget() {
  output=$(fc -lr 1 $HISTSIZE | fzf | awk -F '\t' '{ print $2}')
  if [ -n "$output" ]; then
    READLINE_LINE=${output/# /}
    READLINE_POINT=0x7fffffff
  fi
}

bind -m vi-command -x '"\C-r": bash-history-widget'
bind -m vi-insert -x '"\C-r": bash-history-widget'

Lényegében ugyanúgy működik, az fc parancs kilistázza az egész history-t, sorszámokkal és parancsokkal, sajnos a sorszámokat mindenképp beleteszi. Az fzf ebből a listából választ, majd az awk levágja a sorszámot. Ha a kimenet nem üres, azaz a user választott valamit, akkor readline-nak átadjuk az fzf kimenetét, persze az elejére valami miatt betesz egy szóközt, ezt a /# / résszel lecseréljük a nagy semmire. A readline point-os rész meg arra való, hogy a kurzort odapozicionáljuk a history-ból előhívott parancs legvégére, a -1 értéknek felel meg, csak ilyen haxadecimális, túlcsordulásos érték. Ami eltérés van a zsh-s megoldáshoz képest, hogy Bash alatt nem a zle, hanem readline intézi ugyanezeket, változók módosítását igényli, meg van benne ez a beszúrok az elejére egy üres szóközt című furcsaság, amit vissza kell csinálni. Ezt leszámítva jól működik, ugyanolyan jól, mint zsh alatt. Egyébként amit zsh-ban be lehet lőni, parancsszínezés, kiegészítés, stb., azokat Bashban és readline-ban, ~/.inputrc-ben is be lehet ugyanúgy állítani, kb. 99%-os egyezésre, viselkedésűre. Ha valaki nem használ vi-módot, akkor emacs-standard paraméterrel kell beállítani a bind-et.

Elvileg ezt az fzf-es keresést az fzf beteszi telepítéskor kicsit más formában, de csak akkor, ha valaki az fzf git tárolójából telepíti. Ha a disztró tárolójából teszi fel az ember, akkor a .bashrc, meg a .zshrc kézi szerkesztést igényel, ehhez kellenek a fentebb közzétett kódrészek.