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

Vay*_*ayn 22 shell bash zsh

bash 和 zsh 中是否有删除路径的一个组件的快捷方式?例如,如果我输入ls ~/local/color/,并且光标在行尾,是否有删除行尾的快捷方式color/?理想情况下,我想要 vi-mode 和 emacs-mode 的解决方案

enz*_*tib 27

默认 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: 增量向后历史搜索

  • 补充:为此目的在zsh中设置快捷方式`bindkey [key] vi-backward-kill-word` (2认同)

小智 11

还有unix-filename-rubout为了Readline

# 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
Run Code Online (Sandbox Code Playgroud)

  • 恕我直言,`unix-filename-rubout` 是问题的正确答案,因为它删除了斜杠或空格,而 `Alt-BkSpc` 将停在连字符、下划线、点等字符处。 (3认同)

rah*_*hmu 7

默认情况下,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.
Run Code Online (Sandbox Code Playgroud)