Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2291845
  • 博文数量: 168
  • 博客积分: 6641
  • 博客等级: 准将
  • 技术积分: 1996
  • 用 户 组: 普通用户
  • 注册时间: 2007-06-02 11:49
文章存档

2020年(4)

2019年(6)

2017年(1)

2016年(3)

2015年(3)

2014年(8)

2013年(2)

2012年(12)

2011年(19)

2010年(10)

2009年(3)

2008年(17)

2007年(80)

分类: LINUX

2007-11-23 14:57:16

linux/unix命令行终端的光标及字符控制快捷键

2007-11-23 TsengYia 整理

在使用linux/unix的命令行终端时,有时候会碰到键盘的退格键、删除键、Home键、方向键等不听使唤的现象:
    按Backspace键,可能冒出来个^?
    按Delete键,却出来个^[[3~
    按Home键,却出来个^[[1~
    按向左箭头键,却出来个^[[D
    ……    

以下是在大多数shell终端都可以使用的快捷键,可以解决上述光标及字符删除等控制功能。
── 曾尝试使用stty解决Home键等问题,未果(可参考:)


注:如果使用图形环境的伪终端(如gnome-terminal),以下有可能和窗口程序的一部分快捷键产生冲突。


****************************************************************************************************
常用的快捷键:

Ctrl + d        删除一个字符,相当于通常的Delete键(命令行若无任何字符,则相当于exit;处理多行标准输入时也表示eof)
Ctrl + h        退格删除一个字符,相当于通常的Backspace键
Ctrl + u        删除光标之前到行首的字符
Ctrl + k        删除光标之前到行尾的字符
Ctrl + c        取消当前行输入的命令,相当于Ctrl + Break

Ctrl + a        光标移动到行首(Ahead of line),相当于通常的Home键
Ctrl + e        光标移动到行尾(End of line)
Ctrl + f        光标向前(Forward)移动一个字符位置
Ctrl + b        光标往回(Backward)移动一个字符位置

Ctrl + l        清屏,相当于执行clear命令
Ctrl + p        调出命令历史中的前一条(Previous)命令,相当于通常的上箭头
Ctrl + n        调出命令历史中的下一条(Next)命令,相当于通常的上箭头
Ctrl + r        显示:号提示,根据用户输入查找相关历史命令(reverse-i-search)
****************************************************************************************************
次常用快捷键:

Alt + f         光标向前(Forward)移动到下一个单词
Alt + b         光标往回(Backward)移动到前一个单词

Ctrl + w        删除从光标位置前到当前所处单词(Word)的开头
Alt + d         删除从光标位置到当前所处单词的末尾

Ctrl + y        粘贴最后一次被删除的单词

****************************************************************************************************

附录:  stty命令参考        来源:

命令参考大全,卷 5,s - u
stty 命令

用途
设置、复位和报告工作站操作参数。

语法
stty [ -a ] [ -g ] [ Options ]

描述
stty 命令对当前为标准输入的设备设置某些 I/O 选项。该命令将输出写到当前为标准输出的设备中。

这个操作系统的版本使用标准 《X/Open 可移植性指南,发行版 4》 接口来控制终端,保持与 POSIX 和 BSD 接口的兼容性。stty 命令支持 POSIX 和 BSD 的适应选项,但强烈推荐使用 POSIX 选项。同样提供废弃的 BSD 选项列表(带有对应的 POSIX 选项)。

输入以下命令时,可以将 tty 设备的标准输入重定向:


 stty -a
标志

-a 将所有选项设置的当前状态写到标准输出中。
-g 将选项设置写到标准输出中,其格式可以由另一个 stty 命令使用。

选项
stty 命令支持以下选项类别:

控制模式
输入方式
输出方式
本地模式
硬件流量控制模式
控制字符指定
组合模式
窗口大小
控制模式  
clocal 假定一行没有调制解调器控制。
-clocal 假定一行带有调制解调器控制。
cread 启用接收器。
-cread 禁用接收器。
cstopb 每个字符选择两个停止位。
-cstopb 每个字符选择一个停止位。
cs5, cs6, cs7, cs8 选择字符大小。
hup, hupcl 最后关闭时挂起拨号连接。
-hup, -hupcl 最后关闭时不挂起拨号连接。
parenb 启用奇偶性校验的生成和检测。
-parenb 禁用奇偶性校验的生成和检测。
parodd 选择奇校验。
-parodd 选择偶校验。
0 立即挂起电话线路。
speed 将工作站输入和输出速度设置为指定的 speed 数(以位/秒为单位)。并不是所有的硬件接口都支持所有的速度。speed 的可能值有:50、75、110、134、200、300、600、1200、1800、2400、4800、9600、19200、19.2、38400、38.4、exta 和  extb。
注:
exta、19200 和 19.2 是同义词;extb、38400 和 38.4 是同义词。
ispeed speed 将工作站输入速度设置为指定的 speed 数(以位/秒为单位)。并不是所有的硬件接口都支持所有的速度,而且并不是所有的硬件接口都支持该选项。 speed 的可能值与 speed 选项相同。
ospeed speed 将工作站输出速度设置为指定的 speed 数(以位/秒为单位)。并不是所有的硬件接口都支持所有的速度,而且并不是所有的硬件接口都支持该选项。 speed 的可能值与 speed 选项相同。
 
输入模式
brkint 中断时发出 INTR 信号。
-brkint 中断时不发出 INTR 信号。
icrnl 输入时将 CR 映射为 NL。
-icrnl 输入时不将 CR 映射为 NL。
ignbrk 输入时忽略 BREAK。
-ignbrk 输入时不忽略 BREAK。
igncr 输入时忽略 CR。
-igncr 输入时不忽略 CR。
ignpar 忽略奇偶错误。
-ignpar 不忽略奇偶错误。
inlcr 输入时将 NL 映射为 CR。
-inlcr 输入时不将 NL 映射为 CR。
inpck 启用奇偶校验。
-inpck 禁用奇偶校验。
istrip 将输入字符剥离到 7 位。
-istrip 不将输入字符剥离到 7 位。
iuclc 将大写字母字符映射为小写。
-iuclc 不将大写字母字符映射为小写。
ixany 允许任何字符重新启动输出。
-ixany 只允许 START(Ctrl-Q 按键顺序)重新启动输出。
ixoff 当输入队列接近空或满时,发送 START/STOP 字符。
-ixoff 不发送 START/STOP 字符。
ixon 启用 START/STOP 输出控制。一旦启用 START/STOP 输出控制,您可以按下 Ctrl-S 按键顺序暂停向工作站的输出,也可按下 Ctrl-Q 按键顺序恢复输出。
-ixon 禁用 START/STOP 输出控制。
imaxbel 当输入溢出时,回送 BEL 字符并且废弃最后的输入字符。
-imaxbel 当输入溢出时,废弃所有输入。
parmrk 标记奇偶错误。
-parmrk 不标记奇偶错误。
 
输出方式
bs0, bs1 为退格符选择延迟样式(bs0 表示没有延迟)。
cr0,  cr1, cr2, cr3 为 CR 字符选择延迟样式(cr0 表示没有延迟)。
ff0, ff1 为换页选择延迟样式(ff0 表示没有延迟)。
nl0, nl1 为 NL 字符选择延迟样式(nl0 表示没有延迟)。
ofill 使用延迟填充字符。
-ofill 使用延迟定时。
ocrnl 将 CR 字符映射为 NL 字符。
-ocrnl 不将 CR 字符映射为 NL 字符。
olcuc 输出时将小写字母字符映射为大写。
-olcuc 输出时不将小写字母字符映射为大写。
onlcr 将 NL 字符映射为 CR-NL 字符。
-onlcr 不将 NL 字符映射为 CR-NL 字符。
onlret 在终端 NL 执行 CR 功能。
-onlret 在终端 NL 不执行 CR 功能。
onocr 不在零列输出 CR 字符。
-onocr 在零列输出 CR 字符。
opost 处理输出。
-opost 不处理输出;即忽略所有其它输出选项。
ofdel 使用 DEL 字符作为填充字符。
-ofdel 使用 NUL 字符作为填充字符。
tab0, tab1, tab2 为水平制表符选择延迟样式(tab0 表示没有延迟)。
tab3 扩展制表符至多个空格。
vt0, vt1 为垂直制表符选择延迟样式(vt0 表示没有延迟)。
 
本地模式
echo 回送每个输入的字符。
-echo 不回送字符。
echoctl 以 ^X(Ctrl-X)回送控制字符,X 是将 100 八进制加到控制字符代码中给出的字符。
-echoctl 不以 ^X(Ctrl-X)回送控制字符。
echoe 以“backspace space backspace”字符串回送 ERASE 字符。
注:
该模式不保持对列位置的跟踪,因此您可能在擦除制表符和转义序列等符号时得到意外的结果。
-echoe 不回送 ERASE 字符,只回送退格符。
echok 在 KILL 字符后回送 NL 字符。
-echok 在 KILL 字符后不回送 NL 字符。
echoke 通过擦除输出行上的每个字符,回送 KILL 字符。
-echoke 只回送 KILL 字符。
echonl 回送 NL 字符。
-echonl 不回送 NL 字符。
echoprt 以 /(斜杠)和 \ (反斜杠) 向后回送擦除的字符。
-echoprt 不以 /(斜杠)和 \ (反斜杠) 向后回送擦除的字符。
icanon 启用规范输入(规范输入允许使用 ERASE 和 KILL 字符进行输入行的编辑)。请参阅 AIX 5L Version 5.2 Communications Programming Concepts 中的 Line Discipline Module (ldterm) 中关于 canonical mode input 的讨论。
-icanon 禁用规范输入。
iexten 指定从输入数据中识别实现性定义的功能。要识别以下控制字符,需要设置 iexten:eol2、dsusp、reprint、discard、werase、lnext。与这些模式关联的功能也需要设置 iexten:imaxbel、echoke、echoprt、echoctl。
-iexten 指定从输入数据中识别实现性定义的功能。
isig 启用对特殊控制字符(INTR、SUSP 和 QUIT 特殊控制字符)的字符检查。
-isig 禁用对特殊控制字符(INTR、SUSP 和 QUIT 特殊控制字符)的字符检查。
noflsh 不清除 INTR、SUSP 或 QUIT 控制字符之后的缓冲区。
-noflsh 清除 INTR、SUSP 或 QUIT 控制字符之后的缓冲区。
pending 下次读操作暂挂或输入到达时,要重新输入从原始模式转换为规范模式后被暂挂的输入。暂挂是一个内部状态位。
-pending 没有文本暂挂。
tostop 为背景输出发出 SIGTOU 信号。
-tostop 不为背景输出发出 SIGTOU 信号。
xcase 在输入中回送大写字符,并在输出显示的大写字符之前加上 \ (反斜杠)。
-xcase 不在输入时回送大写字符。

硬件流量控制模式
这些选项是对 《X/Open 可移植性指南,发行版 4》 标准的扩展。

cdxon 输出时启用 CD 硬件流量控制模式。
-cdxon 输出时禁用 CD 硬件流量控制模式。
ctsxon 输出时启用 CTS 硬件流量控制模式。
-ctsxon 输出时禁用 CTS 硬件流量控制模式。
dtrxoff 输入时启用 DTR 硬件流量控制模式。
-dtrxoff 输入时禁用 DTR 硬件流量控制模式。
rtsxoff 输入时启用 RTS 硬件流量控制模式。
-rtsxoff 输入时禁用 RTS 硬件流量控制模式。

控制指定
要将一个控制字符指定到某字符串中,请输入:


stty Control String其中,Control 参数可以是 INTR、QUIT、ERASE、KILL、EOF、EOL、EOL2、START、STOP、SUSP、DSUSP、
REPRINT、DISCARD、WERASE、LNEXT、MIN 或 TIME 参数。(使用字符 MIN 和 TIME 时,请加上 -icanon 选项。)

注:
MIN 和 TIME 的值解释为整数值,而不是字符值。
String 参数可以是任何单一的字符,比如 c。以下内容为控制赋值的示例:


stty STOP c另一种指定控制字符的方法可以是:输入一个字符序列,它是由一个  \^ (反斜杠,插入记号) 后面跟着一个单一字符组成的。如果跟在 ^ (插入记号)后的单一字符是下表的 ^c(插入记号 c)栏中列出的字符之一,将设置相应的控制字符值。例如,要使用 ?(问号)字符指定 DEL 控制字符,请输入字符串 \^?(反斜杠,插入记号,问号),如下:


stty ERASE \^?
stty 中的插入记号控制字符 ^c 替换值 ^c 替换值 ^c 替换值
a, A l, L w, W
b, B m, M x, X
c, C n, N y, Y
d, D o, O z, Z
e, E p, P [
f, F q, Q \
g, G r, R ]
h, H s, S ^
i, I t, T _
j, J u, U ?
k, K v, V @
组合模式  
cooked 请参阅 -raw 选项。
ek 分别将 ERASE 和 KILL 字符设置为 Ctrl-H 和 Ctrl-U 按键顺序。
evenp 启用 parenb 和 cs7。
-evenp 禁用 parenb 并设置 cs8。
lcase, LCASE 设置 xcase,iuclc 和 olcuc。在工作站只以大写字符使用。
-lcase, -LCASE 设置 -xcase、-iuclc 和 -olcuc。
nl 设置 -icrnl 和 -onlcr。
-nl 设置 icrnl、 onlcr、-inlcr、-igncr、-ocrnl 和 -onlret。
oddp 启用 parenb、 cs7 和 parodd。
-oddp 禁用 parenb 并设置 cs8。
parity 请参阅 evenp 选项。
-parity 请参阅 -evenp 选项。
sane 将参数重新设置为合理的值。
raw 允许原始模式输入(不包括输入处理,例如 erase、kill 或 interrupt);传回奇偶(校验)位。
-raw 允许规范输入方式。
tabs 保留制表符。
-tabs, tab3 打印时将制表符替换为空格。
窗口大小  
cols n, columns n 将终端(窗口)大小记录为有 n 列。
rows n 将终端(窗口)大小记录为有 n 行。
size 将终端(窗口)大小打印到标准输出(先是行,再是列)中。

废弃选项
stty 命令支持以下 BSD 选项。 对于每个选项,都给出了建议的 POSIX 选项。

all 使用 stty -a 命令显示所有当前设置。
crt 使用 sane 选项将参数重新设置为合理的值。
crtbs 使用 -echoe 选项。
crterase 使用 echoe 选项。
-crterase 使用 -echoe 选项。
crtkill 使用 echoke 选项。
-crtkill 使用 echok 和 -echoke 选项。
ctlecho 使用 echoctl 选项。
-ctlecho 使用 -echoctl 选项。
decctlq 使用 -ixany 选项。
-decctlq 使用 ixany 选项。
even 使用 evenp 选项。
-even 使用 -evenp 选项。
everything 使用 stty -a 命令显示所有当前设置。
litout 使用 -opost 选项。
-litout 使用 opost 选项。
odd 使用 oddp 选项。
-odd 使用 -oddp 选项。
pass8 使用 -istrip 选项。
-pass8 使用 istrip 选项。
prterase 使用 echoprt 选项。
speed 使用 stty 命令显示当前设置。
tandem 使用 ixoff 选项。
-tandem 使用 -ixoff 选项。

示例
要显示您的工作站配置的简短列表,请输入:

stty这将列出与缺省值不同的设置。

要显示您的工作站配置的完整列表,请输入:
stty  -a

要启用按键顺序来停止列表滚动出屏幕,请输入:

stty ixon ixany这将设置 ixon 模式,从而可以通过按下 Ctrl-S 按键顺序来停止列表的滚动。ixany 标志允许按任意键来恢复列表的滚动。正常的工作站配置包含 ixon 和 ixany 标志,使您可以用 Ctrl-S 按键顺序停止列表的滚动,而只有 Ctrl-Q 按键顺序才能使列表重新滚动。

要重新设置搞乱的配置,请输入:
Ctrl-J stty  sane Ctrl-J
在命令前后按 Ctrl-J 按键顺序,而不是按 Enter 键。当控制 Enter 键处理的参数搞乱时,系统通常能识别 Ctrl-J 按键顺序。
有时屏幕上显示的信息可能看上去很奇怪,或当您按 Enter 键时系统不反应。当您使用 stty 命令,而它带有不兼容的参数或参数的操作难以理解时,可能会发生这种情况。当面向屏幕的应用程序异常结束并且无法复位工作站配置时,也可能发生这种情况。

输入 stty sane 命令设置合理的配置,但它可能与您的正常配置略有不同。

要保存和恢复终端的配置:

OLDCONFIG=`stty -g`          # save configuration
stty -echo                   # do not display password
echo "Enter password: \c"
read PASSWD                  # get the password
stty $OLDCONFIG              # restore configuration该命令保存工作站的配置、关闭回送信号、读取密码并恢复原始配置。

输入 stty - echo 命令关闭回送信号,这意味着当您在键盘上输入密码时,密码并不出现在屏幕上。此操作与 echo 命令(该命令在屏幕上显示消息)毫无关系。

文件

/usr/bin/stty 包含 stty 命令。

相关信息
terminfo 文件、tty 特殊文件 termios.h 头文件。

AIX 5L Version 5.2 General Programming Concepts: Writing and Debugging Programs 中的 TTY Subsystem Overview。

在 AIX 5L Version 5.2 General Programming Concepts: Writing and Debugging Programs 中的 ldterm Line Discipline。

AIX 5L Version 5.2 National Language Support Guide and Reference 中的 National Language Support。


阅读(4210) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~

jjlee2009-06-15 08:15:35

无意间就搜到曾老师这篇文章 哈哈