将输入删除回最后一个正斜杠

Oli*_*Oli 19 command-line bash shortcut-keys

我会经常在服务器上的几个文件之间来回切换。我将按顺序运行以下示例命令:

nano /web/site/path/to/file
/web/site/script.py
nano /web/site/path/to/anotherFile
nano /web/site/path/to/yetAnotherFile
/web/site/script.py
nano /web/site/path/to/etc
Run Code Online (Sandbox Code Playgroud)

要从一个nano命令转到下一个命令,我当前按下UpBackspace替换路径的最后一段。问题是我真的,真的很懒。

是否有键盘快捷键(或 Bashism)可以:

  • 被上次使用的路径替换(末尾有一个额外的位)
  • 删除当前行(例如按下后Up)回到最后一行/

Syl*_*eau 24

我认为您正在寻找Alt+Backspace快捷方式。

按下后Up应删除回前一个/space字符。

  • 现在我势不可挡!(编辑:我发誓我每年至少学习并忘记这条捷径十次) (7认同)
  • 这应该怎么做?在我的终端上,它似乎与普通的“退格”没有什么不同。 (3认同)

Rad*_*anu 9

要检测按您希望的方式向后杀死单词的 readline 绑定,您可以在终端中使用以下命令:

bind -p | awk '/kill/ && /word/ && /backward/'
Run Code Online (Sandbox Code Playgroud)

在默认的 Ubuntu 安装中,输出可能是:

"\e\C-h": backward-kill-word
# shell-backward-kill-word (not bound)
Run Code Online (Sandbox Code Playgroud)

在这一点上,第二行似乎并不重要,所以让我们试着看看第一行是什么意思。从我的理解中,backward-kill-word这实际上删除所有字符的readline功能,直到前面的特殊字符(/;,等)被绑定到\e\C-h按键序列。现在,在这个序列\e 代表Esc关键,\C-的Ctrl关键,并\C-h代表Ctrl+h是在这种情况下,相当于Backspace关键。

因此,您正在搜索与+等效的Esc+ Ctrl+h键盘快捷键,并且由于 xterm 的行为使key 充当元字符,并且元字符被转换为两个字符的序列,字符本身以(参见),等同于+EscBackspaceAltEscman xtermAltBackspace

现在,如果您不喜欢它并且继续忘记它,您可以使用以下命令创建一个新的快捷方式,例如Esc+ w,用于您的目的:

bind '"\ew": backward-kill-word'
Run Code Online (Sandbox Code Playgroud)

要使这个新快捷方式始终适用于所有使用 readline 的命令,请将以下行添加到您的~/.inputrc文件中:

"\ew": backward-kill-word
Run Code Online (Sandbox Code Playgroud)

查看help -m bind | sensible-pager更多信息。

  • 好答案。更常见的是,您会使用 bind 命令将整个设置用单引号括起来;`bind '"\ew": backward-kill-word'`,但那是吹毛求疵。值得一提的是,您还可以将“\ew”:backward-kill-word 放在“~/.inputrc”中,在这种情况下,其他使用 readline 的命令也将具有该绑定,例如,如果您启用 readline在 python 交互式 shell 中,该绑定也将适用于那里。 (2认同)