主要观点:
- 人们在终端工作中对编辑已输入命令感到困惑,作者分享了相关经验和技巧。
- 不同程序在处理输入文本时存在很大差异,包括是否支持箭头键等。
- 介绍了几种输入模式,如基线模式、使用
readline的模式、使用libedit的模式和自定义模式等。
关键信息和重要细节:
- 基线模式:一些“基线”工具如安装在作者机器上的
dash,按左箭头键会打印^[[D等,可免费获得输入文本、退格、Ctrl+W、Ctrl+U等功能。 readline模式:很多程序使用readline库,提供诸如Ctrl+E到行尾、Ctrl+A到行首、Ctrl+左/右键移动单词、上箭头回到上一条命令、Ctrl+R搜索历史等功能,bashshell 是著名的readline用户,还可通过rlwrap使无readline支持的程序获得readline支持。libedit模式:在 Mac 上的/usr/bin/python3默认使用libedit,支持部分readline功能,如箭头键,但不支持其他功能,可通过代码判断 Python 是否使用libedit。- 自定义模式:大多数终端文本编辑器、一些 shells(如
fish)、某些 REPLs(如ipython)等有自己的自定义文本编辑系统,常受readline启发,有更好的自动补全和历史管理等功能,很多 shells 支持 vi 键绑定。 - 了解所处的输入情况有助于更好地使用命令行,如箭头键不工作可使用
Ctrl+W和Ctrl+U,Ctrl+R打印reverse-i-search可能是readline等。 - 文章未涉及的内容:与
ssh/tmux等相关问题、TERM环境变量、不同终端的复制粘贴文本支持、unicode 等。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用。你还可以使用@来通知其他用户。