emacs

表格计算和

org-table-sum

计算完成后,结果会显示在minibuffer中,并且复制在剪切板中。

| index | name     | age |
|-------+----------+-----|
|     1 | xiaodong |  33 |
|     2 | xiaowang |  44 |
|     3 | wangsan  |  32 |
|     4 | zhangsi  |  22 |
|     5 | liqi     |  43 |
|     6 | total    | 174 |

hook

通常major-mode会提供一个hook,命令规范通常是mode的名字加上-hook,进入该mode后会调用hook中添加的函数。

可以使用setq来设置hook变量,如 (setq 'text-mode-hook (lambda () (...))), 推荐使用add-hook,如(add-hook 'text-mode-hook (lambda () (...)))

列表基本函数

car 是 “contents of the address part of the register”(寄存器地址部分的内容)
cons 是"construct"(构造)
cdr 是"contents of decrement part of the register"(寄存器后部内容)

car

一个列表的car,返回该列表的第一个元素,car为非破坏性的函数。

(car '(rose violet daisy buttercup))
返回
rose

cdr

一个列表的cdr返回除该列表的第一 个元素外的所有内容。

(cdr '(rose violet daisy buttercup))

返回
(violet daisy buttercup)

cons

cons将一个元素放到一个列表的开始处,它往 列表中插入元素.
空列表不能作为第一个参量,因为空列表什么也没有。

(cons 'buffercup ())
输出
(buffercup)

查询列表的长度

使用length函数,返回一个列表中有多少个元素。
如:

(length '(buttercup))

一般来说,使用length作用于非列表对象,会得到一个错误消息。不过,个人测试字符串,可以成功。

nthcdr函数

该函数功能类似于cdr, 不过该函数带有参数n,表示移除去n个元素的列表.该函数是非破坏性的。

如:

(nthcdr 2 '(pine fir oak maple))
返回
(oak maple)

(nthcdr 0 '(pine fir oak  maple))
返回
(pine fir oak maple)

(nthcdr 5 '(pine fir oak maple))
返回
nil

setcar

使用新元素代替列表中的第一个元素,使用空列表会报错。

(setq animals '(giraffe antelope tiger lion))

(setcar animals 'newelement)

输出animals
(newelement antelope tiger lion)

setcdr函数

与setcar函数类似,不同之处在于它替换的是第二个及以后的元素,而不是第一个。

(setq animals '(giraffe antelope tiger lion))

(setcdr animals 'newelement)

输出
(giraffe newelement)

顺序控制函数

let*

let与let函数类似,区别在于let声明中就能使用前面声明的变量,如:

(defun circle-area (radix)
    "get the area of circle"
    (let* ((pi 3.1415926)
             (area  (* pi radix radix)))
    (message "area:%f" area)))

lambda表达式

lambda格式与defun完全一样。如:

(lambda (arguments-list)
    "documents string"
    body...)

调用方式

(funcall (lambda (name)
    (message "name:%s" name)) "zhangsan")

;;;;;同时,可以将lambda表达式赋值给其它变量
(setq fun (lambda (name)
                   (message "name:%s" name)))
(funcall fun "zhangsan")

progn

将多个表达式顺序执行,格式:

(progn 
    (setq name "zhangsan")
    (message "name:%s" name))

条件判断

(if condition
    then-statement
    else-statement)

(cond 
    (case1 do-when-case1)
    (case2 do-when-case2)
    ...)

;;;;递归实现斐波那契函数
(defun fib (n)
  (cond ((= n 1) 1)
        ((= n 0) 0)
        (t (+ (fib (1- n))
              (fib (- n 2))))))

循环

格式如下:

(while condition
    body)

(defun factorial (n)
    (let ((res 1))
       (while  (> n 0)
           (setq res (* res n)
                    n (-n 1)))
    res))
    
;;;;;;打印列表元素
(defun print-element-of-list (list)
    (while list
        (print (car list))
        (setq list (cdr list))))

逻辑运算

与其它语言类似,使用and, or, not. and, or也具有短路性质。

字符

在emacs中,字符就是整数。但是目前字符串中的字符被限制在 0-524287 之间。如:

?A             ;; 65
?a             ;; 97

字符比较测试

;;;;;;;比较两个字符是否一致
(char-equal ?a ?a)

;;;;;成功返回t,失败返回nil
(string< "abc" "abc")
(string= "abc" "abc")
(string> "ab" "aa")

;;;;;;;;判断一个对象是不是字符串或者nil,成功返回t
(string-or-null-p var) 

;;;;;;;判断一个对象是不是字符或者字符串
(char-or-string-p var)

;;;;;;;;;判断字符串是否为空
(string-empty-p var)

构造函数

(make-string 5  ?x)     ;;; "xxxxx"
(string ?a ?b ?c)         ;;;; "abc"


;;;;;;;根据已有字符串生成
(concat "abc" "def")      ;;;;; "abcdef"
(substring "01234567" 3) ;;;;;;;;; "34567"
(substring "0123456789" 3 5)      ;;;;; "34"

转换函数

;;;;;;;;;字符,字符串互转
(string-to-char "a")
(char-to-string ?a)

;;;;;;字符串,数字
(string-to-number "256")
(number-to-string 256)
(format "%#o" 256)     ;;; "0400"
(format "%#x"  256)    ;;;; "0x100"

;;;;;; 列表或向量与字符串
(vconcat "abdef") ;;;;;;;[ 97 98 100 101 102]
(append "abcdef" nil)    ;;;;;;;;;;;(97 98 99 100 101 102)
(concat '(?a ?b ?c ?d ?e)) ;;;;;;;; "abcde"

大小写

(downcase "What Is Your Name") ;;;;;;;;; "what is your name"
(downcase ?A)            ;;;;;;;;;;;;;;;; 97
(upcase "what is your name")       ;;;;;;;;; "WHAT IS YOUR NAME"
(upcase ?a)                 ;;;;;;;;;;;;;;;;;; 65

(capitalize "what is your name") ;;;;;;;;;;; "What Is Your Name"

字符串比较

;;;;;;;;; string-match的参量是一个regexp
(string-match "34" "01234567890") ;;;;;;;; 3

(string-match "2*" "232*2=696")      ;;;;;;;; 0
(string-match (regexp-quote "2*") "232*2=696")   ;;;;;;;;;2
;;;;;;;; 在匹配到数据后,会记录匹配的位置,可以用match-data, match-beginning, match-end等函数来访问
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,294评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,493评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,790评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,595评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,718评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,906评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,053评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,797评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,250评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,570评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,711评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,388评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,018评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,796评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,023评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,461评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,595评论 2 350