SOFTELメモ

Softel Inc.

ctrl+rで進みすぎたとき反対向きに進むにはctrl+s

問題

bashで、コマンド履歴から検索(Ctrl+R)して実行できる機能はとても便利なのでよく使うのですが、

Ctrl+R, R, R … して、Rを押しすぎて、あ!通り過ぎた!というときは、Ctrl+Cでいったん終わって、また最初からやり直すしかないですか?

逆向きに戻る方法ないですか?

ctrl+r

答え

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

関連するメモ

コメント