在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[]
阅读(1142) | 评论(0) | 转发(0) |