Bash 编辑器转起来

Bash 无疑是使用最多的一种 shell。作为用户向操作系统“发号施令”的重要通道,Bash 必须具备接收各种命令,并“安排”各种命令执行的能力(参见Bash 点滴)。为此,Bash 为用户提供了一个命令编辑环境,在该环境下,用户可以输入编辑各种指令,并对命令执行方式进行各种控制。了解并熟练掌握 Bash 命令编辑环境下的各种操作,是高效使用 Bash,充分发挥 Bash 威力的必然前提。

一、命令编辑控制

Bash 首要定位是一个“命令编辑器”,需为高效编辑各种指令和控制提供便利。无论光标移动抑或编辑,减少方向键操作,提供整体性操作都必不可少,典型如 line 操作和 word 操作。当前已有很多久经考验、广泛使用高效编辑工具,Bash 无需“重新发明轮子”,提供充分融合利用当前高效编辑工具的机制即可。Bash 命令编辑器模式默认即采用 “emacs” 模式,Bash 的编辑快捷键与 emacs 基本一致。当然,Bash 也可根据用户需要配置为其他编辑模式(如 vim 模式)。

1. 命令光标移动

a)行操作

  • Ctrl + a :移动光标到行首 (与 vim 对 a 的定位完全相反)
  • Ctrl + e :移动光标到行尾

b)word 操作

  • Alt + f :以 word 为单位前移 (与 vim 对 f 的定位一致)
  • Alt + b :以 word 为单位后移 (与 vim 对 b 的定位一致)

c)character 操作

  • Ctrl + f :以 character 为单位前移
  • Ctrl + b :以 character 为单位后移

2. 命令基本编辑操作

1) 删除

   a)行操作

  • Ctrl + u :从光标处删除至行首(带剪切功能,可与 Ctrl + y 配合使用)
  • Ctrl + k :从光标处删除至行尾(带剪切功能,可与 Ctrl + y 配合使用)

  b)word 操作

  • Ctrl + w :从光标处向前删除一个 word(带剪切功能,可与 Ctrl + y 配合使用)
  • Alt  + d :从光标处向后删除一个 word(带剪切功能,可与 Ctrl + y 配合使用)

  c)character 操作

  • Ctrl + d :从光标处向后删除一个 character(相当于backspace)
    当整个行没有 character 时,此操作关闭整个 Bash。

2) 复制

  • Ctrl + y :在光标后粘贴 (yank 操作)
    注:< c – y> 也是 bash 的进程内复制,想要跨进程,必须借助操作系统剪切板,使用 < c – s – v>,这一点 vim 也有类似设置。

3) 屏幕控制

  • Ctrl + l :清屏操作。清除 Bash 屏幕已有显示内容,光标置顶行。
  • Ctrl + s :锁屏操作。输入编辑操作可继续执行,但内容不在屏幕显示。
  • Ctrl + q :解锁操作。Ctrl + s 的逆操作。

3. Bash 默认编辑模式设置

 在 ~/.bashrc 中,添加 set -o vi / emacs 来调整 Bash 默认编辑模式。

4. 历史命令的搜索

  • ctrl + r :输入关键字,即可在历史命令中查找与关键字匹配的命令并输出。
    这项操作可极大提高 bash 的使用效率,非常重要!

二、命令执行控制

Bash 为命令提供了 “前台” 和 “后台” 两种执行方式。

1. Bash 启动关闭

  • Ctrl + Alt + T :启动 Bash
  • Ctrl + d     :关闭 Bash

2. 前后台切换

  • &      :将命令 “前台–>后台” 执行
  • Ctrl + z :将命令 “前台–>后台” 暂停
  • fg     :将命令 “后台–>前台” 处理

Ctrl + z 与 fg 命令在只用单 bash 进行编辑时非常有用。例如,进行 vim 编辑时,有时需要获取外部信息填入 vim,则此时使用 Ctrl + z 退出 vim,在 bash 中找到相关信息后,再使用 fg 进入 vim,拷贝复制相关信息后继续编辑,可有效提升 vim 的编辑效率。

3. 执行控制

  • Ctrl + c :前台命令终止
  • kill    :后台命令终止或重启
  • bg     :后台命令执行

三、跨进程(全环境)的复制粘贴(非 Bash 编辑器)

Bash 命令编辑器提供了 “利用 emacs 模式” 的剪切粘贴,但这类操作(参见”命令基本编辑操作“)只局限于 Bash 命令编辑光标环境,即仅限于单个 Bash 进程内部。除此之外,Bash 还提供了利用操作系统剪切板的范围更广的全环境(跨进程)复制粘贴操作。这些操作不仅适用于命令编辑光标环境中的字符串复制粘贴操作,还可应用于其他不可编辑字符的复制粘贴,如 prompt 提示符等;以及其他外部进程(如浏览器)与目标 Bash 进程之间的字符的复制粘贴。

选中要操作的内容(高亮),可进行如下操作:

  • Ctrl + Shift + c :复制
  • Ctrl + Shift + v :粘贴

这里涉及一个 linux 软件进行数据交换的共性的问题,即软件既有进程内部进行数据交换的需求,也有不同进程之间进行数据交换的需求,尤其是数据处理类软件,类似的需求更为凸显(如 vim,bash),软件也必须提供相应的机制满足上述两种需求。一般来说,软件进程内部数据交换用内部存储机制(如寄存器)完成,软件与外部(不同进程之间)进行数据交换通过操作系统剪切板来实现。在交互式软件中(如 vim,bash),这种不同往往也对应着不同的按键操作。

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注