Emacs-hacking第三天

  Starting!!

 

  1.啰嗦几句  

 1 /*
 2 
 3    1.关于备份功能
 4      emacs有auto-backup和auto-save两种备份功能:
 5      1.auto-backup是将保存好的文件进行备份,类似Git的版本控制。
 6      2,auto-save是emacs为了提高编辑体验,便每隔很少的时间间隔就自动对当前文件和buffer内容进行保存。
 7   
 8      但实际上一般的emacs用户都用不到这些功能,或者已经哟更强大的替代品.

      (setq make-backup-files nil)
      (setq auto-save-default nil)
    2.关于快捷键
      在使用“C-h f”等查询命令的时候,emacs默认会新开启一个窗口,但是光标还会在原来的窗口,如果MainWindow在编辑一些重要的文件,多开启一些窗口会很不爽,我们想让emacs在最下面
开启一个minibuffer来提供这样类似的功能,#popwin#就是这样的一个package。
我们希望将主窗口只起到编辑的作用,一些查询和辅助功能最好统一到最下面的minibuffer中。这样会显得很整齐。
      因为时间常长了就会忘掉这些安装和功能的细节,但这些细节特别好的帮助我们理解emacs。如果说是想成为开发者而不永远是小白,就需要记住这些东西。
9 10 */

  

  

  2.关于lisp语法

 1 /*
 2   
 3     1.在 Emacs 中,Major Mode 又分为三种,
 4 
 5        text-mode ,用于编辑文本文件
 6        special-mode ,特殊模式(很少见)
 7        prog-mode ,所有的编程语言的父模式
 8   在每一个模式(mode)中它的名称与各个变量还有函数都是有特定的命名规则,比如所有的 
 9   模式都被命名为 ModeName-mode ,里面所设置的快捷键则为 ModeName-mode-key-
10   map ,而所有的钩子则会被命名为 ModeName-mode-hook
11 
12     2.features
13   当一个Lisp插件(package)调用(provide 'symbol_name)函数的时候,emacs会将symbol_name加入到内置的features-lists中。"C-h v"可以查看该变量。
14  这里能找到关于详细介绍。
15  The purpose of features is for emacs to know if a package is already loaded.
16 
17     3.load-file , load , require , autoload 
18 
19      这里能找到详细介绍

        load-file 用于打开某一个指定的文件,用于当你不想让 Emacs 来去决定加 载某个配置文件时( .el 或者 .elc 文件)。

        load 搜索 load-path 中的路径并打开第一个所找到的匹配文件名的文件。首先查找.elc编译好的文件,如果没有在检查.el文件 。

       (当load函数没有load-path的时候,可以直接使用"load-file+文件的绝对路径“进行加载)。 不过这个时候需要明确的告诉emacs需要加载的是哪个文件(后缀名.el或者.elc也要写上)

        require 加载还未被加载的插件。首先它会查看变量 features 中是否存在所要加载的 符号如果不存在则使用上面提到的 load 将其载入。(有点类似于其他编程语言中的 import )

                    1).将配置文件中的(require ‘###)直接改成(load '#####.el)是完全可以的。

        总结一下:(require ’###)函数首先回去查找features-list中是否存在该函数,如果没有,便会调用load函数(依赖于load-path)来首先加载###.elc为名的文件,如果没有便加载###.el文件进行一句一句的解释执行(如果还是没有便会报错),一直执行到(provide ‘###)这句函数的时候才会将该函数加载到features-list中。至于后续的emacs机制,以后再说吧。

        autoload 用于仅在函数调用时加载文件,使用此方法可以大大节省编辑器的启动时间。

32 */

 

 

   3.关于小技巧

    在写C++代码时候,会有一些像#include<#######>之类的经常写但又容易写错的代码。emacs提供了一些缩写补全功能和缩进功能。

 1 /*
 2 
 3     (setq-default abbrev-mode t)
 4 (define-abbrev-table 'global-abbrev-table '(
 5                         ;; Shifu
 6                         ("inc" "#include<")
 7                           ))
 8 
 9 
10    输入“8zl”按ENTER或者任何非字母键就会补全。这时候可以只写半个括号,然后按“>”边会很方便的补全。看来以后是真的离不开emacs了。。。
11   该插件会在目录下新建一个abbrev_defs的文件用来保存一些配置信息。
12 

    还提供了一个功能,叫Hippie 补全:快捷键”C-c C-h“,可以在company-mode不能提供补全的情况下进行补全。
13 */

  

 

  4.关于update-autload

    在安装popwin这个package的时候,在GitHub源码上的调用方式中有两句话:

(require 'popwin)
(popwin-mode t)  

    而在安装company的时候,调用方式:

(global-company-mode t)

  这里有一些lisp语法上的概念:

  在emacs加载package系统的时候(package-initialize),系统会在每一个package的配置文件中(update-directory-autoloads ~/.emacs.d/lisp)查找有autload魔法注释的函数,然后将这些函数放到一个叫###_autload.el的文件中。如果没有,就需要自行将该插件加载进去——(require ‘###)。而require函数调用的本质就是调用load来将文件加载到features中的。

  有关el和elc文件的事情后面再细说,太难。。。感觉有一点像是C++的头文件加载的过程。但是在使用load-file加载的时候要注意,因为使用的是文件的全名,如果是.elc文件,那如果后面对源文件进行修改的话,一定要重新编译,否则修改的东西是不会生效的甚至会报错。

  5.关于orgmode文学编程

  因为不是很熟悉orgmode的基本操作,感觉现阶段还只是想用熟悉emacs的语法和基本使用,所以就这一块就放一下吧。

 

  突然发现hackingEmacsde的本质就是学会发现问题,然后耐心去Google,这里强调一些简单的"C-h C-f"等查找快捷键,学好这些快捷键是熟悉emacs的必要条件。

  这两天的进度有些慢,算法部分有点落下。。。不过都不能放弃,坚持咯~

 

posted @ 2018-02-07 23:32  HaotianMichael  阅读(227)  评论(0编辑  收藏  举报