我正在尝试从长期使用 Tcsh 转向最近对 Bash 的探索。
我设法移植了所有我最喜欢的功能,除了 Ctrl+w 将空格和斜杠视为单词边界,最有可能是向后删除单词。然而,在 Bash 中 readline 一直删除到第一个空格,删除之间的所有斜杠。
我已经使用 bind 在 .inputrc 和 .bashrc 中尝试了许多不同的 \Cw:backward-kill-word 组合,但我无法让它以我想要的方式工作。
有趣的是,通过工作中的 Windows 中的 Putty,我可以使用 Alt+Backspace(手册中也说这是默认绑定)来产生我想要的确切行为。但是在我家里的 Mac 上的 Terminal.app 中,这不起作用。我碰巧从 Terminal.app 登录的任何 FreeBSD 或 Linux 服务器也是如此。
所以我转向超级用户寻求帮助。
use*_*686 40
readline
不绑定Ctrl-W因为它默认由终端驱动程序处理:
$ stty -a
(...) werase = ^W; (...)
Run Code Online (Sandbox Code Playgroud)
要禁用此功能,您必须运行(在 中~/.bashrc
):
stty werase undef
bind '"\C-w": backward-kill-word'
Run Code Online (Sandbox Code Playgroud)
.inputrc
在这里不会有帮助,因为它是在Ctrl-W仍然分配给werase
.
另请注意,\C-w
格式 keyeqs 必须用双引号括起来,如上所述。
不同的终端可以处理Alt-Backspace不同。
1b 7f
( ESC DEL
)metaSendsEscape: true
发送1b 08
( ESC BS
) 的Xterm 。metaSendsEscape
发送88
(HTS
,或BS
设置最高位)。Xterm 有一些设置来控制Alt键的行为(Meta通常在 Xterm 和 X11 中调用)。使用metaSendsEscape
,holdAlt将在按键前加上ESC
(hex 1b
)。如果不设置(默认模式),Alt将设置输入字符的最高位,产生特殊字符。(例如,Alt-分别N导致ESC n
和î
。)
据我所知,Terminal.app 也有类似的设置来控制 Meta/Alt/whatever-Macs-use 的行为。
fja*_*rlq 19
grawity 写道,这无法在.inputrc
文件中控制,但这是不正确的。
如果您set bind-tty-special-chars off
在 中.inputrc
,则可以自定义特殊终端字符的行为。
例如:
set bind-tty-special-chars off
Control-u: kill-whole-line
Control-w: backward-kill-word
Run Code Online (Sandbox Code Playgroud)