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

题图:Rocky自画BASH快捷键导图

1. BASH命令行编辑的两种模式

BASH命令行支持emacs和vi两种模式。在emacs模式下使用跟emacs下一样的快捷键进行编辑,而在vi模式下则使用跟vi下一样的快捷键进行编辑。如果你熟悉emacs,则使用emacs模式编辑根本都不需要学习,直接使用~~对于vi模式也是一样,命令行也分为normal mode和instert mode,使用vi下对应模式的快捷键。

默认为emacs模式。这里主要说一下默认的emacs模式。

如果不清楚当前是哪一种模式,又该如何查看当前是哪一种模式呢?
在命令行执行bind -V然后检查keymap一项,如下:

mbp:~ rocky$ bind -V | grep map
keymap is set to `emacs'
...
mbp:~ rocky$ set -o vi
mbp:~ rocky$ bind -V | grep map
keymap is set to `vi'

这里通过set -o vi指令临时将keymap设置为vi模式,再次执行bind -V后显示的keymap就是vi模式了。

2. 关于Meta按键

据传:在这个蔚蓝色的星球上,流传着两大神器:作为神的编辑器之Emacs和作为编辑器之神的Vim。

我没用过emacs,传说中emacs会大量使用meta键。如果你的BASH是默认的emacs模式,那显然也离不开这个meta键。所以在正式介绍emacs模式的快捷键前有必要说一下emacs上常用的Meta键。

这个Meta键在上古时期的键盘上还能见到,但如今已经不知所踪了。下图是在wiki上找到的一个带Meta键的键盘:

(键盘的最下面一排,左边正数第3个,右边倒数第4个)

键盘上没有Meta键,那怎么办呢?

BASH Reference Manual上以Meta-k组合键为例来介绍Meta Key时是这样解释的:

The text M-k is read as ‘Meta-K’ and describes the character produced when the Meta key (if you have one) is depressed, and the k key is pressed. The Meta key is labeled ALT on many keyboards. On keyboards with two keys labeled ALT (usually to either side of the space bar), the ALT on the left side is generally set to work as a Meta key. The ALT key on the right may also be configured to work as a Meta key or may be configured as some other modifier, such as a Compose key for typing accented characters.

If you do not have a Meta or ALT key, or another key working as a Meta key, the identical keystroke can be generated by typing ESC first, and then typing k. Either process is known as metafying the k key.

这里说很多键盘上,Meta被标记为ALT键(在我所使用的键盘上,尽管有ALT键,但其并不是作为Meta功能使用, Macbook上也没有单独的Meta键),此时可以选用其中的一个ATL键通过设置作为Meta键。如果没有ALT键,可以通过先按ESC键,再按相应的字母键实现Meta组合件的功能。

但是实际上先按ESC,再按相应的组合键,前后要按两次以上,很不方便,通常都是通过修改设置,将ALT复用为Meta键。

以下是网上找到的几种方式:

  • Windows下使用SSH Secure Shell连接到Linux
    例如我自己就是使用Secure CRT通过SSH2登录到服务器,可以通过在Secure CRT上将ALT键设置为meta键:
    Menu --> Session Options --> Terminal --> Emulation --> Emacs --> Use ALT as meta key
    进行设置。
    如下:


  • MacOS下使用命令行终端

    • 默认的Terminal终端
      终端 --> 偏好设置 --> 描述文件 --> 键盘
      如下:


    • iTerm2终端
      iTerm2 --> Preferences --> Profile --> Keys
      如下:


  • Linux下使用命令行终端

    Linux我用得比较多的是Ubuntu桌面版,我发现Ubuntu桌面版的Terminal上,ALT会起到Meta Key的功能,但是部分功能键(如Alt+F)会被Terminal本身的菜单截获,除了手动修改配置文件的Key映射外,我还没有找到比较方便通用的解决办法。

    知道如何设置的大神,恳请告知一下。

3. BASH命令行的快捷键

说完了BASH命令行的两种模式和Meta Key,下面总算进入正题介绍快捷键了。
关于命令行编辑,主要就是光标移动,字符编辑和历史命令功能。

命令行支持的快捷键很多,完整的快捷键列表请参考BASH参考手册。
下面列举最常用的几类编辑命令:

  • 移动操作

    • 字符
      • ctrl + f, 光标向前(右)移动一个字符
      • ctrl + b, 光标向后(左)移动一个字符
    • 单词
      • meta + f / ctrl + ->, 光标向前(右)移动一个单词
      • meta + b / ctrl + <-, 光标向后(左)移动一个单词
      • ctrl + a, 移动光标到行首
      • ctrl + e, 移动光标到行位
    • 其它
      • ctrl + x, 光标在上次所在字符和当前所在字符间切换
      • ctrl + l, 清除屏幕,移动光标到左上角,同clear命令。
  • 删除操作 (实际上这里的删除是剪切操作)

    • 字符

      • ctrl + d, 删除光标所在位置的字符
      • ctrl + h, 删除光标位置左侧的字符
    • 单词

      • ctrl + w, 删除光标所在位置的单词到单词头
      • meta + d, 删除光标所在位置的单词到单词尾
      • meta + Backspacce, 删除光标位置到单词头的文本。如果光标在一个单词的开头,剪切前一个单词。
    • 其它

      • ctrl + k, 删除光标及其后面的所有字符
      • ctrl + u, 删除光标前面所有字符
      • ctrl + _, 恢复上一次删除的字符

      关于Backspace和DEL我想就不需要单独列举出来了。

      这里没有找到删除整行的命令,可以通过组合命令的方式实现,例如在行首执行ctrl+k或行尾执行ctrl+u。

  • 撤销操作

    • ctrl + _, 撤销上一次删除操作
    • ctrl + y, 撤销上一次 ctrl + u的删除操作(实际上是将上一次剪切的文本重新粘贴到光标位置)
    • ctrl + ?, 撤销上一次的输入操作
  • 位置调换操作

    • ctrl + t, 将光标位置的字符和光标前面的字符互换位置
    • meta + t, 将光标位置的单词和光标前面的单词互换位置
  • 大小写转换操作

    • meta + l, 从光标位置到单词尾的字符转换为小写字母
    • meta + u, 从光标位置到单词头的字符转换为大写字母
  • 历史命令操作

    • 穿梭
      • ctrl + p, 显示上一条历史命令,相当于按上箭头
      • ctrl + n, 显示下一条历史命令,相当于按下箭头
      • meta + <, 显示第一条历史命令
      • meta + >, 显示最后一条历史命令, 实际上是当前命令行
    • 搜索
      • ctrl + r, 反向搜索,即从当前命令开始,向上递增搜索
    • 执行
      • ctrl + o, 执行历史命令中的当前想,并移动到下一个。如果想要执行历史命令中的一系列命令,这很方便。
      • !number, 执行历史命令列表中的第number行的命令
      • !string, 执行最近历史列表中,以这个字符串开始的命令
  • 其它

    • ctrl + s, 锁定命令行
    • ctrl + q, 解锁命令行

4. 更多命令行快捷键

BASH命令行操作的快捷键还有很多,关于光标移动,字符编辑和历史命令操作3条就已经够日常装B使用了。更多的快捷键可以在BASH手册的第8章”Command Line Editing”中找到。

不嫌麻烦的同学可以搜索公众号“洛奇看世界”,后台回复关键词获取本文的PDF版和BASH的用户手册。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,100评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,308评论 3 388
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,718评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,275评论 1 287
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,376评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,454评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,464评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,248评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,686评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,974评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,150评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,817评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,484评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,140评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,374评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,012评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,041评论 2 351

推荐阅读更多精彩内容