elisp

目录

执行

#在下面显示结果
C-x C-e
#插入结果
C-j

变量

;; elisp 函数都是全局的,用 defvar 和 setq 定义的变量都是全局变量
;; 在 lisp 里把变量叫做符号可能更好一些
(defvar 变量名 变量值
  "变量描述文档")
(set '变量名 '变量值)
(setq 变量名 '变量值)

局部变量

;函数内通常用 let 定义局 部作用域的变量
(let (()...)
     ...)

变量的赋值

(setq f (buffer-file-name))
(setq s (file-name-sans-extension f))
(print s)
(insert (replace-regexp-in-string "/home/jimila/Desktop/blog/doc/" "" s))

定义函数

(defun insert-name ()
"在光标处插入现在编辑文件的名称"
   (interactive)
   (setq f (buffer-file-name))
   (setq s (file-name-sans-extension f))
   (insert (replace-regexp-in-string "/home/jimila/Desktop/blog/doc/" "" s)))
(insert-name)

;;在定义结束处 C-x C-e 安装函数
;;在调用处 C-x C-e 执行函数
;;C-h f 输入 name 可以看到函数描述

内置函数

#得到正在编辑的文件全路径
(buffer-file-name)

#在光标后插入 string
(insert "string")

#返回没有后缀的文件路径
(file-name-sans-extension f)

#把 s 中的 strin1g 替换为 string2
(replace-regexp-in-string "string1" "string2" s)

#切换到名为"*scratch*"的 buffer 里
(switch-to-buffer-other-window "*scratch*")

#清除 buffer 里的内容
(erase-buffer)

#得到当前位置
(point)

#得到最大位置
(point-max)

#得到最小位置
(point-min)

#移动到下一行
(next-line)

#buffer 的实体
(current-buffer)

#上一个 buffer 的实体
(other-buffer)

#切换 buffer
(switch-to-buffer (other-buffer))

#buffer 的大小
(buffer-size)

#到 buffer 的开始
(beginning-of-buffer)

#移动到第 100 个字符处
(goto-char 100)

#移动到第 100 行
(goto-line 100) 

#设置当前 point 为 mark,并把 oldmark 移动到 markring
(push-mark)

#打印 markring
(message "%s" mark-ring)

#移动到(push-mark)处
(goto-char (region-beginning))

#可以交换 mark 和 point
(exchange-point-and-mark)

#得到行数
(count-lines (point-min) (point-max))

#minibuffer 交互
(read-from-minibuffer "Enter your name: ")

#查找并返回位置
(search-forward "defun" nil t)

#把数字转换为字符串
(number-to-string 4)


#
(setq mystr "The quick fox jumped quickly.")
(string-match "\\(qu\\)\\(ick\\)" mystr)
(match-string 0 mystr)      =>结果为 quick,也就是模式匹配的结果
(match-string 1 mystr)      =>结果为 qu   ,也就是第一个分组的匹配结果
(match-string 2 mystr)      =>结果为 ick  ,也就是第二个分组的匹配结果


#当前目录
(pwd)

#获取当前的时间
(current-time)
(seconds-to-time 86400)
#打印出明天的日期
(format-time-string "%4Y-%2m-%2d" (time-add (current-time) (seconds-to-time 86400)))
(insert (format-time-string "%4Y-%2m-%2d" (current-time)))




#贪吃蛇游戏
(snake)

lambda 函数

;;
(lambda (参数列表)
  "函数描述文档"
  函数体)

控制结构

顺序执行

(progn A B C ...)

条件

(if ()
    ()
    ())

目录