如何在交互式 shell 中删除部分路径?

如何在交互式 shell 中删除部分路径?

bash 和 zsh 中是否有删除路径的一个组成部分的快捷方式?例如,如果我输入ls ~/local/color/,并且光标位于行尾,是否有快捷方式可以删除color/末尾的 ?理想情况下,我想要 vi 模式和 emacs 模式下的解决方案

答案1

默认 bash 中最常用的命令emacs模式,对于最常用的键盘:

移动

  • Ctrl- p, 或Up: 上一个命令
  • Ctrl- n, 或Down: 下一个命令
  • Ctrl- b, 或Left: 前一个字符
  • Ctrl- f, 或Right: 下一个字符
  • Alt- b: 前一个词
  • Alt- f: 下一个词
  • Ctrl- a, 或Home: 命令开始
  • Ctrl- e, 或End: 命令结束

编辑

  • BkSpc: 删除前一个字符
  • Ctrl- d, 或Del: 删除当前字符
  • Alt- BkSpc: 删除左边的单词
  • Alt- d: 删除右边的单词
  • Ctrl- u:删除到命令开头
  • Ctrl- k:删除到命令末尾
  • Ctrl- y:粘贴最后剪切的内容

杂项

  • Cltr- /: 撤消
  • Cltr- r:增量向后历史搜索

答案2

还有unix-filename-ruboutReadline

# in ~/.inputrc
# press ctrl-b to delete unix filename parts
# see: man bash | less -p 'unix-filename-rubout' and
#      http://www.calmar.ws/vim/vi-bash.html
set editing-mode vi
set keymap vi
"\C-b": unix-filename-rubout

答案3

默认情况下,bash(我猜 zsh)将处于 emacs 模式。你可以尝试这样的事情:

Esc + b会将光标移回一个单词。 Ctrl + k将删除直到行尾。

大多数现代 shell(如 bash)将实现高级命令行编辑功能。这些命令要么接近 emacs 编辑(Ctrl + A 表示行开始,Ctrl + E 表示行结束,...)。

如果您熟悉类似 vi 的编辑器,您可以尝试允许 vi 模式。

set -o vi

它为您的 shell 提供类似 vi 的模式(命令模式/插入模式),并且您可以访问标准命令(d 表示删除,r 表示替换,...​​)

在 Vi 模式下,您将按照以下方式执行您所描述的操作:

Esc (command mode); d; b.

相关内容