如何删除交互式外壳中的路径的一部分?


19

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

Answers:


25

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

运动

  • Ctrl- pUp:上一个命令
  • Ctrl- nDown:下一个命令
  • Ctrl- bLeft:前一个字符
  • Ctrl- fRight:下一个字符
  • Alt- b:前一个词
  • Alt- f:下一个字
  • Ctrl- aHome:命令开始
  • Ctrl- eEnd:命令结束

编辑中

  • BkSpc:删除前一个字符
  • Ctrl- dDel:删除当前字符
  • Alt- BkSpc:删除左侧的单词
  • Alt- d:向右删除单词
  • Ctrl- u:删除以开始命令
  • Ctrl- k:删除到命令末尾
  • Ctrl- y:粘贴最后一个剪切

杂记

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

2
补充:为此目的在zsh中设置了快捷方式bindkey [key] vi-backward-kill-word
Vayn 2011年

谢谢。我将此添加到〜/ .zshrc文件中,当我按Alt + Backspace时,它对我来说效果很好:bindkey“ ^ [^?” vi向后杀人字。这不理想。
蒂姆·斯图尔特

Alt-Bckspc和Alt-d与我尝试过的文件路径配合使用时效果很好。(bash上)
2015年

10

还有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

2
恕我直言unix-filename-rubout是所问问题的正确答案,因为它删除为斜杠或空格,而Alt-BkSpc将停在连字符,下划线,点等字符
Steve

6

默认情况下,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.

1
我不会说“在vi模式下命令行编辑功能更加强大和完整”,emacs模式具有命令来完成vi模式下可以做的一切。
enzotib 2011年

我承认我被带走了。我改一下。
rahmu 2011年

感谢您提醒我bash中有vi模式,因此我可以在bash中使用db此方案。我也在vi-backward-kill-wordzsh中找到了我想要的东西,它比在bash中设置vi-mode更加方便。但是我仍然想在bash中找到一个用于此目的的emacs模式快捷方式。
Vayn 2011年

或“ alt-bC”。db在某些情况下,这种方式不会留下结尾字符。
通配符
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.