elisp
2023年8月12日 2023年11月17日
便签
- |
---|
Manual |
李杀-Buffer |
文件
打开文件
1(find-file "path/to/file")
使用打开链接的方式,打开指定文件
1(org-open-file "path/to/file")
打开链接
C-c C-o
1(org-open-at-point)
文本
在光标处插入
1(insert "Hello")
读取输入
1(read-string "Promots: ")
搜索并替换
字符串replace-string
replace-string会跳过链接匹配
全文搜索并替换
1(while (search-forward "file:tt.txt" nil t) 2 (replace-match "file:pp.txt" nil t))
字符串查找
search-backward
1(search-backward "test") 2 3;; 查找成功返回t 4(search-backward "test" nil t)
正则查找
re-search-forward
- 目的字符串
!=UE_5.1/Engine/Source/Runtime/Core/Public/Math/Interval.h=
- 正则匹配
1(re-search-forward (rx "[[" "ue:" (group (0+ (not "]"))) "][虚幻引擎:" (group (0+ (not "]"))) "]]" )) 2 3;; 匹配返回t 4(re-search-forward (rx "[[" "ue:" (group (0+ (not "]"))) "][虚幻引擎:" (group (0+ (not "]"))) "]]" ) nil t)
复制
1(copy-region-as-kill (point-min) (point-max))
光标
光标所在位置
1(point)
去到指定位置
1(goto-char (point))
光标信息
1(what-cursor-position)
记忆光标位置, 处理结束恢复
1(save-excursion 2 (insert "hello"))
获取光标间字符串
1(buffer-substring-no-properties (point-min) (point-max))
缓冲区
获取buffer内容
1(buffer-string)
创建buffer
1(generate-new-buffer "test")
返回已有buffer或创建新buffer
1(get-buffer-create "test")
在指定buffer中处理
1(with-current-buffer (get-buffer-create "test") 2 (insert "hello") 3 )
在临时buffer中处理
1(with-temp-buffer 2 (insert "hello"))
保存buffer
1(save-buffer)
关闭buffer
1(kill-buffer)
获取buffer对应的文件名
1(buffer-name)
获取buffer对应文件的完整路径
1(buffer-file-name)
获取给定文件的buffer
1(get-buffer (buffer-name))
控制语句
条件控制语句
if
- 缩进作为true和false的分支
- 各一条语句
1(if (= 3 5) 2 (message "equal") 3 (message "not equal"))
when:cond为true时继续
1(when (< 3 5) 2 (setq ooout '("less")) 3 (message "%s" (cons "multi" ooout)))
unless:cond为false时继续
1(unless (> 3 4) 2 (setq ooout '("false" "3 < 4" "is" "true" "!")) 3 (pop ooout) 4 (message "%s" ooout))
循环while
break
1(let ((cnt 0)) 2 (catch 'break 3 (while t 4 (setq cnt (+ cnt 1)) 5 (sleep-for 1) 6 (if (= cnt 5) 7 (throw 'break t) 8 ) 9 ) 10 ) 11 )
功能函数
等待
1(sleep-for 2)
执行shell命令
1(shell-command "ps")
hook
添加hook
1(add-hook 'emms-player-started-hook (lambda () (emms-seek-to "05:05") (emms-pause)))
移除hook
1(remove-hook 'emms-player-started-hook (lambda () (emms-seek-to "05:05") (emms-pause)))
函数调用
funcall
第一个参数是函数,之后的组成参数列表,传入第一个参数对应的函数
1(funcall (emms-player-get player 'start) track) 2 3;; (emms-player-get player 'start) 查dictionary得到emms-player-mpv-start 4;; (emms-player-mpv-start track)
apply-partially
- 类似C++的bind,预设函数调用的参数
- 使用时,根据需求传入剩余参数
-
返回函数
将args作为func的前n个参数传入,调用函数时,和实际传参拼接,传给func
1(defun apply-partially (func &rest args) 2 ;;... 3 )
-
定义函数
1(defun emms-player-mpv-cmd (cmd &optional handler) 2 ;;... 3 ) 4 5(setq func (apply-partially 'emms-player-mpv-cmd play-cmd 6 (lambda (_mpv-data mpv-error) 7 (when (eq mpv-error 'connection-error) 8 (emms-player-mpv-cmd play-cmd))))) 9 10(funcall func)
定义变量
使用let定义局部变量
1(let ((x 10) (y 20) (z 30)) 2 (message (format "%d %d %d" x y z)))
变量之间存在引用
1(let* ((x 10) (y (+ x 10))) 2 (message (format "%d %d" x y)))
使用setq对局部变量值进行修改
使用setq定义全局变量
可以使用 C-h v
查看变量值
buffer-local变量
buffer内设置变量使用setq, 所有buffer生效使用setq-default
函数
返回值
函数最后一条语句的执行结果作为返回值
定义
可选参数:传参时,arg1必须匹配,arg2可选
1(defun test-func (arg1 &option arg2) 2 ;;... 3 )
可变参数:传参时,arg1必须匹配,之后传入参数个数可变
必须放在参数列表最后
1(defun test-func (arg1 &rest args) 2 ;;... 3 )
数据结构
string
删除空格
1(string-trim " Hello ")
切分字符串成列表
1(split-string opath "/") 2 3;; 不包含为空的元素 4(split-string opath "/" t)
判等
1(string= "hello" "Hello")
不改变字符串, 返回去除前缀结果
1(string-remove-prefix "/" slot)
list
构造list
1(setq slotlist '())
元素操作
-
将元素添加到列表(头插)
1(add-to-list 'slotlist export-name)
-
删除首元素
1(pop list)
-
获取指定元素
1(nth N list)
list操作
-
长度
1(length list)
-
打印
1(print list)
-
返回头插的新list
1(cons x list)
-
返回拼接后的新list
1(append list1 list2)
-
将list转换为字符串
1(format "%s" list)
-
遍历列表
1(dolist (item the-list) 2 ;; 操作item 3 )
-
将末尾元素组成列表
1(last list)
-
获取首元素
1(car list)
-
返回反转列表拷贝
1(reverse slotlist)
alist
Associate List
1(setq list '(("mary" . 23) ("john" . 24) ("smith" . 33)))
通过key获取键值对
1(assoc "john" list)
通过value获取键值对
1(rassoc 24 list)
获取键值对的key
1(car (assoc "john" x))
获取键值对的value
1(cdr (assoc "john" x))
运算符
不等
1/=