免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 4093 | 回复: 10
打印 上一主题 下一主题

Bash 命令行编辑(Emacs)-----Make you move faster! [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-04-15 18:06 |只看该作者 |倒序浏览
Bash使用GNU的readline library 来处理命令行
readline library可以使用和vim/emacs一样的两套快捷键方式
这样,大家习惯使用了vim/emacs的话,可以很数量的编辑Bash命令行
或者相反

Bash缺省的在emacs编辑模式下

下面所有例子使用 ‘[]‘ 代表光标位置.

例1: 光标移动基础

假设,你在命令行的末尾,想把光标向前移动三个单词

$ echo word1 word2 word3 word4 word5 word6[]
如果你输入M-3,再输入M-b,就可以达到目的,结果如下

$ echo word1 word2 word3 []word4 word5 word6
也可以连续输入三次M-b: M-b M-b M-b

M-3:就是把执行次数的参数设为3(缺省值应该是1,I guess )
在上面的情况下,就是设置了M-b的执行次数
M-b:调用backward-word 函数(做什么就不用我说了吧?)
执行次数的参数可以为负, 负代表执行方向的不同(正的想左/前,负的?右/后)

部分移动快捷键(都是自解释闭包):
C-a :beginning-of-line
C-e :end-of-line
C-f  :forward-char
C-b :backward-char
M-f  :forward-word
M-b :backward-word
C-l  :clear-screen

例2: 自动完成(Not just Tab )

如果你想迅速列出系统中的所有用户,怎么做?

输入C-x ~ read-line将通过username completion把所有用户名输出到终端

$ []
adm        catonmat   ftp        halt       mailnull   nobody     root       smmsp      vcsa
apache     cpanel     games      lp         mysql      nscd       rpc        sshd
bin        daemon     gopher     mail       named      operator   rpm        sync
cat        dbus       haldaemon  mailman    news       picurls    shutdown   uucp
$ []

如果你想迅速列出系统中的所有'm'开头的用户(Still Tab?)
输入 ‘m’,然后输入 C-x ~ 即可

$ m[]
mail      mailman   mailnull  mysql
$ m[]

其他有趣的自动列表/完成注意自动列表和自动完成的不同 )

    * C-x / 文件名自动完成列表(Tab?),
    * C-x $ bash环境变量自动完成列表(Amazing!),
    * C-x @ hostname自动完成列表,
    * C-x ! 命令自动完成列表

    * Meta-/ 文件名自动完成,
    * Meta-$ bash环境变量自动完成(Amazing!),
    * Meta-@ hostname自动完成,
    * Meta-! 命令自动完成.

例3: killing and yanking? 对了就是Copy&ast
(这点linux和Win差别很大,很多人不习惯)

Linux下面,killing的东西放到了killing ring里面,可以通过yanking来访问

$ command a-long-word-like-this []

输入C-w 向后删除一个单词,得到如下结果:

$ command []

输入C-y to yank (paste) 单词任意次数(3 次?):

$ command a-long-word-like-this a-long-word-like-this a-long-word-like-this []

kill ring不仅仅包含最后一次的killing. 它可以包含多个killing的结果并且用M-y来遍历(记得,它叫ring )

最后一个例子:
如果输入一个很长的命令,但是发现部分单词大写了,怎么办?(凉办!一个一个手工改?)
有了read-line,咱快办!
1) M-l (Meta-l (可能是 ESC-l)) 快捷键调用readline’s downcase-word 函数(功能?不言自明了).
2) M-b 快捷键调用readline’s backward-word function,把光标想左/前移动一个单词的位置
3) M- 快捷键调用readline’s numeric-argument 函数

$ echo the text. THE TEXT GOT TYPED IN CAPITAL LETTERS[]

移动到'THE'之前:M-7 M-b
$ echo the text. []THE TEXT GOT TYPED IN CAPITAL LETTERS

全部变成小写:M-7 M-l

$ echo the text. the text got typed in capital letters[]

附件是Bash emacs编辑模式cheat sheet

readline-emacs-editing-mode-cheat-sheet.pdf

64.83 KB, 下载次数: 99

评分

参与人数 1可用积分 +15 收起 理由
swordfish.cn + 15 谢谢分享。

查看全部评分

