终端下不支持行编辑时,输错了可以用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输入的)
6823 次点击
所在节点    Linux
26 条回复
rrfeng
2013-07-30 12:03:30 +08:00
Ctrl + e :移到命令行尾
Ctrl + f :按字符前移(右向)
Ctrl + b :按字符后移(左向)
Alt + f :按单词前移(右向)
Alt + b :按单词后移(左向)
Ctrl + xx:在命令行首和光标之间移动
Ctrl + u :从光标处删除至命令行首
Ctrl + k :从光标处删除至命令行尾
Ctrl + w :从光标处删除至字首
Alt + d :从光标处删除至字尾
Ctrl + d :删除光标处的字符
Ctrl + h :删除光标前的字符
Ctrl + y :粘贴至光标后
Alt + c :从光标处更改为首字母大写的单词
Alt + u :从光标处更改为全部大写的单词
Alt + l :从光标处更改为全部小写的单词
Ctrl + t :交换光标处和之前的字符
Alt + t :交换光标处和之前的单词
Alt + Backspace:与 Ctrl + w 相同类似,分隔符有些差别 [感谢 rezilla 指正]
重新执行命令

Ctrl + r:逆向搜索命令历史
Ctrl + g:从历史搜索模式退出
Ctrl + p:历史中的上一条命令
Ctrl + n:历史中的下一条命令
Alt + .:使用上一条命令的最后一个参数
控制命令

Ctrl + l:清屏
Ctrl + o:执行当前命令,并选择上一条命令
Ctrl + s:阻止屏幕输出
Ctrl + q:允许屏幕输出
Ctrl + c:终止命令
Ctrl + z:挂起命令
Bang (!) 命令

!!:执行上一条命令
!blah:执行最近的以 blah 开头的命令,如 !ls
!blah:p:仅打印输出,而不执行
!$:上一条命令的最后一个参数,与 Alt + . 相同
!$:p:打印输出 !$ 的内容
!*:上一条命令的所有参数
!*:p:打印输出 !* 的内容
^blah:删除上一条命令中的 blah
^blah^foo:将上一条命令中的 blah 替换为 foo
^blah^foo^:将上一条命令中所有的 blah 都替换为 foo



===========================
随便找的,不客气……
bitsmix
2013-07-30 12:05:04 +08:00
Ctrl-x e
felix021
2013-07-30 12:05:20 +08:00
@rrfeng 谢谢,不过你似乎没有看明白我说的是什么。
felix021
2013-07-30 12:06:51 +08:00
@bitsmix
@rrfeng

你们可以试试执行 read 命令,看看这些快捷键好使不。或者是在ssh时输错了密码。
soli
2013-07-30 12:11:50 +08:00
安装 readline
felix021
2013-07-30 12:13:53 +08:00
@soli 谢谢,不过我希望你能参考我前面的回复,确认你明白我说的是啥。
beakey
2013-07-30 12:23:13 +08:00
为什么上面几个都不明白你说的是啥?我也不明白,但是在item2中配置快捷键 opt + del 对应0x1B 0x08 再终端就可以用opt+del 向前删除一个单词,这个和其他地方就统一了= =
delo
2013-07-30 12:29:43 +08:00
felix021
2013-07-30 12:36:37 +08:00
@delo
@beakey

嗯 这么多人都没看明白,肯定就是我没描述清楚了,举例就是你执行 read 命令,然后输入,1L 上面提到的那一堆快捷键都没用。
limusi
2013-07-30 12:44:52 +08:00
这种记命令的,果断用everitps

http://evertips.info/topics/50a35c7e273f0224f5000004
rrfeng
2013-07-30 12:49:24 +08:00
@felix021
是我没看清,不过你的问题有个简单的办法啊

大部分情况下,ctrl + backspace 就可以正常删除了
felix021
2013-07-30 13:16:12 +08:00
@rrfeng 噢 原来还可以按下CTRL键...
detailyang
2013-07-30 13:17:19 +08:00
终端不是可以开启VI-Mode吗..
zava
2013-07-30 13:20:56 +08:00
这就是 readline 啊。。
felix021
2013-07-30 13:30:03 +08:00
@delo
@detailyang
@zava
这不是readline,也跟vi/emacs mode无关,详见帖子的补充说明。
delo
2013-07-30 14:04:19 +08:00
呃,好吧,即使在read命令下,或者在Login/SSH输错密码的情况下,可以试试ctrl u
whuhacker
2013-07-30 14:04:30 +08:00
@felix021 其实 Delete 键也可以……
Ctrl + W 已经作为图形界面下关闭快捷键用习惯了
felix021
2013-07-30 14:46:37 +08:00
@delo 赞Ctrl+U

@whuhacker 试了下delete的效果是这样:
$ read
y^[[3~
txgcwm
2013-07-30 16:55:55 +08:00
无处不见@felix021 的身影啊!
felix021
2013-07-30 19:42:59 +08:00
@txgcwm 。。。我也是最近才刷得比较多,这貌似是第二个帖子

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

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

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

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

© 2021 V2EX