如何在终端中删除“/”到“/”?

如何在终端中删除“/”到“/”?

我使用 Kitty 模拟器和 bash shell。

我知道Ctrl+w我可以删除一个字在终端(如Ctrl+ Backspace)。但如果我有这样的东西怎么办:

sh /home/user/dir1/dir2/file.sh

我只想删除file.sh

我无法用Ctrl+删除w,因为这样整行将被删除而且我不想手动删除它。

有什么建议如何仅删除一个路径元素吗?

答案1

如果我理解正确的话,您正在使用 bash,并使用默认的 Emacs 风格编辑。然后一个Emacs 备忘单可能会有所帮助 - 您可以执行Alt+Backspace(backward-kill-word) 删除回到最后一个单词的开头。

答案2

bash用作行编辑器的应用程序和其他应用程序中readline,绑定到werasetty 行规则设置的任何字符(请参阅 的输出stty -a)最终都会绑定到unix-word-rubout行为类似的 readline 小部件(向后删除空格分隔的单词),在这种情况下,只要该角色绑定到werase,任何将其绑定到不同小部件的尝试都会被忽略(AFAICT)。

在大多数系统上,werase位于^W默认的 tty 设置中。

因此,为了能够重新绑定^W到 readline 中的其他内容,您需要首先更改 tty 设置:

stty werase '^O'

绑定werase^O或者:

stty werase ''

完全禁用它。

然后你就可以做到:

bind '"\C-w": backward-kill-word'

或者添加"\C-w": backward-kill-word到您的应用~/.inputrc程序中,以适用于所有使用的应用程序readline,而不仅仅是bash.

然后,^W 会按照您喜欢的方式删除单词(嗯,其中被定义为字母或数字的序列,甚至没有下划线)。

但是,这意味着您将无法使用 ^W 在没有自己的行编辑器的应用程序中删除单词。

或者,您可以使用zsh而不是bash所有文字运动/删除小部件都是完全可配置的。

或者正如已经@AndreBeaud 提到使用Alt+ Backspace(通常发送^[^H^[^?,后者在 中),它在 readline 的 emacs 模式下默认kitty已绑定。backward-kill-word

答案3

unix-filename-rubout在 .inputrc 中设置绑定

"\C-b":unix-filename-rubout

这种方式CTRL B映射到向后删除直到斜杠或空格。

这是一个更好的解决方案ALT BACKSPACE,因为ALT BACKSPACE当路径中有下划线时,直到反斜杠才会删除。

下划线被视为单词边界。

当然,您可以选择其他键盘快捷键。

答案4

终端中的键盘文本快捷键

这些可能会有帮助。您可以通过导航到“帮助、内容、高级设置、键盘快捷键”在终端中找到更多快捷方式

相关内容