17.14.2 Packages that conflict with Org mode

Emacs 中的 Shift 选择通过 Shift 键配合光标移动扩大选中区域,为默认设置。该功能与 Org 使用 S-<cursor> 修改时间戳、TODO 关键字、优先级、项目符号等冲突。由于 S-<cursor> 在特定上下文外无操作,Org 提供变量 org-support-shift-select 供自定义。Org 模式适配 Shift 选择的方式为:(i) 在特殊命令上下文外启用 Shift 选择;(ii) 即使光标跨越特殊上下文,也可扩展已有选中区域。

cua.el’ ,作者 Kim F. Storm

Org 快捷键绑定与 CUA 模式使用的 S-<cursor> 方向键存在冲突。若要让 Org 将这些按键让渡给 CUA 模式,可配置变量 org-replace-disputed-keys 。启用该配置后,Org 会在 Org 文件及日程缓冲区中重新映射下列按键,但日期选择过程中除外。

S-UPM-pS-DOWNM-n
S-LEFTM--S-RIGHTM-+
C-S-LEFTM-S--C-S-RIGHTM-S-+

遗憾的是,这些新按键更难记忆。若想使用其他替代按键,可查看变量 org-disputed-keys

ecomplete.el’ ,作者 Lars Magne Ingebrigtsen

Ecomplete 可在邮件缓冲区的地址标题行中提供 “智能(electric)” 地址补全功能。但 Orgtbl 模式会影响其正常工作:若邮件缓冲区中启用了 Orgtbl 模式,在地址标题行输入文本时将无法触发补全。如需使用 Ecomplete,请勿按照建议在邮件缓冲区中自动启用 Orgtbl 模式(参见 The Orgtbl Minor Mode),而应在填写完邮件标题后,根据需要在邮件正文手动开启 Orgtbl 模式。

filladapt.el’ ,作者 Kyle Jones

Org 模式在对段落、列表项及其他元素进行填充时会尝试执行合理处理。许多用户反馈同时使用 ‘filladapt.el’ 与 Org 模式时会出现问题,因此较为稳妥的做法是按如下方式禁用 filladapt:

(add-hook 'org-mode-hook 'turn-off-filladapt-mode)
viper.el’ ,作者 Michael Kifer

Viper 使用了 C-c / 按键,导致该按键无法触发 Org 模式对应的命令 org-sparse-tree 。你需要为该命令另行绑定按键,或通过以下配置在 viper-vi-global-user-map 中覆盖该按键:

(define-key viper-vi-global-user-map "C-c /" 'org-sparse-tree)
windmove.el’ ,作者 Hovav Shacham

该包同样使用 S-<cursor> 方向键,因此上文关于 CUA 模式的说明同样适用。若希望在 Org 模式未对 S-<cursor> 定义特殊功能的位置启用 windmove 功能,可在配置中添加如下代码:

;; 让 windmove 在 Org 模式下正常工作
(add-hook 'org-shiftup-final-hook 'windmove-up)
(add-hook 'org-shiftleft-final-hook 'windmove-left)
(add-hook 'org-shiftdown-final-hook 'windmove-down)
(add-hook 'org-shiftright-final-hook 'windmove-right)
yasnippet.el

Org 模式对 TAB 按键的绑定方式(绑定为 [tab] 而非 "\t" )会覆盖 YASnippet 对该按键的使用。下列代码可修复此问题:

(add-hook 'org-mode-hook
          (lambda ()
            (setq-local yas/trigger-key [tab])
            (define-key yas/keymap [tab] 'yas/next-field-or-maybe-expand)))

最新版本的 YASnippet 与 Org 模式兼容性不佳。若上述代码无法解决冲突,可先定义如下函数:

(defun yas/org-very-safe-expand ()
  (let ((yas/fallback-behavior 'return-nil)) (yas/expand)))

然后告知 Org 模式使用该函数:

(add-hook 'org-mode-hook
          (lambda ()
            (make-variable-buffer-local 'yas/trigger-key)
            (setq yas/trigger-key [tab])
            (add-to-list 'org-tab-first-hook 'yas/org-very-safe-expand)
            (define-key yas/keymap [tab] 'yas/next-field)))