序言
最近,重新学习SCIP这本书,升起了仔细学习LISP的想法,主要感觉LISP的抽象能力实在太强了,想看看LISP到底能做到哪些事情。
为了学习LISP,我决定先搭建一套common lisp的开发环境,毕竟是现在最流行的lisp方言。首先就是emacs,早有听说emacs号称是“神的编译器”,在这里我也不想再谈emacs和vim的优劣,不过由于对lisp的好感,让我觉得emacs的功能要更加强大,所以即使现在我对vim的了解足够我在工作学习中使用了,我还是有很大的兴趣去学习emacs。接下来这个系列我都是跟随gnu的官方文档从零开始学习emacs,希望能给需要的人一些帮助。
下面,我从基础的一些操作开始记录,我这个系列的文章都使用emacs编辑,在记录命令的同时,也使用这些命令,大家可以使用这个方法一起学习。
inserting text
- 普通的有可以显示的字符(比如,“a,b,…,z,a,B,…,Z”)可以直接输入。
- 想要输入有一些没法直接显示的字符(比如,",
“),需要先输入前缀键"C-q”。 - 可以用前缀键(“C-x 8 RET”)输入一些常见的Unicode字符
Moving Point
C-f
:向前移动一个字符,调用的forward-char
C-b
:向后移动一个字符,调用的backward-char
C-n
:移动到下一行,调用的next-line
C-p
:移动到上一行,调用的previous-line
C-a
:移动到这一行的开头,调用的move-beginning-of-line
C-e
:移动到这一行的结尾,调用的move-end-of-line
M-f
:移动到前一个word,调用的forward-word
M-b
:移动到后一个word,调用的backward-word
M-r
:在不移动屏幕上文本的情况下,将点重新定位在窗口最中间文本行的左边缘; 在随后的连续调用中,以循环顺序将点移动到最上一行,最下一行等的左边界,调用的move-to-window-line-top-bottom
M-<
:移动到缓冲区的顶部(调用的beginning-of-buffer
)。 使用数字参数n,从顶部移至n / 10。 在图形显示中,C-HOME会执行相同的操作。M->
:移动到缓冲区的底部(调用的end-of-buffer
)C-v
:向前滚动显示屏幕,必要时在屏幕上移动点,调用的scroll-up-command
M-v
:向后滚动一个屏幕,并在必要时在屏幕上移动点,调用的scroll-down-command
M-g c
:读取数字n并将点移动到缓冲区位置n。 位置1是缓冲区的开始(跳转指令,以字节为单位)。M-g g
:读取数字n,然后将指针移至第n行的开头(转到行)。第1行是缓冲区的开始。调用的goto-line
M-g TAB
:读取数字n,然后将指针移动至第n列的开头(以列为单位)C-x C-n
:锁定列数,在上下移动光标的时候都在同一列C-u C-x C-n
:撤销上一个命令的设置
Erasing
DEL
orBACKSPACE
:删除光标前的一个字符,调用的delete-backward-char
Delete
:删除光标后的一个字符,调用的delete-forward-char
C-d
:删除光标处的字符,调用的delete-char
C-k
:将从光标开始到这一行结束的内容剪贴掉,调用的kill-line
M-d
:将从光标开始到这个word结束的内容剪贴掉,调用的kill-word
M-DEL
orM-BACKSPACE
:将从光标开始到上一个word开头的内容剪贴掉,调用的backward-kill-word
Basic Undo
C-/
or C-x u
or C-_
: 撤销,调用的undo
Files
C-x C-f
:根据输入的文件名,打开文件,调用的find-file
C-x C-s
:保存buffer,调用的save-buffer
Help
C-h k (describe-key)
:查看describe-key绑定的函数
Blank Lines
C-o
:在光标的下面插入新的一行,调用的open-line
C-x C-o
:删除重复的空白行,调用的delete-blank-lines
Continuation Lines
Position Info
M-x what-line
:显示当前光标所在的行数
M-x line-number-mode
:显示行号
M-x column-number-mode
:显示列号
M-=
:显示从buffer开始到光标当前的行数,word数以及字符数,调用的是count-words-region
M-x hl-line-mode
:高亮当前行
M-x count-words
:显示当前buffer总的行数。word数以及字符数
M-x size-indication-mode
:显示当前buffer的大小
C-x =
:显示光标后的字符的字符代码,光标的字符位置和光标的列,调用的是what-cursor-position
Arguments
指定数字参数的最简单方法是在按住Meta键的同时键入数字和/或减号。
使用C-u NUMBER
也是可以的
Repeating
除了使用Argument章节介绍的方法可以重复执行指令,使用C-x z(repeat)
可以重复上一条执行的指令,按几次z就是重复几次