Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1738478
  • 博文数量: 410
  • 博客积分: 9563
  • 博客等级: 中将
  • 技术积分: 4517
  • 用 户 组: 普通用户
  • 注册时间: 2010-07-03 19:59
个人简介

文章分类

全部博文(410)

文章存档

2017年(6)

2016年(1)

2015年(3)

2014年(4)

2013年(32)

2012年(45)

2011年(179)

2010年(140)

分类: LINUX

2012-05-24 09:30:00

在linux下面,很多软件行编辑是使用readline 库的,比如bash、ghci等等默认都是emacs的行编辑规则,所有有必要了解一下emaces的行内编辑规则,即使不使用emaces也没有关系。

下面所有例子使用 ‘[]‘ 代表光标位置.
(M通常指alt键)

例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[]
阅读(1146) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~