分类 IDE 下的文章

问题

org-mode 中 _ 在导出时会被认为是 下标, ^ 在导出时会被认为是上标。

解决方法

  • (setq org-use-sub-superscripts "{}") 上下标必须使用 {} 来包裹才能生效
  • #+OPTIONS: ^:nil,上下标无效, #+OPTIONS: ^:{} 上下标需要 {} 来包裹。

参考:

Org 文字有下划线时,导出来很混乱
https://emacs-china.org/t/org/936

orgmode中文粗体/斜体/下划线等等的显示
https://emacs-china.org/t/orgmode/9740/11

科研人员请进,你们平时都用emacs做些什么?
https://emacs-china.org/t/topic/5216?u=kinono

在Emacs组织模式导出中禁用下划线到下标
https://cloud.tencent.com/developer/ask/sof/118655

我的Emacs之Org-Mode
https://blog.51cto.com/lavenliu/1626566

2

2.6 plain lists

  • 描述性的列表,可以使用 :: 作为中间分隔符
  • m-s-ret 插入一个新的条目,并且带有选择框
  • c-c c-c 如果时选择框,那么就改变状态
  • c-c - 切换列表的开头,-,+,*,1.,1)

3 tables

  • 正常的表可以在下面这种情况按 tab 来生成。
|name|phone|
|-
  • 如果想要更快的生成,可以在 |name|phone 时使用 c-c ret 来生成
  • c-c | 把区域数据转换为表格,但是不太推荐,格式不太好
  • tab, s-tab 下一个或上一个
  • ret 下一行对应的列
  • m-left 等四个方向就是移动行和列。
  • m-s-left 这样的四个方向,就是删除或增加行或者列
  • c-c - 也是向下增加一行
  • c-c ret 下乡增加一行

4 hyperlinks

连接的种类非常多,从文件中内容,到图片,文档,邮件,聊天等等。

  • c-c l 保存文件中连接
  • c-c c-l 增加连接。或修改连接
  • c-c c-o 打开连接
  • c-c & 从连接跳转回来。

5. todo

5.1 todo 基本

  • c-c c-t 循环 todo 的状态。
  • s-left 左右方向循环状态。
  • c-c / t 查找 todo
  • c-c a t 全部 todo 表单
  • s-m-ret 下一行新增一个 todo

5.2 todo 扩展

  • 所有 org 文件都支持的全局扩展
(setq org-todo-keywords
      '((sequence "TODO" "FEEDBACK" "VERIFY" "|" "DONE" "DELEGATED")))
(setq org-todo-keywords
      '((sequence "TODO(t)" "|" "DONE(d)")
      (sequence "REPORT(r)" "BUG(b)" "KNOWNCAUSE(k)" "|" "FIXED(f)")))
  • 只在本 org 文件中增加的扩展,需要注意,开头 #+ 这样的,需要在当前行使用 c-c c-c 来刷新,让功能立即生效。
#+TODO: TODO(t) | DONE(d)
#+TODO: REPORT(r) BUG(b) KNOWNCAUSE(k) | FIXED(f)
#+TODO: | CANCELED(c)

