题图:Rocky自画BASH快捷键导图
上一篇《BASH命令行快捷键指南(一)》中列举了BASH下常用的快捷键,但是难免还会有很多其它的问题,导致一段时间过后还是不能很好掌握这些快捷键。
以下是BASH命令行快捷键相关的几个技巧:
1. 设置Meta键
我在网上搜了很多关于BASH快捷键的文章,很少会提到BASH有emacs和vi两种模式,也很少有提到emacs模式下的Meta键。大部分都默认将ALT键当做Meta键了,导致我尝试使用ALT的组合键时,根本不起作用。原来这个ALT键时需要设置才能作为Meta键的。
关于如何设置Meta键,请戳“阅读原文”查看上一篇文章《BASH命令行快捷键指南》的第2节。
2. 禁用上下左右方向箭头
我自己最常见的情况就是快捷键太多记不住,有时又懒得去查找应该是哪个快捷键,干脆就临时用上下左右的箭头按键代替,还自我安慰说现在时间太急,先搞定当前的工作,回头再看看这个操作使用哪一个快捷键。这一回头,早就忘了快捷键的事了。
因此,为了不让自己呆在舒适的区域,强迫自己在命令行使用各种快捷键,决定想办法在命令行禁用上下左右箭头。
谷歌了一下,找到了在命令行禁用上下左右箭头的方法。总体来讲,BASH调用Readline库来处理用户输入,而readline库会调用/etc/inputrc
和~/.inputrc
文件来设置键值映射,所以可以通过在~/.inputrc
文件中将上下左右箭头映射为空来达到禁用的目的。
默认情况下,linux和macOS的用户主目录~
下没有.inputrc
文件,需要自行创建,以下是我在macOS上新建的.inputrc
文件:
这里由于使用了$if mode=emacs
语句,所以这里的键值映射设置只在默认的emacs模式下才有用。
如果只想在vi模式下起作用,则需要将if语句修改为$if mode=vi
, 如下:
如果没有$if
语句,则不论哪一种模式,上下左右箭头都会被屏蔽。
题外话,我使用的是Ubuntu,在图形界面的终端上,似乎并没有很好解决
Alt
映射为Meta
键的问题。平时喜欢secure crt通过ssh连接,通过在secure crt中设置“Use ALT as meta key”得到解决。但仍然没有解决图形界面上ALT
键会被窗口菜单拦截的问题。求大神指导下。
3. 整理归类命令行的快捷键
BASH命令行的快捷键说少不少,说多不多,二三十个吧,说实话,要一下子记住还是挺有难度的。
基于常用的快捷键,我在整理了一个简单的图,希望能减轻记忆的难度。
这里只包含了一些常用的快捷键,而非所有(没有包含ctrl+c, ctrl+z等,以及一些少用的)
由于公众号对图片大小限制的原因,这里只能放下一个没有注释的图片,不嫌麻烦的同学可以搜索公众号“洛奇看世界”,后台回复”0521”,获取带注释的完整图片。
4. vi模式下的提示
其实在熟悉vim的情况下,命令行切换到vi模式也很好用,问题就是vi模式的命令行也有insert mode和command mode,默认情况下没有任何提示,如何判断当前处于哪个模式呢?
知乎上的这位兄弟提供了一个办法:
https://www.zhihu.com/question/23857131/answer/124738655
bash 4.2以上
编辑 $HOME 目录下的 .inputrc
增加:bash提示符前会出现+和:这两种符号,+代表插入/替代模式,:代表普通模式。
显然,这里的重点是设置:
我尝试在Ubuntu 14.04上进行设置,完成后命令行能正常通过”+”和”:”来指示当前的模式,如下:
前面两个提示符前都是’+’号,说明当前是可以输入的insert mode;最后一行的提示符是’:’,因为我已经按ESC
键切换到了command mode。
我在mac上捣鼓了一下,发现不起作用,再仔细检查的时候,发现需要bash 4.2以上,而mac上的bash竟然是3.2.57的老版本,这版本也忒特么旧了:
那看来在Mac下只能升级BASH到4.2以上了。
通过
brew install bash
将bash升级到4.4.19发现还是不行。
搜索找到个相关的帖子:
https://unix.stackexchange.com/questions/22527/change-cursor-shape-or-color-to-indicate-vi-mode-in-bash这里提到可能跟PS1的设置有关,当然,貌似有人是通过其他办法hack解决了,但我还是希望不使用hack的方式,等我解决了再告诉大家吧。