我使用 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
,绑定到werase
tty 行规则设置的任何字符(请参阅 的输出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
当路径中有下划线时,直到反斜杠才会删除。
下划线被视为单词边界。
当然,您可以选择其他键盘快捷键。