BASH命令行快捷键指南(二)

版权声明:本文为guyongqiangx原创,欢迎评论、转载和收藏。微信公众号:洛奇看世界。 https://blog.csdn.net/guyongqiangx/article/details/80602654

Rocky自画BASH快捷键导图

题图: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文件:

mbp:~ rocky$ ls -al | grep inputrc
-rw-r--r--   1 rocky  staff    102  5 23 11:46 .inputrc
mbp:~ rocky$ cat .inputrc
$if mode=emacs
"\eOD":""
"\e[D":""
"\eOC":""
"\e[C":""
"\eOA":""
"\e[A":""
"\eOB":""
"\e[B":""
$endif

这里由于使用了$if mode=emacs语句,所以这里的键值映射设置只在默认的emacs模式下才有用。

如果只想在vi模式下起作用,则需要将if语句修改为$if mode=vi, 如下:

mbp:~ rocky$ cat .inputrc
$if mode=vi
"\eOD":""
"\e[D":""
"\eOC":""
"\e[C":""
"\eOA":""
"\e[A":""
"\eOB":""
"\e[B":""
$endif

如果没有$if语句,则不论哪一种模式,上下左右箭头都会被屏蔽。

题外话,我使用的是Ubuntu,在图形界面的终端上,似乎并没有很好解决Alt映射为Meta键的问题。平时喜欢secure crt通过ssh连接,通过在secure crt中设置“Use ALT as meta key”得到解决。但仍然没有解决图形界面上ALT键会被窗口菜单拦截的问题。求大神指导下。

3. 整理归类命令行的快捷键

BASH命令行的快捷键说少不少,说多不多,二三十个吧,说实话,要一下子记住还是挺有难度的。

基于常用的快捷键,我在整理了一个简单的图,希望能减轻记忆的难度。
Rocky自画BASH快捷键导图

这里只包含了一些常用的快捷键,而非所有(没有包含ctrl+c, ctrl+z等,以及一些少用的)

由于公众号对图片大小限制的原因,这里只能放下一个没有注释的图片,公众号后台回复”0521”,获取带注释的完整图片。
image

4. vi模式下的提示

其实在熟悉vim的情况下,命令行切换到vi模式也很好用,问题就是vi模式的命令行也有insert mode和command mode,默认情况下没有任何提示,如何判断当前处于哪个模式呢?

知乎上的这位兄弟提供了一个办法:

https://www.zhihu.com/question/23857131/answer/124738655

bash 4.2以上
编辑 $HOME 目录下的 .inputrc
增加:

set editing-mode vi
set keymap vi-command
set show-mode-in-prompt on

bash提示符前会出现+和:这两种符号,+代表插入/替代模式,:代表普通模式。

显然,这里的重点是设置:

set show-mode-in-prompt on

我尝试在Ubuntu 14.04上进行设置,完成后命令行能正常通过”+”和”:”来指示当前的模式,如下:

+ygu@ubuntu:~$ bash --version
GNU bash, version 4.3.11(1)-release (x86_64-pc-linux-gnu)
Copyright (C) 2013 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>

This is free software; you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
+ygu@ubuntu:~$
:ygu@ubuntu:~$

前面两个提示符前都是’+’号,说明当前是可以输入的insert mode;最后一行的提示符是’:’,因为我已经按ESC键切换到了command mode。

我在mac上捣鼓了一下,发现不起作用,再仔细检查的时候,发现需要bash 4.2以上,而mac上的bash竟然是3.2.57的老版本,这版本也忒特么旧了:

mbp:~ rocky$ uname -a
Darwin mbp 17.5.0 Darwin Kernel Version 17.5.0: Fri Apr 13 19:32:32 PDT 2018; root:xnu-4570.51.2~1/RELEASE_X86_64 x86_64
mbp:~ rocky$ 
mbp:~ rocky$ bash --version
GNU bash, version 3.2.57(1)-release (x86_64-apple-darwin17)
Copyright (C) 2007 Free Software Foundation, Inc.
mbp:~ rocky$ 

那看来在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的方式,等我解决了再告诉大家吧。


本文原创发布于微信公众号“洛奇看世界”,一个大龄码农的救赎之路。
image

  • 关注微信公众号“洛奇看世界”:
    • 回复关键词“0521”获取完整的BASH快捷键思维导图,两篇《BASH命令行快捷键指南》的PDF版和BASH的用户手册。
    • 回复关键词“Android电子书”,获取超过150本Android相关的电子书和文档。

猜你喜欢

转载自blog.csdn.net/guyongqiangx/article/details/80602654
今日推荐