我参与了使用选项卡的 python 项目,但是我没有在我编写的所有其他代码中使用它们,在该特定项目中使用它们至关重要。项目位于特定目录下的一个目录中。 IE:
\main_folder
\project1
\project2
\project3
...etc
我在文件打开时有几个函数/钩子(Hook),并保存我正在处理的 untabify 和 tabify 整个缓冲区。
;; My Functions
(defun untabify-buffer ()
"Untabify current buffer"
(interactive)
(untabify (point-min) (point-max)))
(defun tabify-buffer ()
"Tabify current buffer"
(interactive)
(tabify (point-min) (point-max)))
;; HOOKS
; untabify buffer on open
(add-hook 'find-file-hook 'untabify-buffer)
; tabify on save
(add-hook 'before-save-hook 'tabify-buffer)
如果我把它放在 .emacs 文件中,它会在我打开的每个 .py 文件上运行,这不是我想要的。我想要的是让这些钩子(Hook)仅在一个具有相应子文件夹的特定文件夹中使用。试过 .dir_locals 但它只适用于属性而不是钩子(Hook)。我不能在特定模式(即 python 模式)下使用钩子(Hook),因为几乎所有项目都是用 python 编写的。老实说,我尝试编写 elisp 条件保存但失败了。
最佳答案
一个非常简单的解决方案是添加一个可用于禁用 Hook 的配置变量。例如:
(defvar tweak-tabs t)
(add-hook 'find-file-hook
(lambda () (when tweak-tabs (untabify (point-min) (point-max)))))
(add-hook 'before-save-hook
(lambda () (when tweak-tabs (tabify (point-min) (point-max)))))
现在您可以添加
.dir-locals.el
相关目录中的文件,设置tweak-tabs
至nil
,在此处禁用此功能。(但另一个问题是这是处理选项卡的一种非常糟糕的方式。例如,在您保存文件后,您确实会看到其中的选项卡。)
关于emacs - 如何根据文件位置运行 Hook ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6368742/