终端下不支持行编辑时,输错了可以用Ctrl+W来删除前面的内容

2013-07-30 12:01:40 +08:00
 felix021
原先输错了以后习惯性地按下 Backspace ,结果相当于多输入了一个字符^H,于是只好CTRL+C干掉,然后重新执行那个命令。

某次无意中发现的,ctrl+w可以删除光标前面的一个“单词”,然后各种试用以后发现适用范围还挺广的,包括但不限于:

1. Login/SSH输错密码。可能要按多次ctrl+w
2. cp/rm/mv -i 的时候要求输入 y 时输错了
3. sudo apt-get install/remove/upgrade 要求输入 y 时输错了
4. 其他零零散散各种脚本中用read命令输入的情况(2和3可能也是用read输入的)
7051 次点击
所在节点    Linux
26 条回复
falconeye
2013-07-30 22:16:53 +08:00
感谢,很实用啊!
iveney
2013-07-31 08:13:16 +08:00
stty 的问题。 看看你 stty -a 下面 erase 的定义是什么.
felix021
2013-07-31 09:02:41 +08:00
@iveney "erase = ^?",我一般都用SecureCRT,emulation是xterm。
iveney
2013-08-01 05:46:38 +08:00
光看 erase 不够,要看看你的 terminal emulator 的 backspace 发送的是什么,C-v 然后 backspace 看看。
iveney
2013-08-01 05:55:29 +08:00
补充上条。

@felix021 光看 erase 不够,要看看你的 terminal emulator 的 backspace 发送的是什么,C-v 然后 按 backspace 看看是不是跟 stty 定义一样。

比如我在 PuTTY 里如果设置了 backspace 发送 ^H 但是 stty 的 erase 定义为 ^?,那么你在 cp -i 里面机会出问题,你必须把它们设置为相同的 value,either ^H (ASCII BS (0x08)) or ^? ( ASCII DEL (0x7f))。
felix021
2013-08-01 08:55:04 +08:00
@iveney 多谢,我试了下,BS的输入是^H,但stty -a中erase是^?,执行 ·stty erase "^H"· 以后bs可以正常回删字符了:D

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/77397

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX