注: 下面内容若有误,请大家指正。
6.1 控制台行编辑
默认情况下控制台启动一个简单的面向Scheme友好的行编辑用户界面。它提供以下几个功能:
匹配左右括号
记录输入命令行的内容,以方便快速输入
自动补全功能
一些和emacs兼容的键盘命令
用户的输入被显示为粗体,过程的输出被系统显示为普通体。输入的历史记录被保存在’~/.gambit_history’文件里。tab键用于自动补全,当连续按tab键可以循环选择匹配的补全结果。
以下是有效的键盘命令(其中”M-“前缀代表和Esc键或Alt键组合,和”C-“前缀代表和Ctrl键组合):
C-d
当前行是空行时,产生一个文件结束符。否则,删除光标所在位置的字母。
M-delete or M-C-d
向前删除一个单词,并将删除的内容剪切到剪贴板里。
M-backspace
向后删除一个单词,并将删除的内容剪切到剪贴板里。
M-C-backspace
向后删除S表达式,并将删除的内容剪切到剪贴板里。
C-a
光标移到行头。
C-e
光标移到行尾。
C-b or left-arrow
光标向左移动一位。
M-b
光标向左移动一个单词的位置。
M-C-b or M-left-arrow
光标向左移动一个S表达式的位置。
C-f or right-arrow
光标向右移动一位。
M-f
光标向右移动一个单词的位置。
M-C-f or M-right-arrow
光标向右移动一个S表达式的位置。
C-p or M-p or up-arrow
移动到历史记录中的上一行。
C-n or M-n or down-arrow
移动到历史记录中的下一行。
C-t
调换光标当前位置和前一位置的字符。
M-t
调换光标当前位置和后一位置的字符。
M-C-t
调换光标后的S表达式和光标前的S表达式。
C-l
清空屏幕,进入等待输入状态。
C-nul (Windows键盘没有这个键)
在光标处设一个标记。
C-w
删除光标和标记之间的文本,并将删除的内容剪切到剪贴板里。
C-k
删除标记和行尾之间的文本,并将删除的内容剪切到剪贴板里。
C-y
粘贴剪贴板的内容。
F8
继续执行(相当于在REPL中输入命令’#||#,c;’)
F9
移动到更新的帧(相当于在REPL中输入命令’#||#,-;’)
F10
移动到旧的帧(相当于在REPL中输入命令’#||#,+;’)
F11
按步骤执行(相当于在REPL中输入命令’#||#,s;’)?
F12
跳跃执行(相当于在REPL中输入命令’#||#,l;’)?
在Mac操作系统中, 上面的辅助键(F1-F12)依赖于你的配置,你可能需要借助fn键来完成操作。
6.2 利用Emacs开发
Gambit自带的Emacs包’gambit.el’为Emacs编辑器提供了友好的Gambit编辑环境。
将下面的代码加入到’.emacs’配置文件中:
(autoload 'gambit-inferior-mode "gambit" "Hook Gambit mode into cmuscheme.")
(autoload 'gambit-mode "gambit" "Hook Gambit mode into scheme.")
(add-hook 'inferior-scheme-mode-hook (function gambit-inferior-mode))
(add-hook 'scheme-mode-hook (function gambit-mode))
(setq scheme-program-name "gsi -:d-")
另外,如果你不介意每次都加载’gambit.el’的配置,你可以简单地将下面这一行添加到您的’.emacs’配置文件中:
(require 'gambit)
你可以通过输入’M-x run-scheme’命令,来启动一个Gambit后台进程。在”cmuscheme”模式中,下面这些命令用到Gambit交互缓冲区(i.e. ‘*scheme*
‘)并将Scheme源码文件附加到缓冲区。这里列出常用的命令(在Gambit交互缓冲中,输入’C-h m’命令,可以输出完整的命令列表):
C-x C-e
计算光标之前的表达式(这个表达式会被拷贝到Gambit交互缓冲区)。
C-c C-z
切换Gambit交互缓冲区。
C-c C-l
加载文件(默认情况下,文件附加到当前缓冲区是)。
using (load file)
C-c C-k
编译文件(默认情况下,文件附加到当前缓冲区是)。
using (compile-file file)
文件’gambit.el’提供下列附加命令:
F8 or C-c c
继续执行(相当于在REPL中输入命令’#||#,c;’)
F9 or C-c ]
移动到更新的帧(相当于在REPL中输入命令’#||#,-;’)
F10 or C-c [
移动到旧的帧(相当于在REPL中输入命令’#||#,+;’)
F11 or C-c s
按步骤执行(相当于在REPL中输入命令’#||#,s;’)?
F12 or C-c l
跳跃执行(相当于在REPL中输入命令’#||#,l;’)?
C-c _
Removes the last window that was opened to highlight an expression.
The two keystroke version of these commands can be shortened to ‘M-c’, ‘M-[’, ‘M-]’, ‘M-s’, ‘M-l’, and ‘M-_’ respectively by adding this line to your ‘.emacs’ file:
(setq gambit-repl-command-prefix "\e")
This is more convenient to type than the two keystroke ‘C-c’ based sequences but the purist may not like this because it does not follow normal Emacs conventions.
Here is what a typical ‘.emacs’ file will look like:
(setq load-path ; add directory containing gambit.el
(cons "/usr/local/Gambit/share/emacs/site-lisp"
load-path))
(setq scheme-program-name "/tmp/gsi -:d-") ; if gsi not in executable path
(setq gambit-highlight-color "gray") ; if you don't like the default
(setq gambit-repl-command-prefix "\e") ; if you want M-c, M-s, etc
(require 'gambit)