Bash使用readline,readline可以使用“kill-word”删除光标右侧的单词。
问题在于识别control-delete的按键。当我用bash按下它们时,屏幕上会输出“5~”。我可以为此绑定,但这意味着有一天我需要输入“5~”,它会删除右边的单词!所以我更愿意发现正确的控制序列。
我用谷歌搜索了,不少资源讨论了“删除”键,但我发现没有讨论“控制 - 删除”键。我已尝试过很多变化,但没有任何效果。
最糟糕的是我花在这种乏味,无意识的磨练上的时间,当它真的应该是一个没问题的时候。
编辑:这是通过X,所以也许有一个xev和xmodmap的解决方案答案 0 :(得分:12)
在我的机器上,按Ctrl-V,Ctrl-Delete输出:
^[[3;5~
^[
转义字符可以替换为\ e,因此您可以像bash一样使用绑定(例如在~/.bashrc
中):
bind '"\e[3;5~":kill-word'
或者,您可以将以下内容添加到~/.inputrc
,以便Ctrl-Delete在任何使用readline的程序中执行kill-word:
"\e[3;5~": kill-word
这只会绑定Ctrl-Delete键,你不必担心如果你需要键入5~会发生什么。
答案 1 :(得分:4)
你看到的不是全部真相。它可能是<ESC>5~
或类似的东西。尝试Ctrl-V Ctrl-Delete。 Ctrl-V表示“不解释下一件事”。
如此绑定<ESC>5~
应该非常安全。
答案 2 :(得分:3)
Alt + D删除光标右侧的一个单词 Ctrl + W删除光标左侧的一个单词 (我相信两者都基于Emacs)
答案 3 :(得分:2)
如果你输入^ Q ^ V(Control-Q后跟Control-V,释放它们之间的Control键就好了),然后按Control-Delete,你得到你提到的输出吗?我刚尝试过,至少使用Putty我根本没有得到回复。但是,实际的Linux控制台上的行为可能不同。
对于其他键,readline打印一个较长的序列,通常包括一个特殊的“命令序列引入”字符,很难错误输入。尝试一下,看看你是否用^ Q ^ V命令获得更长的序列(也就是说,顺便说一句,称为引用插入)。
例如,如果我按^ Q ^ V然后按Delete(不按住控件),则读取行打印^[[3~
。这告诉我可以通过说\e[[3~
将内容绑定到Delete键。 CSI角色似乎很可能适合你,但你没有看到它,因为你没有要求readline正确引用输入。
答案 4 :(得分:0)
Ctrl-W删除单词。
Ctrl-u删除行。
它们基于Emacs(M-w和M-u)。