在文件之间切换
emacs具有使用ff-find-other-file
函数在相关文件之间切换的一个不错的功能。默认情况下,这不绑定到任何键。我通常将其绑定到F5
,以在同一窗口中找到相关文件,然后M-o
在我的~/.emacs
中的新窗口中打开它:
(global-set-key '[f5] 'ff-find-other-file)
(global-set-key '[(meta o)] '(lambda() (interactive) (ff-find-other-file t)))
在模块和module_test.py之间切换
对于Python文件,相关文件可以是一个模块及其测试文件。为此,您需要一旦进入python-mode
,就需要将ff-other-file-alist
变量纠缠。您可以在~/.emacs
中这样做:
(add-hook 'python-mode-hook
(function
(lambda()
(setq ff-other-file-alist
'(("_test\\.py$" (".py"))
("\\.py$" ("_test.py")) ) ) ) ) )
在ff-other-file-alist
变量中,该顺序很重要,因为ff-find-other-file
在第一次匹配中停止。
在模块和test_module.py之间切换
在module.py
和test_module.py
之间切换更为复杂。默认情况下,ff-find-other-file
可与后缀一起使用。有一个未记录的功能(我必须查看源代码才能找到它):您可以传递函数的名称而不是替换后缀。
这是如何做的:
(defun py-module (fname)
(list (concat
(match-string 1 (file-name-nondirectory fname))
".py")) )
(defun py-test (fname)
(list (concat "test_"
(match-string 1 (file-name-nondirectory fname))
".py")) )
(add-hook 'python-mode-hook
(function
(lambda()
(setq ff-other-file-alist
'(("test_\\(.*\\)\\.py$" py-module)
("\\(.*\\)\\.py$" py-test))
) ) ))
在不同目录中查找
如果您的测试和模块不在同一目录中,则可以使用ff-search-directories
变量添加一些相对路径。例如:
(add-hook 'python-mode-hook
(function
(lambda()
(setq ff-search-directories '("." "../tests" "../src")) ) ) )