最近在学习python的时候,发现在windows下可以使用python自带的idle编辑器进行编辑和调试python,但在使用Mac系统的时候硬是不知道用什么编辑器好了,无奈之下在网上找到了什么xcode进行编辑和运行的方法,但总是觉得好像还少点什么,又在网上找到了一个ipython的编辑器,但发现这个好像是服务器上用的python编辑器,因为代码的编写和运行都是在网页上进行的。又上网上搜了一下,有人说使用Emacs编辑器,长这么大,除了听说过linux上常用的vi还从来没有听说过这个Emacs编辑器,不知道什么神物。结果不搜不知道,一搜吓一跳,这个Emacs好像真的是高手们使用的神器。
仔细一想 ,为什么这个看起来不起眼的Emacs可以成为高手们的神器,可能主要的原因是因为这个神器有非常强大的可配置脚本系统。并且可以和linux命令行集成使用来完成各种linux下的各种代码编写,编译以及调试。
所以,现在基本上明了了,Mac系统下使用xcode来进行python编辑和运行。linux使用eclips或者这个Emacs。
这里我转载一下这个Emacs的常用命令和快捷快。以方便大家学习。
快捷键组合:
c-x : Ctrl+x
m-x: Alt+x
1. 常用的缺省 Emacs 按键前缀
按键前缀 | 描述 |
C-c | 当前编辑模式特有的命令 |
C-x | 文件和缓冲区命令 |
C-h | 帮助命令 |
M-x | 函数名称 |
2. 常用的 Emacs 缓冲区和文件函数
绑定 | 函数名 | 描述 |
C-x C-s | save-buffer | 将当前的缓冲区保存到磁盘。 |
C-x s | save-some-buffers | 要求将所有未保存的缓冲区保存到磁盘。 |
C-x C-c | save-buffers-kill-emacs | 要求将所有未保存的缓冲区保存到磁盘,并退出 Emacs。 |
C-x C-z | suspend-emacs | 挂起 Emacs 并使之成为一个后台进程。 |
C-x C-b | list-buffers | 列出所有缓冲区。 |
C-x k | kill-buffer | 杀死一个缓冲区(缺省情况下为当前的缓冲区)。 |
C-x C-q | vc-toggle-read-only | 切换当前缓冲区的可读状态(如果适用还可以执行版本控制)。 |
C-x i | insert-file | 在插入点插入某个文件的内容。 |
M - < 移动到缓冲区开头
M - > 移动到缓冲区末尾
3. 有用的 Emacs 键盘输入(用于移动和导航)
键盘输入 | 函数 | 描述 |
C-p , | previous-line | 将插入点向上移动到上一行。 |
C-n ,DownArrow | next-line | 将插入点向下移动到下一行。 |
C-f ,RightArrow | forward-char | 将插入点移动到下一个字符。 |
C-b ,LeftArrow | back-char | 将插入点移动到上一个字符。 |
M-f | forward-word | 将插入点移动到下一个单词。 |
M-b | backward-word | 将插入点移动到上一个单词。 |
C-v , PgDn | scroll-up | 将文本向上滚动一屏。 |
M-v , PgUp | scroll-down | 将文本向下滚动一屏。 |
Home | beginning-of-buffer | 将插入点移到缓冲区的开始处。(在某些版本中,这个键被缺省定义为移动到当前行的开始处。) |
End | end-of-buffer | 将插入点移到缓冲区的末尾。(在某些版本中,这个键被缺省定义为移动到当前行的末尾。) |
C-a | beginning-of-line | 将插入点移到本行的开始处。 |
C-e | end-of-line | 将插入点移到本行的结尾。 |
M-a | beginning-of-sentence | 将插入点移到句子的开始处。 |
M-e | end-of-sentence | 将插入点移到句子的结尾处。 |
C-{ | beginning-of-paragraph | 将插入点移到段落的开始处。 |
C-} | end-of-paragraph | 将插入点移到段落的结尾处。 |
4. 常用 Emacs 编辑命令
键盘输入 | 函数 | 描述 |
Ins | overwrite-mode | 切换改写模式(缺省为关闭)。 |
Backspace | delete-backward-char | 删除插入点前的字符。 |
C-d | delete-char | 删除插入点处的字符。 |
M-d | kill-word | 从插入点开始向前删除字符,直到单词末尾。 |
M-Backspace, | backward-kill-word | 从插入点开始向回删除字符,直至单词的开始处。 |
C-_ | undo | 撤消您的上一次键入或操作 |
C-q 字符 或XXX | quoted-insert | 在插入点插入按键本身代表的字符 或由八进制数字(XXX )表示的字符。 |
C-u 次数 命令 | universal-argument | 按总的次数 (缺省为 4 次)连续执行命令 。 |
5. 用来标记和删除文本的 Emacs 函数
键盘输入 | 函数 | 描述 |
C-Space | set-mark-command | 在插入点设置标记。 |
C-k | kill-line | 删除从插入点到行末的所有文本。 |
C-w | kill-region | 删除区域。 |
M-w | kill-ring-save | 将区域保存在 kill ring 中,但不删除它。 |
C-y | yank | 恢复来自 kill ring 的文本。 |
6. 鼠标操作
鼠标命令 | 描述 |
B1 | 这一命令将设置插入点位置;拖动鼠标左键以设置区域。 |
B1-B1 | 这一命令标记一个单词。 |
B1-B1-B1 | 这一命令标记一行。 |
B2 | 这一命令插入最近被杀死的内容,并把光标移动到插入内容的末尾。 |
B3 | 这一命令会设置并突出显示区域,然后无需删除就将其放在 kill 缓冲区中。如果某个区域已经被突出显示并设置,该区域的末尾将移动到您单击的位置。 |
B3-B3 | 这个命令将突出显示区域,然后删除它。如果某个区域已经被突出显示并设置,该区域的末尾将移动到您单击的位置,此后该区域将被删除。 |
7. query-replace 函数的选项
键(M-%) | 描述 |
空格、y | 替换这个匹配。 |
Del、n | 跳过这一匹配到下一个匹配。 |
Enter、q | 退出 query-replace 。 |
. | 进行本次替换,然后退出 query-replace 。 |
, | 进行本次替换,将光标移动到此处,然后退出 query-replace 。 |
C-r | 指定递归编辑。 |
C-w | 删除这个匹配并递归编辑。 |
C-l | 重绘屏幕,并使这一行位于屏幕正中位置。 |
! | 继续进行所有的替换,而无需再次询问。 |
E | 编辑替换的字符串。 |
^ | 退回到前一次替换。 |
replace-regexp 和 query-replace-regexp 函数的工作方式是类似的,但是它们使用正则表达式作为要进行替换的字符串。
8. Emacs 搜索和替换命令
绑定 | 命令或者函数 | 描述 |
C-s [字符串 ] [C-w ] [C-y ] | isearch-forward | 前向增量地在整个缓冲区中搜索字符串(在缺省情况下,将搜索您上一次给出的搜索字符串,如果存在),C-w 使用从光标处到光标所在单词的词尾之间的文本,以及 C-y 使用从光标处到光标所在行的行尾之间的全部内容。 |
C-r [字符串 ] [C-w ] [C-y ] | isearch-backward | 后向增量地在整个缓冲区中搜索字符串 (在缺省情况下,将搜索您上一次给出的搜索字符串,如果存在),C-w 使用从光标处到光标所在单词的词尾之间的文本,C-y 使用从光标处到光标所在行的行尾之间的全部内容。 |
C-s Enter C-w 单词或者短语 | word-search-forward | 在整个缓冲区中前向搜索给定的单词或者短语(不管它们之间如何分隔)。 |
C-r Enter C-w 单词或者短语 | word-search-backward | 在整个缓冲区中后向搜索给定的单词或者短语(不管它们之间如何分隔)。 |
C-M-s | isearch-forward-regexp | 在整个缓冲区中前向增量搜索给定的正则表达式。 |
C-M-r | isearch-backward-regexp | 在整个缓冲区中后向增量搜索给定的正则表达式。 |
| replace-string | 从光标处到缓冲区末尾搜索给定的字符串,并使用给定的字符串来替换它。 |
| replace-regexp | 从光标处到缓冲区末尾搜索给定的正则表达式,并使用给定的字符串来替换它。 |
M-% | query-replace | 从光标处到缓冲区末尾搜索给定的字符串,对于搜索到的每个实例,询问是否使用给定的字符串来进行替换。 |
C-M-% | query-replace-regexp | 从光标处到缓冲区末尾搜索给定的正则表达式,对于搜索到的每个实例,询问是否使用给定的字符串来进行替换。 |
9. 高级 Emacs 标记和选择命令
键盘输入 | 功能 | 描述 |
C-u C-space |
| 移动到标记环中的前一个标记。 |
C-x C-x | exchange-point-and-mark | 交换光标和标记的位置。 |
M-@ | mark-word | 标记从光标到当前词尾的所有文本。 |
M-h | mark-paragraph | 标记当前段落,不管光标处在什么位置。 |
| transient-mark-mode | 切换临时标记模式。 |
C-x h | mark-whole-buffer | 标记整个缓冲区,不管光标处在什么位置。 |
M-B1 |
| 设置二次选择的开始,拖曳鼠标以进行二次选择。 |
M-B3 |
| 设置二次选择的结尾。 |
M-B1-B1 |
| 将一个单词标记为二次选择。 |
M-B1-B1-B1 |
| 将一行标记为二次选择。 |
10. 高级 Emacs 剪切和粘贴命令
键盘输入 | 功能 | 描述 |
M-(num) C-k | kill-line | 剪切行的整数 数目。如果是 0,剪切从光标到该行开头的全部内容;如果是负数,则反向剪切。 |
M-k | kill-sentence | 剪切从光标到句子的结尾处的内容。 |
M-z | zap-to-char | 删除从光标到指定的字符之间的所有文本。 |
M-y | yank-pop | 移动到剪切环中的下一个槽位。 |
M-(num) C-y | yank | 粘贴剪切环中指定槽位的内容。 |
11. 使用书签的 Emacs 命令
键盘输入 | 功能 | 描述 |
C-x r mBookmark | bookmark-set | 设置一个名为 Bookmark 的书签。 |
C-x r l | bookmarks-bmenu-list | 列出所有已保存的书签。 |
M-x bookmark-delete | bookmark-delete | 删除一个书签。 |
C-x r bBookmark | bookmark-jump | 跳转至名为 Bookmark 的书签中所设置的位置。 |
M-x bookmark-save | bookmark-save | 将所有的书签保存到书签文件 ~/.emac.bmk中。 |
12. 常见的 Emacs 窗口操作命令
功能 | 绑定 | 描述 |
split-window-vertically | C-x 2 | 从中间将当前窗口划分为两半,垂直地堆叠新的缓冲区。 |
switch-to-buffer-other-window | C-x 4 b | 垂直地将当前窗口划分为两半,提示输入缓冲区以使用底部的窗口,并将其作为活动窗口。 |
display-buffer | C-x 4 C-o | 在另一个窗口中显示一个缓冲区,提示输入缓冲区以使用另一个窗口,但保持当前窗口为活动窗口。(如果仅存在一个窗口,那么垂直地划分该窗口以显示另一个缓冲区。) |
find-file-other-window | C-x 4 f | 在新的缓冲区中打开新的文件,在新的垂直窗口中绘制它。 |
find-file-read-only-other-window | C-x 4 r | 在一个新的只读缓冲区中打开新的文件,在新的垂直窗口中绘制它。 |
scroll-other-window | C-M-v | 滚动到下一个由 C-x o 切换到的窗口。 |
scroll-all | 切换 scroll-all 次要模式。当它处于打开状态时,将同时滚动显示当前窗口中的缓冲区的所有窗口,并滚动均等的相应距离。 | |
other-window | C-x o | 将光标移动到下一个窗口,并使其成为活动窗口。 |
windmove-up | 移动到恰好位于当前窗口上方的窗口,如果它存在的话。 | |
windmove-down | 移动到恰好位于当前窗口下方的窗口,如果它存在的话。 | |
windmove-left | 移动到恰好位于当前窗口左边的窗口,如果它存在的话。 | |
windmove-right | 移动到恰好位于当前窗口右边的窗口,如果它存在的话。 | |
delete-window | C-x 0 | 删除当前窗口,并将光标移动到使用 C-x o 将切换到的下一个窗口。 |
delete-other-windows | C-x 1 | 删除当前窗口之外的所有窗口。 |
kill-buffer-and-window | C-x 4 0 | 删除当前窗口,并剪切它的缓冲区。 |
split-window-horizontally | C-x 3 | 将当前窗口从中间划分为两半,水平地堆叠新的缓冲区。 |
follow-mode | 切换 follow 次要模式。当它在缓冲区中处于打开状态时,将所有显示该缓冲区的窗口连接为一个较大的虚拟窗口。 | |
enlarge-window | C-x ^ | 使当前窗口增加一行的高度;在其之前使用一个负数,将使得当前窗口减少一行的高度。 |
shrink-window-horizontally | C-x } | 使当前活动窗口减少一列的宽度。 |
enlarge-window-horizontally | C-x { | 使当前活动窗口增加一列的宽度。 |
shrink-window-if-larger-than-buffer | C-x - | 将当前活动窗口的大小缩小到对于它所包含的缓冲区来说可能的最小尺寸。 |
balance-windows | C-x + | 平衡所有窗口的尺寸,使它们的大小大致相等。 |
compare-windows | 将当前窗口与下一个窗口进行比较,在两个窗口中从光标处开始比较,并在两个缓冲区中将光标移动到第一个不同的字符处,直到到达缓冲区的末尾为止。 |
设置EMACS变量
1.有些变量可以包含数值或者字符串,而其他的变量则是“真”或者“假”:如果将一个变量的值设置为 nil ,那么它的值是“假”,值 t 表示“真”。
2.使用 describe-variable 函数以得到变量的值。当您运行这个函数的时候,Emacs 将打开一个新窗口,该窗口中包含该变量的给定当前
值。如果有的话,还将提供关于该变量的描述。这个函数与 C-h v 按键进行了绑定。
3.使用M-x set-variable来进行变量设定
13. Emacs 键盘输入帮助命令汇总
键盘输入 | 函数 | 描述 |
Tab | 如果给出了某个命令的一部分,那么这个命令将执行命令完成功能,显示给定命令的所有可能的输入值。 | |
command prefix 或者keystroke C-h | 这个命令用于描述给定命令前缀 或者键盘输入 的所有可能的命令和函数。 | |
C-h c keystroke | describe-key-briefly | 这个命令将在迷你缓冲区中报告与给定键盘输入 进行了绑定的函数名称。 |
C-h k keystroke | describe-key | 这个命令将打开新的帮助缓冲区窗口,其中描述了与给定键盘输入进行了绑定的函数。 |
C-h l | view-lossage | 这个命令将打开新的缓冲区,并显示最后键入的 100 个字符。 |
open-dribble-file | 这个命令将打开指定的文件,并将所有键盘输入的副本记录到该文件。 |
14. Emacs 函数帮助命令汇总
键盘输入 | 函数 | 描述 |
apropos | 对于一个给定的正则表达式,这个命令将给出 apropos 命令和变量的列表。 | |
C-h a regexp | command-apropos | 对于给定的正则表达式 ,这个命令将给出 apropos 命令的列表。 |
C-h b | describe-bindings | 这个命令将在一个新的帮助缓冲区窗口中描述当前主要模式的所有有效的键绑定。 |
C-h ffunction | describe-function | 这个命令将在一个新的帮助缓冲区窗口中描述给定函数 的用途。 |
C-h vvariable | describe-variable | 这个命令将在一个新的帮助缓冲区窗口中描述给定变量 的用途。 |
C-h wfunction | where-is | 这个命令将描述某个特定函数所绑定到的键盘输入(如果有的话)。 |