六一的部落格


关关难过关关过,前路漫漫亦灿灿。




便签

-
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

Catch-and-Throw

 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/=

elisp



便签

-
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

Catch-and-Throw

 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/=