2020年07月12日

bash的shell history和editing mode

经常需要在shell中查询命令历史。因为习惯vim的键绑定,所以在bash里进去就直接 set -o vi ,default editing mode 切换成vi mode了。bash默认是 emacs mode

shell history和editing mode(vi or emacs)

emacs mode的问题是,从history中查到命令后,回车就执行,这样太容易误操作了。

vi mode可以用 C-r C-s,还用什么emacs mode啊。

C-s问题

stty -ixon

UNIX tty(terminal)层的配置。UNIX沉重历史包袱的体现之一,大量黑科技的一个子系统。

stty -FOO 命令是禁用当前tty的FOO功能。这里就是禁用 ixon 。可以用 stty -a 查看tty的当前设置。

什么是ixon呢?即 XON/XOFF flow control=,鲜为人知的终端功能之一 —— 按下 =Ctrl-s ,你会发现屏幕上不再显示你打的字了,再按 Ctrl-q ,你会发现你刚才打的字母一股脑突然都出现了。可以理解为终端的一个“缓冲区”,可以把一系列击键暂时保存起来,然后连续击发。现在很少有需要这个功能的情景了。这里是因为你定义的快捷键里包含了 Ctrl-s ,所以……

参考 https://blog.nelhage.com/2009/12/a-brief-introduction-to-termios/

linux

C-ascreen 的快捷键有冲突,用emacs风格的话,没法用screen。改screen的快捷键用着不习惯。

dsm

群晖的shell(busybox ash)只有emacs模式,set -o vi 无效。唉,搞这么难用的shell干什么?

参考 openwrt https://forum.openwrt.org/t/how-to-enable-up-down-arrow-keys-completion-history-for-ash-shell/54326/14

华硕官版固件

shell只有emacs模式,set -o vi 无效。

梅林固件

shell只有emacs模式,set -o vi 无效。

参考