BASH命令行快捷键指南
Posted 洛奇看世界
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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命令行的快捷键说少不少,说多不多,二三十个吧,说实话,要一下子记住还是挺有难度的。
基于常用的快捷键,我在整理了一个简单的图,希望能减轻记忆的难度。
这里只包含了一些常用的快捷键,而非所有(没有包含ctrl+c, ctrl+z等,以及一些少用的)
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的方式,等我解决了再告诉大家吧。
回复关键词“0521”获取完整的BASH快捷键思维导图,两篇《BASH命令行快捷键指南》的PDF版和BASH的用户手册。
回复关键词“android电子书”,获取超过150本Android相关的电子书和文档。
以上是关于BASH命令行快捷键指南的主要内容,如果未能解决你的问题,请参考以下文章