ctrl+rで進みすぎたとき反対向きに進むにはctrl+s
問題
bashで、コマンド履歴から検索(Ctrl+R)して実行できる機能はとても便利なのでよく使うのですが、
Ctrl+R, R, R … して、Rを押しすぎて、あ!通り過ぎた!というときは、Ctrl+Cでいったん終わって、また最初からやり直すしかないですか?
逆向きに戻る方法ないですか?
答え
CTRL+R(reverse-i-search)の逆は、
CTRL+S(i-search)。
ただ、通常 CTRL+S は端末ロック(stop)に割り当てられている。
端末ロック解除(start)は CTRL+Q
割り当てを変えれば、CTRL+Sでi-searchできる。
自分用なら ~/.bashrc、全ユーザに適用でよければ /etc/bashrc に以下を追記するとよい。
stty stop undef stty start undef
メモ
現在の割り当ての設定の確認方法。
# stty -a speed 38400 baud; rows 24; columns 80; line = 0; intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol =; eol2 = ; swtch = ; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R; werase = ^W; lnext = ^V; flush = ^O; min = 1; time = 0; -parenb -parodd cs8 -hupcl -cstopb cread -clocal -crtscts -cdtrdsr -ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr icrnl ixon -ixoff -iuclc -ixany -imaxbel -iutf8 opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0 isig icanon iexten echo echoe echok -echonl -noflsh -xcase -tostop -echoprt echoctl echoke
# stty -a speed 38400 baud; rows 24; columns 80; line = 0; intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol =; eol2 = ; swtch = ; start = ; stop = ; susp = ^Z; rprnt = ^R; werase = ^W; lnext = ^V; flush = ^O; min = 1; time = 0; -parenb -parodd cs8 -hupcl -cstopb cread -clocal -crtscts -ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr icrnl ixon -ixoff -iuclc -ixany -imaxbel -iutf8 opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0 isig icanon iexten echo echoe echok -echonl -noflsh -xcase -tostop -echoprt echoctl echoke
コメント