5.3 时间戳

  • 如果需要所有 org 都追踪 DONE,那么 (setq org-log-done 'time)
  • 如果还需要添加相应的文本,那么 (setq org-log-done 'note) 这两种只需要一个就行了。
  • 如果只是本文件需要追踪,那么 #+STARTUP: logdone,需要添加文本的话,就 #+STARTUP: logenotedone 这两种只需要一个就行了。
  • 如果需要更加详细的,那些只记录时间,那些需要填写 note,可以 #+TODO: TODO(t) WAIT(w@/!) | DONE(d!) CANCELED(c@)! 表示时间, @ 表示文本。

5.4 优先级

  • c-c , todo 可以选择优先级,A最高,C最低,空格移除优先级。
  • s-up 上下两个方向键可以调整优先级。

5.5 子 todo

  • 可以通过正常的 * 的个数来决定 todo 的任务层级
  • 在需要进度的任务主任务后面添加 [/] 或者 [%] 可以在子任务有完成的时候,自动更新。 [/] 类似于 [1/2][%] 类似于 [50%]

*** 5.6 选择框

  • 当父进度 包含一些简单步骤的时候,就可以使用子选择框。
  • 父选择框和子选择框的区别就是 缩进不同,后面也可以通过 [/] 来表示进度
  • 当子进度有部分完成的时候,父进度会变为 [-]
  • c-c c-c 用来改变复选框是否勾选
  • m-s-ret 用来生成下一行新的复选框。

转自: https://www.cnblogs.com/zhmlzhml/p/12345580.html

一只小白看了大佬的讲解视频结合其他大佬给整理的笔记再结合emacs 官方英文手册,觉得自己的知识好像增加了.

当时自己在全网搜索的时候没有看到那种纯小白的手册,本小白就写了这个,就当奉献社会了.若有不当指出,希望大佬批评指正~

需要声明一个问题,emacs 中有很多命令行操作.本小白在短暂的emacs 生涯中,确实感觉到了命令行操作的高效.可以说,打开了emacs,基本上你就不需要碰鼠标了.(多么美好的事情!!)  当然我也是逼自己用习惯了才感觉出来的.emacs 命令行在之前的博客园也写过,大家可以参考一下~~

(刚刚发现一个问题!我下文中的左右键,全都是键盘左右键!!emacs 基本不用鼠标!!!)

注意:C- 是指按住ctrl再按另一个键,M-是指按住alt再按另一个键.

打开emacs ,(本机为linux debian,windows机应该还需要别的配置...)C-x C-f 后输入一个文件名,注意,后缀是 .org

回车打开它.

基本操作:建立任务(注意注意,这玩意叫任务)

* (星号后加一个空格)是第一极

** (两个星号加空格) 是第二级

...

一直可以到十个*

按住alt敲回车.底下会自动出来同级的* 复制代码

* go home
** do my homework
** watch TV//这个就是alt 回车 之后自动变行
** drink some milk
*** add some sugar
*** 200ml
* go to school

一.显示

其实这样看起来挺难受的

那还有一个可以实现一下缩进

在最开头加

#+STARTUP: indent

(注意冒号后面有个空格)

加上之后,按C-c C-c (就是按两次C-c)

就有缩进了

把这个说完

在开头加这些东西,就会有不同的打开视图.(当然不要一下写好几个)

1 #+STARTUP: overview
2 #+STARTUP: content 
3 #+STARTUP: showall
4 #+STARTUP: showeverything

从上到下依次显示完全

(第一个是默认的,他只能显示一个星的那级,其他的被省略号代替了,当然你要是想打开,按tab,合上就是tab shift一起按.)

注意一下3,4的区别.

4可以把包括抽屉在内的全部显示.3不显示抽屉.

抽屉的代码:

1 : PROPERTIES
2 这是抽屉//两个东西之间的就是抽屉
3 : END

二.时间

如何在任务管理中插入时间呢.

时间分为激活时间和未激活时间

1.激活时间命令

C-c .(英文状态的句号)

然后他会给你一个日历,你可以手动选哪天,也可以直接写上  +1  这样的表示往后推一天.

如果需要具体时间,就自己打上就行.

激活时间是这个样子的<2001-06-15  五>,后面是星期几,如果忘记了命令,也可以手动打上这个样子,他也会变成应该的颜色.

如果打日期不知道星期几,那就把括号先补全就像这个样子<2001-06-15> 然后光标定在他身上,按C-c C-c,他自己就出来了.

并且,按住shift 再按键盘左右键,他可以变前后日期.

如果鼠标点他,他会出来另一个窗格(emacs 的多窗格特别强大),如果你不需要他,按 C-x 再按1 就行了.

2.非激活

C-c !(英文状态下的感叹号)

显示为[2001-06-15 五]

3.三种时间状态

schedule

C-c C-s

他会让选一个时间,选完了之后,和激活状态不同的是他前面会有SCHEDULE:字样(刚才试了试,自己打也可以,就是有时候会落前后的空格导致失效)

deadline

C-c C-d

closed

这个比较特殊,需要在开头加上

#+STARTUP: updone

(冒号后面有空格不要吃亏)

这个closed就是在你把完成状态定为done 之后,他的时间便不会i再显示.(下一个就讲完成状态!!!!)

三.完成状态

默认完成状态有两种 TODO DONE(颜色分别是红色和绿色)

光标放在在一个任务中,你可以规定他的状态,左边的shift配合键盘左右键,多按几下就看出来规律了.

当然,你可能不满意只有两种状态,那就自定义啊.

在开头写上

#+TODO   TODO(t)  DOWN(d)  WAIT(w)  ARRANGE(a)

(这种的弄完了以后一定要按C-c C-c,光标别忘定在那一排上)

TODO(t)  DOWN(d)  WAIT(w)  ARRANGE(a)这些完全是自己写,规格就是大写(一个字母)那一个字母是快捷键

可以用快捷键换这个状态,当然我会选择直接shift 加左右键

当然,如果你自己定义的里面没有写原来的TODO DONE那底下的这两个也会自动失去他们的颜色(就是失效)

四.标签

光标定在所需要行,C-c C-c 召唤标签,可以看出在下面出现 tags: 输入后回车就可以插入标签了.

(所以在上面的操作中,如果你不把光标定在#+那一排,你召唤的是标签)

自定义标签

开头写

#+TAGS:  学校(s)     家(h)     school (a)   home(b)

C-c C-c 之后,

再找你需要标签的那行 C-c C-c,他会给你显示你刚刚最上面输的那几个选项.你按小括号里的那个字母就可以定上他所代表的标签.

注意:可以插入多个标签,插入结束后回车.

五.agenda

这样就算是写完了,C -x C-s 保存之后,C-c [ (英文模式的左中括号)将他设置成agenda 格式

然后M-x 输入 org-agenda 他会询问你显示什么,你根据他的询问按他前面的那个字母就行了.

  

总之,这是一个我觉得挺漂亮还很强大的一个编辑器.

多说一句,用了emacs 以后很容易发现Ctrl键是多么的脆弱,每天都在不停地被戳.

希望这篇能对大家有帮助吧!

为了自己,和那些爱你的人

背景

观看 https://www.youtube.com/watch?v=oJTwQvgfgMM 时的记录

起因

文本文件便于读取,比较,版本控制,编译运行等等。而且文本文件用于转化项目,任务等也是很自然的事情,所以才有了 org-mode.

优点

  • 和各种文件,email,聊天工具等等可以 link
  • plain text 表达表格。
  • 可以直接使用 plain text 表达 latex.
  • 可以用于 gtd,父级相应的属性可以传给子级。
  • 可以每天日程安排
  • 表格能够写计算公式,并计算结果

快捷键

  • tab 展开和收起
  • s-tab 全部展开,全部收起
  • m-up, m-down 同一层目录下面的上下移动,m-left, m-right 层级的改变
  • m-s-up, m-s-down 所有层级之间都可以上下移动,m-s-left, m-s-right 层级的改变
  • m-left, m-up ??? 表格列移动交换位置??? (31:00)

org 执行语句

#+BEGIN_SRC emacs-lisp
(+ 2 3)
#+END_SRC
  • 在有语句的那一行 c-x c-e,就能够看到 minibuffer 中的结果了。
  • 在 org-mode 中,我们还可以 c-c c-c 来执行,执行的时候会提示我们是否执行,确定执行后,会在下面的 result 里面显示结果,具体如下:
#+BEGIN_SRC emacs-lisp
(+ 2 3)
#+END_SRC

#+RESULTS:
: 5

source code mode

对于源码块,可以使用 C-c ' 打开一个新的窗口来展示源码部分,在源文件里面这个代码块会高亮。新的窗口可以使用 再次c-c ' 或者 c-c c-k 来关闭。

在这个代码窗口中,可以使用 c-x c-e 来执行,修改好了之后, c-c ' 相应的改动会回到原来的文件中去。
甚至可以放个俄罗斯方块的游戏在里面:

#+BEGIN_SRC emacs-lisp
  (tetris)
#+END_SRC

org 文件加入 init.el中

把 org 文件加载到 init.el 中,需要注意 org 文件名不能是 init.org,因为 init.el 中包含的 org 文件,都会被编译为 el 文件,所以如果是 init.org 文件,编译了之后,就变成 init.el 就会覆盖掉原来的 el 文件。

;; add org in init, notice that, file name must not "init.org"
(org-babel-load-file (expand-file-name "~/.emacs.d/myinit.org"))

这样,下次打开的时候,就会自动运行俄罗斯方块了。

init.el 内容移到 myinit.org

  • init.el 中除了 elpa 和 use-package 的,其他所有的全部移动到 org 中去。
  • 在 org 中,输入 <s 然后按 tab 就可以扩展为代码块的外壳。别忘了后面写上 emacs-lisp,表明代码是 elisp
  • (global-set-key (kbd "<f5>") 'revert-buffer) 这个代码块中输入 c-c c-c 来执行一下,然后就可以使用<f5> 来刷新了

别忘了在开头加上: #+STARTUP: overview,在里面增加:

;; use y and n instead yes and no
(fset 'yes-or-no-p 'y-or-n-p)

;; bind <f5> to revert-buffer
(global-set-key (kbd "<f5>") 'revert-buffer)

参考:

Using Emacs - 10 - org init files
https://cestlaz.github.io/posts/using-emacs-10-org-init/

using-emacs
https://github.com/zamansky/using-emacs/tree/aca7b431853b51205c0fed8ffdb1f2ad66b48ba1

系统 theme

m-x customize-theme 可以选择自带的主题,比如说 manoj-dark, tango-dark 等等都不错。

也可以使用 m-x load-theme 来加载指定的主题。

如果需要每次都加载指定主题,需要修改 init.el,增加:

(load-theme 'tango-dark t)

color-theme

这个是第三方主题,但是这个已经太旧了,推荐使用 color-theme-modern,如果已经安装了这个旧的,那么需要卸载,卸载的方法是 m-x list-package 找到 color-theme 然后 d 标记删除,x 执行。

;;(use-package color-theme
;;  :ensure t)

可以使用 color-theme-select 来选择需要加载的主题。

zenburn-theme

这个也是第三方主题

;; zenburn-theme: https://github.com/bbatsov/zenburn-emacs
(use-package zenburn-theme
  :ensure t
  :config (load-theme 'zenburn t))

暂时感觉,还是tango-dark 更加好看一点。

参考:

Using Emacs - 9 - Themes
https://cestlaz.github.io/posts/using-emacs-9-themes/

color-theme
https://github.com/emacsattic/color-theme

color-theme-modern
https://github.com/emacs-jp/replace-colorthemes#color-theme-modern--

zenburn-theme
https://github.com/bbatsov/zenburn-emacs

emacs常用命令:包安装、卸载
https://www.douban.com/note/515975650

原版的自动补全

emacs 有自己内置的自动补全,只需要 m-/ 就可以补全当前的内容。

第三方自动补全主要有:auto-complete 和 company,这次就先使用 auto-complete

;; auto-complete: https://github.com/auto-complete
(use-package auto-complete
  :ensure t
  :init
  (progn
    (ac-config-default)
    (global-auto-complete-mode t)
    ))

使用的时候,至少需要两个字符,等待0.5秒,就可以自动弹出选择栏,然后使用 m-n, m-p 来进行上下选择即可。

参考:

Using Emacs - 8 - Autocomplete
https://cestlaz.github.io/posts/using-emacs-8-autocomplete/

Emacs 安装 auto-complete (转)
https://www.cnblogs.com/yourihua/archive/2012/04/19/2457825.html

swiper 重新整理配置

(use-package swiper
  :ensure t
  :bind (("C-s" . swiper)
;;   ("C-r" . swiper)
     ("C-c C-r" . ivy-resume)
     ("M-x" . counsel-M-x)
     ("C-x C-f" . counsel-find-file))
  :config
  (progn
    (ivy-mode)
    (setq ivy-use-virtual-buffers t)
    (setq enable-recursive-minibuffers t)
    (setq ivy-display-style 'fancy)
    (define-key minibuffer-local-map (kbd "C-r") 'counsel-minibuffer-history)
    ))

bind 是用来绑定按键的, define-key 指的是,在 minibuffer-local-map 这个模式下,c-r 代表 counsel-minibuffer-history

avy,在搜索的时候,把屏幕上每个匹配的都分配不同的字符,输入相应的字符就可以跳转到对应的位置

;; avy; https://github.com/abo-abo/avy
(use-package avy
  :ensure t
  :bind (("M-s" . avy-goto-char)
     ("M-g f" . avy-goto-line)
     ("M-g w" . avy-goto-word-1)
     ("C-c C-j" . avy-resume)
     ))

注意: 在 c-s 这个正常的搜索模式下,也可以通过 C-c C-j 来标识相应的位置,然后直接跳转,但是跳转了之后,需要用 <esc> <esc> <esc> 来结束,普通的 c-g 很难结束。

如果想直接使用默认的配置,可以这样:

(use-package avy
:ensure t
:config
(avy-setup-default))

参考:

Using Emacs - 7- Navigation with Avy
https://cestlaz.github.io/posts/using-emacs-7-avy/

Emacs入坑之旅——按键(快捷键)绑定的多种方式
https://www.jianshu.com/p/07996a1af7b0

查看包的描述信息

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/

多窗口

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