终端下不支持行编辑时,输错了可以用Ctrl+W来删除前面的内容
- 0次
- 2021-07-21 11:41:26
- idczone
原先输错了以后习惯性地按下 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输入的)
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
===========================
随便找的,不客气……
Ctrl-x e
谢谢,不过你似乎没有看明白我说的是什么。
你们可以试试执行 read 命令,看看这些快捷键好使不。或者是在ssh时输错了密码。
安装 readline
谢谢,不过我希望你能参考我前面的回复,确认你明白我说的是啥。
为什么上面几个都不明白你说的是啥?我也不明白,但是在item2中配置快捷键 opt + del 对应0x1B 0x08 再终端就可以用opt+del 向前删除一个单词,这个和其他地方就统一了= =
http://www.bigsmoke.us/readline/shortcuts
@beakey
嗯 这么多人都没看明白,肯定就是我没描述清楚了,举例就是你执行 read 命令,然后输入,1L 上面提到的那一堆快捷键都没用。
这种记命令的,果断用everitps
http://evertips.info/topics/50a35c7e273f0224f5000004
是我没看清,不过你的问题有个简单的办法啊
大部分情况下,ctrl + backspace 就可以正常删除了
噢 原来还可以按下CTRL键...
终端不是可以开启VI-Mode吗..
这就是 readline 啊。。
这不是readline,也跟vi/emacs mode无关,详见帖子的补充说明。
呃,好吧,即使在read命令下,或者在Login/SSH输错密码的情况下,可以试试ctrl u
其实 Delete 键也可以……
Ctrl + W 已经作为图形界面下关闭快捷键用习惯了
赞Ctrl+U
试了下delete的效果是这样:
$ read
y^[[3~
无处不见的身影啊!
。。。我也是最近才刷得比较多,这貌似是第二个帖子
感谢,很实用啊!
stty 的问题。 看看你 stty -a 下面 erase 的定义是什么.
"erase = ^?",我一般都用SecureCRT,emulation是xterm。
光看 erase 不够,要看看你的 terminal emulator 的 backspace 发送的是什么,C-v 然后 backspace 看看。
补充上条。
光看 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))。
多谢,我试了下,BS的输入是^H,但stty -a中erase是^?,执行 ·stty erase "^H"· 以后bs可以正常回删字符了:D