论坛徽章:
0
2 [报告]
发表于 2009-04-15 20:10 |只看该作者

回复 #1 phantomblue 的帖子

开发的用户是必须要会使用的linux的工具

论坛徽章:
1
寅虎
日期:2014-11-30 21:25:54
3 [报告]
发表于 2009-04-15 21:40 |只看该作者
原帖由 phantomblue 于 2009-4-15 18:06 发表
Bash使用GNU的readline library 来处理命令行
readline library可以使用和vim/emacs一样的两套快捷键方式
这样,大家习惯使用了vim/emacs的话,可以很数量的编辑Bash命令行
或者相反

Bash缺省的在emac ...


原文作者的blog
很专业 awk sed 脚本非常强大
我平时都用vi模式 顺便把vi的sheet放上来吧

bash-vi-editing-mode-cheat-sheet.pdf

77.95 KB, 下载次数: 63

论坛徽章:
0
4 [报告]
发表于 2009-04-15 23:55 |只看该作者
太好了,谢谢了,不过emacs学起来太痛苦了

论坛徽章:
5
摩羯座
日期:2014-07-22 09:03:552015元宵节徽章
日期:2015-03-06 15:50:392015亚冠之大阪钢巴
日期:2015-06-12 16:01:352015年中国系统架构师大会
日期:2015-06-29 16:11:2815-16赛季CBA联赛之四川
日期:2018-12-17 14:10:21
5 [报告]
发表于 2009-04-16 10:03 |只看该作者
emacs能煮咖啡

论坛徽章:
381
CU十二周年纪念徽章
日期:2014-01-04 22:46:58CU大牛徽章
日期:2013-03-13 15:32:35CU大牛徽章
日期:2013-03-13 15:38:15CU大牛徽章
日期:2013-03-13 15:38:52CU大牛徽章
日期:2013-03-14 14:08:55CU大牛徽章
日期:2013-04-17 11:17:19CU大牛徽章
日期:2013-04-17 11:17:32CU大牛徽章
日期:2013-04-17 11:17:37CU大牛徽章
日期:2013-04-17 11:17:42CU大牛徽章
日期:2013-04-17 11:17:47CU大牛徽章
日期:2013-04-17 11:17:52CU大牛徽章
日期:2013-04-17 11:17:56
6 [报告]
发表于 2009-04-16 10:17 |只看该作者
M-b,怎么输入呢?

论坛徽章:
5
摩羯座
日期:2014-07-22 09:03:552015元宵节徽章
日期:2015-03-06 15:50:392015亚冠之大阪钢巴
日期:2015-06-12 16:01:352015年中国系统架构师大会
日期:2015-06-29 16:11:2815-16赛季CBA联赛之四川
日期:2018-12-17 14:10:21
7 [报告]
发表于 2009-04-16 10:50 |只看该作者
Ctrl+M 然后按一下b吧?

论坛徽章:
381
CU十二周年纪念徽章
日期:2014-01-04 22:46:58CU大牛徽章
日期:2013-03-13 15:32:35CU大牛徽章
日期:2013-03-13 15:38:15CU大牛徽章
日期:2013-03-13 15:38:52CU大牛徽章
日期:2013-03-14 14:08:55CU大牛徽章
日期:2013-04-17 11:17:19CU大牛徽章
日期:2013-04-17 11:17:32CU大牛徽章
日期:2013-04-17 11:17:37CU大牛徽章
日期:2013-04-17 11:17:42CU大牛徽章
日期:2013-04-17 11:17:47CU大牛徽章
日期:2013-04-17 11:17:52CU大牛徽章
日期:2013-04-17 11:17:56
8 [报告]
发表于 2009-04-16 10:55 |只看该作者
原帖由 T-bagwell 于 2009-4-16 10:50 发表
Ctrl+M 然后按一下b吧?

不是这个,期待解答

论坛徽章:
0
9 [报告]
发表于 2009-04-16 13:42 |只看该作者
M是Meta,各个系统有不同,一般是Alt或者是ESC

论坛徽章:
0
10 [报告]
发表于 2009-04-16 15:17 |只看该作者
原帖由 chenyx 于 2009-4-16 10:17 发表
M-b,怎么输入呢?

Alt-b
或者
ESC 再 b
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP