2022年5月

查看包的描述信息

m-x describe-package, 查看包描述。
在包的描述中一般有相应的配置命令,比如 (lorem-ipsum-use-default-bindings),那么直接在这一句的后面 c-x c-e,就可以执行这条语句,并且立刻用起来了。

lorem-ipsum

在包描述里面执行配置命令后,就可以在 scratch 这个窗口就可以直接运行了 c-c c-l p 来插入相应的段落,这种段落比较长,可以在段落里面使用 m-q 来变成短的段落。

搜索

内置的搜索可以用,但是 swiper 更加好用。

;; swiper: https://github.com/abo-abo/swiper
(use-package swiper
  :ensure t
  :config
  (progn
    (ivy-mode)
    (setq ivy-use-virtual-buffers t)
    (setq enable-recursive-minibuffers t)
    ;; enable this if you want `swiper' to use it
    ;; (setq search-default-mode #'char-fold-to-regexp)
    (global-set-key "\C-s" 'swiper)
    (global-set-key (kbd "C-c C-r") 'ivy-resume)
    (global-set-key (kbd "<f6>") 'ivy-resume)
    (global-set-key (kbd "M-x") 'counsel-M-x)
    (global-set-key (kbd "C-x C-f") 'counsel-find-file)
    (global-set-key (kbd "<f1> f") 'counsel-describe-function)
    (global-set-key (kbd "<f1> v") 'counsel-describe-variable)
    (global-set-key (kbd "<f1> o") 'counsel-describe-symbol)
    (global-set-key (kbd "<f1> l") 'counsel-find-library)
    (global-set-key (kbd "<f2> i") 'counsel-info-lookup-symbol)
    (global-set-key (kbd "<f2> u") 'counsel-unicode-char)
    (global-set-key (kbd "C-c g") 'counsel-git)
    (global-set-key (kbd "C-c j") 'counsel-git-grep)
    (global-set-key (kbd "C-c k") 'counsel-ag)
    (global-set-key (kbd "C-x l") 'counsel-locate)
    (global-set-key (kbd "C-S-o") 'counsel-rhythmbox)
    (define-key minibuffer-local-map (kbd "C-r") 'counsel-minibuffer-history)
    ))

还是使用 progn 这个套路,从 swiper 里面把配置文件复制过来,放到这个 progn 这个块里面,然后使用 tab 来每行进行对齐上一行。
注意,如果c-x c-e 的时候,没有这个包,那么还要 m-x package-refresh-content 来更新包才行。

注意: 视频里面旧版的 swiper 还需要先安装 counsel,但是现在的不需要了。旧版的需要增加如下配置:

(use-package counsel
  :ensure t
  )

注意: 使用了 swiper,就不需要再使用 ido-mode 了,可以注释掉 ido-mode了。

参考:

Using Emacs - 6 - Searching a Swiper
https://cestlaz.github.io/posts/using-emacs-6-swiper/

virtual box 设置加大空间

管理 -> 虚拟介质管理,把里面的硬盘空间拉大。

linux 分配加大的空间

  • sudo apt install gparted 安装分区工具
  • 打开分区工具,在 extened 上面右键选择 resize,然后把剩余的容量全部加上去。
  • /dev/sda5 上面右键选择 resize,然后把剩余的容量全部加上去。
  • 点击工具栏的勾,就可以执行扩容了。
  • df -h 检查一下容量对不对。

参考:

为VirtualBox下Linux-Ubuntu虚拟机增加虚拟硬盘容量(傻瓜化操作,全程UI下完成)
https://www.cnblogs.com/r0xFED/p/12121724.html

多窗口

  • c-x 2 下方窗口
  • c-x 1 回到单个窗口
  • c-x 3 右方窗口
  • c-x o 跳到其他窗口
  • c-x 0 关闭本身这个窗口

窗口之间可以再次细分为更小的窗口。

winner-mode

;; winner-mode
;; global minor mode that allows you to “undo” and “redo” changes in WindowConfiguration
(winner-mode 1)

运行之后,当我们 c-x 1 只保留一个窗口之后,c-c left 表示恢复以前的多窗口布局,c-c right 继续回到一个窗口。

windmove

;; windmove: s-left, s-up, s-right
(windmove-default-keybindings)

windmove 默认使用 s-up, s-down, s-right 等分别进入不同方向的窗口。

progn

use-package init 阶段需要执行多条语句,就需要使用 progn 把多条语句框起来,作为一个整体来看待。

ace-window

这个可能内置的没有,别忘了 m-x package-refresh-content 刷新包。

;; ace-window: https://github.com/abo-abo/ace-window
;; progn: more than one command
(use-package ace-window
  :ensure t
  :init
  (progn
    (global-set-key [remap other-window] 'ace-window)
    ))

使用 ace-window 来代替原生的 other-window,当 c-x o 的时候,每个 window 的左上角都会有一个数字标识,随后输入你想要的那个标识,就可以跳转到你想要的窗口了。

;; ace-window: https://github.com/abo-abo/ace-window
;; progn: more than one command
(use-package ace-window
  :ensure t
  :init
  (progn
    (global-set-key [remap other-window] 'ace-window)
    (custom-set-faces
     '(aw-leading-char-face
       ((t (:inherit ace-jump-face-foreground :height 3.0)))))
    ))

上面增加的这一段的作用,只是为了按 c-x o 的时候,各个窗口左上角的数字比较大而已。

参考:

Using Emacs - 5 - Windows
https://cestlaz.github.io/posts/using-emacs-5-windows/

切换文件

如果是经常使用的两个buffer,可以直接 c-x b 这样两个互相切换。 如果是第三个buffer,那么需要使用名字才能切换。

关闭不用的文件。

c-x k 可以用来关闭当前不再使用的 buffer. 或者输入文件名,用于关闭对应的文件。

新建 buffer

c-x c-f 可以用来新建 buffer,当觉得可以保存的时候,c-x c-s,这时候才真正作为一个文件保存下来,否则前面一直是在内存里面的。

ido-mode 提供选项代替输入,特别是 buffer 切换的时候

;; ido-mode https://www.masteringemacs.org/article/introduction-to-ido-mode
(setq ido-enable-flex-matching t)
(setq ido-everywhere t)
(ido-mode 1)

每一条语句后面都要 c-x c-e.

类似于 ido-mode 的还有 helm, Swiper, counsel, anything 等等。

替换 list-buffers

;; use ibuffer instead list-buffers
;; http://xahlee.info/emacs/emacs/emacs_buffer_management.html
;; https://mytechrants.wordpress.com/2010/03/25/emacs-tip-of-the-day-start-using-ibuffer-asap/
(defalias 'list-buffers 'ibuffer)
;; (defalias 'list-buffers 'ibuffer-other-window)

执行完了之后,再次按 c-x c-b 出来的就是 ibuffer 了,在这个界面中按 h 可以查看相应的帮助,按 d 可以标记需要删除的 buffer,标记完了之后,按 x 就可以执行了。 执行完之后,选择相应的 buffer <ret> 就可以进入了。

如果想要在另外一个窗口中显示 ibuffer,那么可以 m-x ibuffer-other-window

tab 标签展示

如果喜欢像浏览器那样的标签 buffer, 可以这样设置:

;; tarbar
(use-package tabbar
  :ensure t
  :config
  (tabbar-mode 1))

但是不太推荐这种方式。

加法

(+ 2 3) ,输入 m-x eval-last-sexp 或者 c-x c-e 就可以执行这条语句,下面会有结果生成。

设置变量

(setq v 100)
(+ v v)

设置 v 为 100, 结果是 200.

执行内置函数

c-h k 查到 c-p 对应的函数是 previous-line.

(previous-line 5)

上面这条语句执行,就是光标向上移动 5 行。

查看输入的历史

m-x view-lossage 可以看到以前输入的命令。

设置隐藏工具栏

init.el 中添加:

;; hide tool-bar
(tool-bar-mode -1)

视频

Carsten Dominik 关于 org 模式的一篇很棒的 Google 讲话 : Emacs Org-mode - a system for note-taking and project planning
https://www.youtube.com/watch?v=oJTwQvgfgMM

org-mode 详细介绍: Getting Started With Org Mode (强烈推荐) https://www.youtube.com/watch?v=SzA2YODtgK4

elisp 介绍: An Introduction to Emacs Lisp
https://www.youtube.com/watch?v=2z-YBsd5snY&t=12s

swiper 详细视频: swiper screencast
https://www.youtube.com/watch?v=VvnJQpTFVDc

org-brain: Concept mapping in Emacs - Introduction
https://www.youtube.com/watch?v=3EGOwfWok5s

Getting Started with Org Roam - Build a Second Brain in Emacs
https://www.youtube.com/watch?v=AyhPmypHDEw

Emacs入门教程 (关于 elisp)
https://www.bilibili.com/video/BV1Pz4y1y7p9

网页

https://orgmode.org/

emacs org-mode 必须绑定的快捷键
https://orgmode.org/guide/Introduction.html#Activation

org-brain
https://github.com/Kungsgeten/org-brain

Org-roam
https://github.com/org-roam/org-roam

emacs 系列文章 https://changelog.complete.org/archives/tag/emacs2018

Emacs 系列(一):抛掉一切,投入 Emacs 和 Org 模式的怀抱
https://linux.cn/article-10297-1.html

Emacs 系列(二):Org 模式介绍
https://linux.cn/article-10312-1.html

Emacs 系列(三): Org 模式的补充
https://linux.cn/article-10327-1.html

Emacs 系列(四):使用 Org 模式自动管理邮件及同步文档
https://linux.cn/article-10334-1.html

Emacs 系列(五):Org 模式之文档与演示稿
https://linux.cn/article-10340-1.html

翻译--4.4 链接的各种操作 https://blog.51cto.com/darksun/1306574 # 文档 An Introduction to Emacs Lisp https://harryrschwartz.com/assets/documents/articles/an-introduction-to-emacs-lisp.pdf

段落上下移动

m - up, m - down 段落上移,段落下移。

字符 markup

  • *Bold*, 加粗
  • /italic/, 斜体
  • =verbatim=, 引用等浅色调
  • +strikethrough+, 删除线
  • -,以这个开头的类似于 markdown 中的 +

org-mode 必须增加的三个快捷键

* org-mode activation
  Add the following lines to your Emacs init file to define global
  keys for three commands that are useful in any Emacs buffer, not
  just Org buffers.

  #+BEGIN_SRC emacs-lisp
    (global-set-key (kbd "C-c l") #'org-store-link)
    (global-set-key (kbd "C-c a") #'org-agenda)
    (global-set-key (kbd "C-c a") #'org-agenda)
  #+END_SRC

链接

  • 网络链接,直接 c-c c-l 就可以输入链接和描述了。
  • 文件内链接,需要先在出处 c-c l 或者 m-x org-store-link 来生成链接,然后在需要的地方 c-c c-l,按 up 按键,就可以直接加载刚才保存的文件链接了。

在链接上 c-c c-o 就可以跳转链接了。

表格

  • 第一行,只要输入类似 |some|data|
  • 第二行,只要输入 |- 然后 tab 就可以全部补完
  • 下面每一个格子,都可以通过 tab 来切换
  • m-up, m-down 可以表格中对行进行上下调换, m-left, m-right 可以表格的列进行左右调换。

导出其他格式

  • c-c c-e 导出选择界面
  • h, o 就可以自动打开浏览器,展示刚才导出的 html 格式的文档。
  • 在导出界面中,c-s 可以选择 export scope 是 buffer,还是subtree,也就是是整个文件,还是大纲

增加文档描述

  • #+TITLE: A Gentle Introduction to Org-mode 在文本的任何地方,有这一行,就可以在导出的文件中显示在标题栏。
  • #+OPTIONS: toc:nil, 导出文件没有目录。

源码块

  • <s 然后 tab,然后输入代码的格式,比如 emacs-lisp, ruby 等等
  • 在代码块中使用 c-c ' 就可以打开专门的窗口,来编写代码块。
  • 源码想要导出 html 格式,需要安装 htmlize 才可以。别忘了在 myinit.org 里面增加相应的 use-package.
  • 如果想要执行相应的代码块,那么必须安装了相应的插件

LaTeX

  • - Character: \alpha \rightarrow \beta 这个导出之后,就是 a -> b
  • - $O(n \log n)$ 这个也可以生成类似于 O(n log n)
  • 下面的生成两行表达式
\begin{align*}
  3 * 2 + &= 6 + 1 \\
          &= 7
\end{align*}

literate programming

指的就是 org 里面的代码块,可以用于 init.el中。

  • c-c ; 标记为注释

Todo stuff

  • TODO ... 标记为 todo
  • s-m-<ret>,在上一行结束,按这个组合键,可以立刻进入下一行的todo,直接输入相应内容即可。
  • c-c c-t, 可以在 todo, done, none 三种状态之间循环。
  • s-left, s-right 修改时间戳
  • c-c c-d,可以指定 deadline,使用 s-up, down, left, right 来选择日期。
  • 'c-c a`, agenda
  • 'c-c c-x c-d`,归档完成的事情
  • c-c c-c, capture, capture中输入的好像放到一个 bookmarks 文件里面去了。
  • todo 也可以嵌套。

其他杂项

  • 联系人地址簿 (40:00)
  • blog 可以使用 org2blog,或者 org-publish
  • ox-twbs 可以导出支持 tw 的 html 格式。(46:00)
  • ox-gfm 可以导出支持 github 的 markdown 格式。(46:20)
  • org-drill,可以生成问答小卡片 (46:50)
  • orgzly, 安卓设备上使用 org-mode 来同步的 gtd 工具。
  • entr,服务器上运行的软件,当文件有改变时,执行指定的命令。
  • owncloud, nextcloud, 私有云部署 (54:00)

参考:

Getting Started With Org Mode
https://www.youtube.com/watch?v=SzA2YODtgK4

github: Harry R. Schwartz
https://github.com/hrs

dotfiles/emacs/dot-emacs.d/configuration.org
https://github.com/hrs/dotfiles/blob/main/emacs/dot-emacs.d/configuration.org

youtube

https://www.youtube.com/user/mzamansky/playlists

github

github 上面关于 emacs 的配置有三个仓库分别是:
https://github.com/zamansky/using-emacs
https://github.com/zamansky/dot-emacs-videos-to-77
https://github.com/zamansky/dot-emacs

上面这三个仓库按照时间顺序从旧到新,配合着上面的视频的是 using-emacs 这个仓库。

blog

https://cestlaz.github.io/stories/emacs/

org 相关视频

可以参考: https://www.youtube.com/watch?v=SzA2YODtgK4 这个视频对 org 讲解的比较深入。

org 层次

使用 * 来表达层次。

org 缩进

  - 123
  - 456

类似于上面这个,第一行可以直接使用 tab,然后输入 - 123,第二行的时候,可以 tab + - + tab 这样,第二行就可以和第一行对齐了。 如果是 -``tab 那么会比上一行还要缩进。

org 添加网络链接

c-c c-l 可以输入链接,然后 <ret> 可以输入描述。backspace 可以修改内容 当然也可以直接输入链接,如: [[https://www.bilibili.com][b站]] 在链接上 c-c c-o 就可以调用浏览器,打开对应的链接。

org 块操作

m-上m-下 可以把相应的块上移或者下移。 tab 可以打开或者收缩块。

org 打开的时候,就全部展开

在文件头部添加 #+STARTUP: showall, 然后重新打开这个文件,或者 m-x revert-buffer 也可以直接重新加载这个文件。

org 多个*,只显示一个,其他隐藏

把文件头的 #+STARTUP: showall 修改为 #+STARTUP: showall hidestars,然后 m-x revert-buffer 即可。

安装 org-bullets

;; org-bullets https://github.com/integral-dw/org-bullets
(use-package org-bullets
  :ensure t
  :config
  (add-hook 'org-mode-hook #'org-bullets-mode))

这个 config 下面的配置,是直接从 org-bullets 的 github 里面复制过来的,github 里面是这样的 :

(require 'org-bullets)
(add-hook 'org-mode-hook #'org-bullets-mode)

保存之后,运行 c-x c-e 来安装包。 安装完之后,在 org 的文件里面 m-x revert-buffer 就可以看到 * 变成子弹形状了。

问题:

git push 的时候,提示要不就关闭 github 上面的 email 隐私,要不就使用无回复邮箱。

解决方法

设置项目本身的 email。

  1. 进入项目根目录
  2. git config user.email xxxx@users.noreply.github.com
  3. 回退上次的提交,git reset --soft HEAD~1
  4. 使用新的 email 来提交,git commit -m "xxx"
  5. git push

参考:

remote: error: GH007: Your push would publish a private email address.
https://blog.csdn.net/neuldp/article/details/76737010