Font

  • 设置

    1
    2
    3
    
      (setq doom-theme 'doom-one)
      ;; or
      (load-theme 'doom-one)
  • 及时生效

    1
    
      (doom/reload-theme)

字体

  • 设置

    1
    2
    
      (setq doom-font (font-spec :family "Cascadia Mono" :size 15 :weight 'normal)
            doom-variable-pitch-font (font-spec :family "sans" :size 13))
  • 及时生效

    • M-x doom/reload-theme
  • bold test

    • bold italic _underline stroke raw string code
    • 今天

中文字体

doom 如何使用 cnfonts 参考: https://emacs-china.org/t/doom-emacs/9628/7

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
(defun +my/better-font()
  (interactive)
  ;; english font
  (if (display-graphic-p)
      (progn
        (set-face-attribute 'default nil :font (format "%s:pixelsize=%d" "Fira Code" 17)) ;; 11 13 17 19 23
        ;; chinese font
        (dolist (charset '(kana han symbol cjk-misc bopomofo))
          (set-fontset-font (frame-parameter nil 'font)
                            charset
                            (font-spec :family "Sarasa Mono SC")))) ;; 14 16 20 22 28
    ))

(defun +my|init-font(frame)
  (with-selected-frame frame
    (if (display-graphic-p)
        (+my/better-font))))

(if (and (fboundp 'daemonp) (daemonp))
    (add-hook 'after-make-frame-functions #'+my|init-font)
  (+my/better-font))

代码跳转

配置函数

packages.el

主要做 安装包声明

直接使用

1
(package! my-pack)

条件声明

1
2
(if (eq system-type 'windows-nt)
    (package! my-pack))

本地 git repo

1
2
(package! my-package
  :recipe (:local-repo "/path/to/repo/folder"))

config.el

use-package!

类似 use-package!

map!

多功能 key binding 工具

限制:不能在 未加载 feature 之前使用

featurep!

只用来判断 feature 是否存在

after!

after package loaded

错误修复

找不到 package

例子

  • 找不到 with-editor 包
  • 找不到 ghub 包

原因分析:

  • 安装过程异常

    • 安装过程中中断,相关包安装不完全(部分缺失),依赖缺失

解决方法

  • 保底方法:

    • 查找 load-path, 找到找不到 package 加载的包
    • 手动复制一份 "*.el" 等文件到 相应目录
    • 例如: with-editor

      • home/sawyer.emacs.d.doom/.local/straight/build-28.0.90/with-editor/
  • 重新开始

    • 删除 .emacs.d.doom/.local 文件夹
    • 重新安装: doom install

主题收集

显示文字突出

  • tsdh-dark
  • monokai-classic
  • doom-vibrant

python

virtualenv 虚拟环境

poetry 环境跟踪

  • poetry-track-mode

环境变量

存放位置: ~/.emacs.d.doom/.local/env

更新方法: doom sync 命令,自动更新 env 文件

map! 制作 key bindings

localleader

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
;; 验证可用
(map! :localleader
      :map python-mode-map
      :prefix "r"
      "r" #'my-elpy/execute-buffer
      )

(map! :localleader
      :map python-mode-map
      :desc "run current python buffer" "C-r" #'my-elpy/execute-buffer)

(use-package! python
  :commands (python-mode)               ;; 注意:必须有这一行才能 map! 部分生效,否则不被执行
  :config
  (map! :localleader
        :map python-mode-map
        :prefix "r"
        "r" #'my-elpy/execute-buffer
        )
  )

:leader

快捷工具

1
2
3
4
5
(map! :leader "key" #'my-fun)

;; 相当于
(map! (:prefix doom-leader-key
       "key" #'my-fun))

解说: 这里 doom-leader-key 是预先定义的 prefix 按键 "SPC"

前缀 :prefix

多个相同前缀的按键

1
2
3
(map! (:prefix "prefix-key"
       "key1" #'fun1
       "key2" #'fun2))
  • 注意: 不能给 :prefix 添加解释 :desc
1
2
3
4
5
6
7
(map! :map ein:notebook-mode-map
        "C-c C-x" nil
        (:prefix "C-c C-x C-c"
         "C-a" #'ein:worksheet-execute-all-cells
         "a" #'ein:worksheet-execute-all-cells-above
         "b" #'ein:worksheet-execute-all-cells-below)
        )

报错

error "selecting deleted buffer"

zsh 导致问题

  • emacs 不能加载 zsh 中的函数,只能识别 具体的可执行文件 command

    1
    2
    3
    4
    5
    
    (defun get-my-http-proxy ()
    "retrieve proxy value, depending on if current machinery is windows sub linux"
    (if (file-exists-p "/usr/bin/wslpath")
        (shell-command-to-string "enable_proxy; echo $http_proxy")
      "http://192.168.1.127:7890"))
    • 这里 enable_proxy 如果是 zsh 函数,会导致隐晦的问题

      • youdao-dictionary-search 报错 selecting deleted buffer
      • 这是配置 proxy 出现问题导致的
  • 解决方法

    • 把 enable_proxy 函数改写成一个可执行文件即可
    • 不要出现函数

      1
      2
      3
      4
      5
      
      (defun get-my-http-proxy ()
        "retrieve proxy value, depending on if current machine is windows sub linux"
        (if (file-exists-p "/usr/bin/wslpath")
            (shell-command-to-string "echo http://$(cat /etc/resolv.conf |grep nameserver|awk '{print $2}'):7890")
          "http://192.168.1.127:7890"))

fringe 边框样式

  • 设置当前 frame 风格

    • M-x set-fringe-style
  • 全局设置

    • default: (fringe-mode nil)
    • half: (fringe-mode '4)