|
搜索了一下版区的旧帖,发现只有一个帖子涉及到命令行编辑,而且不怎么全面。我在这里总结一下。
Bash的命令行编辑是区别于其他shell如csh的一个特色,它使得命令的输入就像在emacs或vi里编辑文件一样便捷,尤其对于一些冗长且复杂的命令的构造。熟练命令行编辑主要是为了使系统管理高效化。
Bash命令行编辑的默认模式是交互式emacs模式。
切换可用模式或关闭模式:
- set -o emacs #设置emacs模式
- set -o vi #设置vi模式
- bash -noediting #关闭命令行编辑
复制代码
要注意的是,命令行编辑的快捷键与UNIX终端接口设置的控制键存在潜在的不协调。我会在相关命令加以说明。
由于我不熟悉vi模式,所以只好给出我熟悉的emacs模式。希望vi强的兄弟补上。
1. 基本emacs模式命令
- CTRL-b # 光标向前移动一个字符
- CTRL-f # 光标向后移动一个字符
- DEL # 向后删除一个字符
- CTRL-d # 向前删除一个字符。注意,命令行为空时,CTRL-D会退出登录!
复制代码
2. 单词命令 (以单词作为操作单位有时侯更方便些; 这些是复合命令,方法是按下ESC键后,再按一个字母)
emacs用"删除环"来作为"删除内容"的回收站。
这里的单词被定义为字母数字序列。
这里的条目可以是删除了的单词,句子或文本块。
- ESC-b # 向后移动一个单词
- ESC-f # 向前移动一个单词
- CTRL-w # 向后删除一个单词
- ESC-d # 向前删除一个单词
- CTRL-y # 恢复删除环中最后一个条目
- ESC-p # 恢复删除环中的上一个条目
- ESC-n # 恢复删除环中的下一个条目
复制代码
3. 行命令
- CTRL-a # 移动到行首
- CTRL-e # 移动到行尾
- CTRL-k # 向前删除到行尾
复制代码
4. 在命令历史文件中移动
- CTRL-p # 调出上一条命令
- CTRL-n # 调出下一条命令
- CTRL-r # 递增交互式查找历史命令
- ESC-< # 调出历史文件的第一条命令
- ESC-> # 调出历史文件的最后一条命令
复制代码
这里值得说明的是CTRL-r这条命令。类似emacs的递增查找,它会随着你的键入在历史命令文件中实时进行查找工作。键入CTRL-r后,在行首出现(reverse-i-search)`':。
举例如下:
- [root@home root]# id
- uid=0(root) gid=0(root) groups=0(root),1(bin),2(daemon),3(sys),4(adm),6(disk),10(wheel)
- (reverse-i-search)`id': id
- # 这时候有两种选择。
- # 若按下Enter确认
- [root@home root]# id
- uid=0(root) gid=0(root) groups=0(root),1(bin),2(daemon),3(sys),4(adm),6(disk),10(wheel)
- # 若想退出,按CTRL-g
- [root@home root]#
复制代码
这种递增交互命令查找很方便我们寻找一些复杂命令,尤其当历史列表中命令条目很多的时候。
4.文字完成
emacs模式一个最重要的特性式其文字完成功能。
- TAB # 众所周知,这是最重要的文字完成快捷键,它试图执行文本的一般性完成
- ESC-? # 列出所有可能的完成
- ESC-/ # 试图进行文件名而非函数或命令的完成
复制代码
TAB和ESC-?的区别是当遇到可选项时,按两次TAB才能实现ESC-?的功能。
其实还有很多其他的文字完成快捷键,不过都不常用,就不列出了。
5.杂项命令
- CTRL-m # 等同于RETURN
- CTRL-l # 清除屏幕,等同于clear命令
- CTRL-o # 等同于RETURN,随后显示命令历史中的下一个命令
- CTRL-t # 颠倒光标左右的两个字符
- ESC-t # 颠倒光标左右的两个单词
- CTRL-u # 删除当前行
- CTRL-v # 引用插入,这就是"转义快捷键"
- CTRL-[ # 等同于ESC
- ESC-c # 光标处单词首字母大写
- ESC-u # 光标处单词大写
- ESC-l # 光标处单词小写
- ESC-. # 在光标后插入前面命令行中的最后一个单词
复制代码
CTRL-o对于执行命令序列很有用。
CTRL-v可以把复合键转义,比如键入CTRL-m,就变成^M。
执行操作对象为同一个文件的命令序列,而且该文件的路径冗长时,ESC-.很有用,举例如下:
- [root@home root]# cat /usr/share/apps/kit/kitui.rc
- ...
- [root@home root]# more
- # 按ESC-.,自动补足上一个命令行的最后一个单词(路径名)
- [root@home root]# more /usr/share/apps/kit/kitui.rc
复制代码
Tip: 再按一下ESC-.,则会显示出再上一条历史条目,如此类推。 |
|