在终端中输入文本是复杂的

主要观点:

  • 人们在终端工作中对编辑已输入命令感到困惑,作者分享了相关经验和技巧。
  • 不同程序在处理输入文本时存在很大差异,包括是否支持箭头键等。
  • 介绍了几种输入模式,如基线模式、使用readline的模式、使用libedit的模式和自定义模式等。

关键信息和重要细节:

  • 基线模式:一些“基线”工具如安装在作者机器上的dash,按左箭头键会打印^[[D等,可免费获得输入文本、退格、Ctrl+WCtrl+U等功能。
  • readline模式:很多程序使用readline库,提供诸如Ctrl+E到行尾、Ctrl+A到行首、Ctrl+左/右键移动单词、上箭头回到上一条命令、Ctrl+R搜索历史等功能,bash shell 是著名的readline用户,还可通过rlwrap使无readline支持的程序获得readline支持。
  • libedit模式:在 Mac 上的/usr/bin/python3默认使用libedit,支持部分readline功能,如箭头键,但不支持其他功能,可通过代码判断 Python 是否使用libedit
  • 自定义模式:大多数终端文本编辑器、一些 shells(如fish)、某些 REPLs(如ipython)等有自己的自定义文本编辑系统,常受readline启发,有更好的自动补全和历史管理等功能,很多 shells 支持 vi 键绑定。
  • 了解所处的输入情况有助于更好地使用命令行,如箭头键不工作可使用Ctrl+WCtrl+UCtrl+R打印reverse-i-search可能是readline等。
  • 文章未涉及的内容:与ssh/tmux等相关问题、TERM环境变量、不同终端的复制粘贴文本支持、unicode 等。
阅读 12
0 条评论