Bash:我可以设置Ctrl-Backspace来向后删除单词吗?


19

在shell中(bash)时-我想将Ctrl-Backspace绑定到“向后删除单词”。可能吗?

编辑

konsole在KDE 使用-终端。


2
问题是直截了当的,对此没有任何抱怨。我只是想评论说,促进许多应用程序中已经存在的“标准”键绑定通常很有价值,而不是为了没有真正的收获和确定永远不会在国外系统上看到这种行为而进行定制。Ctrl+w恕我直言,这是您应该习惯的。
丹尼尔·安德森

@ Daniel Andersson:或者-您可以开发一种您的设置传输到外部计算机的方法。
Adobe

共享点文件是一个已解决的问题,但是在具有相当多开放权限的本地计算机上,它对其他方面没有多大帮助。如果您使用的是外国系统,则很可能没有自由来重新配置类似的东西(至少在没有被同样使用同一台机器的同班人殴打的情况下:-))。此外,每个新应用程序都需要特殊处理。
丹尼尔·安德森

6
我遇到了相反的问题,我习惯Ctrl-w在控制台中“删除上一个单词”,并且即使在Eclipse或Chrome中,也可以通过本能进行操作,这意味着关闭选项卡/关闭当前文件。很烦人。
Ezequiel Muns 2012年

1
Chrome SShInATab存在相同的问题。没有ctrl-W的情况下如何做ctrl-W?:)
Riccardo SCE 2014年

Answers:


11

为什么不只使用大多数终端中已经映射的Alt+ BackspaceCtrl+ W。不确定控制台。Xmodmap(man xmodmap)也可以用于重新映射其他自定义键。(自相矛盾的是,xmodmap不能很好地重新映射Backspace,因为终端会覆盖映射,但是它可以与大多数键配合使用...)。


9
因为我以前在Emacs中使用Ctrl-Backspace键。我知道Ctrl-w。Alt-Backspace对我来说是新的(+1)。
Adobe

1
好点,@ hellork。您可以在X服务器上截获Control + Backspace(通过xmodmap)并将其映射到某些未使用的字符(例如alt-backspace)。

4
令人烦恼的是,在大多数主要操作系统上的大多数GUI应用程序中,ctrl +退格键都是“向后删除单词”的真正常见映射。同样,Ctrl + W广泛用于“关闭窗口”。我可以想到,Alt + w很少用于GUI中的任何内容。标准化会很棒。我想知道更大的中断,更改终端或更改GUI会是什么?
naught101

1
@ naught,Control-W已经是UNIX终端上的默认单词擦除键。是的,它与Windows / GUI约定冲突,但实际上它是最早出现的-已有很多年了。怪微软!
Alexis

11

我通过Google找到了这个主题,但是答案不是我想听到的。所以我玩了一下:

在我的终端上,普通退格键发送^H,而Ctrl + Backspace发送^?。因此,重新绑定^?以删除单词应该很简单,默认情况下可以通过Ctrl + W使用。

首先(尝试失败):

$ bind -P | grep 'C-w'
unix-word-rubout can be found on "\C-w".

因此,这应该工作:

$ bind '"\C-?":unix-word-rubout'

但是,没有……有人能够解释吗?

第二次(成功)尝试:

$ bind '"\C-?":"^W"'

其中的^W是文字/原始^W(按ctrl + V,然后按ctrl + W使其显示)。


实际上,您的第一个解决方案对我有用!第二没有。
德鲁·霍斯金斯

第二次尝试似乎是代替Backspace本身而不是Ctrl-Backspace吗?
user541686 '19

7

只需编辑您的~/.inputrc(您可能需要创建一个或在其中复制一个/etc/inputrc),使其包含:

# Ctrl-Delete: delete next word
"\e[3;5~": shell-kill-word

# Ctrl-Backspace
"\C-H": shell-backward-kill-word

这也将映射Ctrl+ Delete以删除光标旁边的单词。


对我不起作用。
乔纳森

6

这里有一些很好的答案,但是我在Konsole中使用“设置”->“编辑当前配置文件”->“键盘”->“编辑”解决了它,然后从添加了Backspace+Control到的映射\x17。(我使用找到了Ctrl-w的ASCII代码showkey --ascii。)


感谢您用指出问题showkey。因此我弄清楚了ALT+D要删除的光标前面的单词将对应于\x1b\x64
loki '18

谢谢,它解决了我的问题。就我而言,我需要重新映射Alt + Backspace,其顺序为 \x1b\x7f
DDMC,

3

那取决于bash看到了什么。在常规的终端交互中,bash不会看到您按下的键修饰符,只会看到生成的字符。例如,退格已经与control-H相同。按住换档或控制不起作用。

但是,您的终端应用程序(xterm?cmd?Terminal?Putty?取决于您的操作系统)可以看到您的按键,并且可以通过一种方法将Control-Backspace组合键映射到bash可以分辨的东西(除了退格键之外)。


我发现我的bash没有看到退格键。但是也许有可能让它看到这一点。
Adobe

@adobe,你是什么意思?在终端上输入“ stty”,然后阅读有关它的手册。如果将^ H设置为擦除字符,则可以将其设置为其他内容...如果您有充分的理由。

1
github.com/calj/gtconf/blob/master/zsh/zshrc上有一个很好的示例。Konsole让您做到这一点。将* .keytab文件之一从/ usr / share / kde4 / apps / konsole /复制到〜/ .kde / share / apps / konsole并使用上面链接中的建议进行修改,删除“ key Backspace”行并例如:添加:key Backspace-Shift-Control : "\x7f"并且key Backspace-Shift+Control : "\E[9;3~"还可以在标题行上更改标题行:keyboard "Xfree4 Modlist"。然后,您可以添加"\e[9;3~": backward-kill-word"到〜/ .inputrc
亚当(Adam

2

尝试这个:

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

(可选)将以下内容添加到〜/ .inputrc以使其永久:

"\C-_": backward-kill-word

在Kubuntu 14.04中使用bash 4.3.11进行工作


2
Control-backspace不太可能与Control-underscore相同。
托马斯·迪基

1
在我在该线程中尝试过的所有事情中,都行得通!在Windows / WSL上的bash上使用“ GNU bash版本4.3.48(1)-发行版(x86_64-pc-linux-gnu)”
Markus Jevring

使用,这对cygwin非常有用GNU bash, version 4.4.12(3)-release (x86_64-unknown-cygwin)
zagyi

1

在Konsole中:

  • 点击 Settings -> Edit current profile
  • 点击“键盘”标签-> [Edit...]
  • 单击[Add]按钮,然后在Key Combination列类型下Backspace+Ctrl。在Output列类型中0x08(通常是退格字符)

现在您应该可以将该键映射到backward-kill-wordvia

# ~/.bashrc

bind '"\x08":backward-kill-word'

谢谢。至少在xfce4-terminal中对我有用。
利蒙,

0

在大多数终端上,CTRL + W应该已经向后删除了一个单词。这适用于xterm,我猜它适用于konsole。CTRL + W是基于文本的程序上的标准键绑定,可在插入模式,emacs和每个shell中与vim一起使用。


5
我已将Ctrl-w绑定到Emacs,FireFox,Krusader中的“关闭选项卡”,因此我也将其设置为Konsole中的选项卡关闭组合。
Adobe
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.