上周,由于不得不应对R和Perl的不同IDE而激怒(再次),我不喜欢或使用足够的IDE以获得真正舒适,我决定尝试使用Emacs。如果没有我的某种惶恐,就不会做出这个决定。我主要用于带有cperl的Perl和带有ESS的R。我的环境是Windows 7 Ultimate 64位,我正在运行v23.4.1,我认为这是代表我安装的ESS软件包。
近一个星期到目前为止,它已经令人惊讶地无痛,没有任何其他重要软件的参与。我已经将我的ctrl键重新映射到大写锁定,更改了默认文件夹,与.emacs混淆并添加了一些功能,如自动安装,yasnippet,颜色主题,冰柱和其他一些。显然,那里有一些非常复杂的东西。当然,基本Emacs的某些功能立即非常强大和有用,例如isearching up和down。总的来说,我感到惊喜和放心。
比我期待的更重要的是查找和打开文件的过程。在粗略阅读各种教程后,我得到了这个准魔法文件位置和文件名自动完成的图像。我的设置中的主目录有g:/ roaming / code / perl或g:/ roaming / code / R /等路径,但我经常需要分支到完全不同的路径,如g:/ pricingata / support files / sector / project01 /等等。
目前,当我需要使用不同的fork时,我会费力地删除文件路径,然后使用auto-complete深入到文件系统的那个分支。二十年前,它让我回到Amiga上运行bash shell。
我的期望是什么?类似于(使用上面的示例)键入'project01'以立即跳到路径底部的文件夹中。出于某种原因,我在脑海中得到了Emacs预加载目录的想法。所以这可能不太现实。
我的猜测是,我的困难可能源于我自己缺乏熟悉而不是Emacs的结构性缺陷,并导致我的问题。我不能抱怨没有足够的文件;相反,有大量的信息,它是随意分散的。冰柱有类似的问题 - 如果有什么太多的话。
1)尝试在迷你缓冲区中打开文件或使用其他方法时,在文件树的不同分支周围移动的最佳策略是什么?是否有可用于从一个地方快捷方式到另一个地方的别名,还是可以指定要预加载的目录?人们只是光盘很多吗?或者我是从完全错误的角度来看这个并且需要采取不同的策略?
2)通过附加设置,可以通过前缀通配符等自动完成用于在(例如)上面的project01中查找文件吗?我应该关注什么才能在这里变得更有效率?我没有利用像冰柱,任何东西等附加物的力量吗?
我意识到这些问题更加危险地关闭了没有明确答案的弃用类别。我的辩护是,在我承诺养成不良习惯或不良的长期解决方案之前,现阶段的一些提示/指导将受到欢迎,我怀疑这些答案将使其他可能正在考虑转换的人受益。如果有问题,我很乐意撤回或改写。
答案 0 :(得分:12)
helm
(以前称为anything
)可能适合您。您可以手动安装,也可以使用auto-install
扩展名。
对于auto-install
方式:下载它,放入load-path
,然后添加到.emacs
:
(add-to-list 'load-path "~/.emacs.d/site-lisp/auto-install")
(require 'auto-install)
(setq auto-install-directory "~/.emacs.d/site-lisp/auto-install/")
然后做M-x auto-install-batch anything
。完成后,输入.emacs:
(require 'anything)
(require 'anything-match-plugin)
(require 'anything-config)
(require 'anything-show-completion)
然后对M-x anything
做任何事情。
还尝试ECB
(代表Emacs代码浏览器)。如果您使用的是Linux,则可能在标准存储库中提供它。
答案 1 :(得分:9)
您可以使用ido-mode
,这可以大大增强emacs中的自动填充功能(特别是在查找文件或缓冲区时)
(setq ido-enable-flex-matching t
ido-auto-merge-work-directories-length -1
ido-create-new-buffer 'always
ido-use-filename-at-point 'guess
ido-everywhere t
ido-default-buffer-method 'selected-window)
(ido-mode 1)
(put 'ido-exit-minibuffer 'disabled nil)
(when (require 'ido-ubiquitous nil t)
(ido-ubiquitous-mode 1))
虽然这可能会帮助您快速找到“不远处”的文件,但它可能无法帮助您在完全不同的位置查找文件。
如果发现开始解决此问题的一种方法是使用recentf-mode
快速跳转到最近的位置(如果您只有少量常用项目目录,这可能会有所帮助)。 recentf
可以使用类似的内容与ido
结合使用(我不确定从哪里获得此代码段):
(recentf-mode 1)
(setq recentf-max-saved-items 50)
(defun ido-recentf-open ()
"Use `ido-completing-read' to \\[find-file] a recent file"
(interactive)
(if (find-file (ido-completing-read "Find recent file: " recentf-list))
(message "Opening file...")
(message "Aborting")))
(global-set-key (kbd "C-x C-r") 'ido-recentf-open)
有了这个,您可以使用C-x C-f
(ido-find-file
)查找当前位置附近的文件,并使用C-x C-r
(ido-recentf-open
)查找最近打开的文件(希望他们中的一个离你想去的地方不太远。)
答案 2 :(得分:7)
除了IDO和recetf,您还可以使用以下方法:
递归打开目录。
(defun op-i:dired (rec)
"customized dired: will display directory recursively when called with an argument"
(interactive "P")
(let ((dir (car (find-file-read-args "Dired: " nil)))
(opts (if rec (read-string "options: " "-lhAR") "-lhA")))
(if (file-directory-p dir) (dired dir opts))))
(define-key (current-global-map) (kbd "C-x C-d") 'op-i:dired)
然后,您可以使用(通配符)搜索在目录缓冲区中导航,就像在任何其他缓冲区中一样。
使用Emacs寄存器指向常用目录。您可以在.emacs中初始化它们
(set-register ?0 (cons 'file "c:/path/to/my-project0"))
(set-register ?1 (cons 'file "c:/path/to/my-project1"))
然后使用C-x r j
答案 3 :(得分:7)
有各种方法。 File name cache是内置的解决方案。打开文件from recent files也非常有效,特别是如果您将存储的文件设置为较大的数字(例如1000)。文件系统上还有opening files from anywhere的包。并且有一些元解决方案like anything.el可以在一个公共界面中显示来自多个来源(历史,项目文件等)的文件完成。
您应该调查不同的选项,找出最适合您的选项。
答案 4 :(得分:6)
其他人已经提到了什么,只要说,我相信它可以解决你所有的问题。 :)
调用任何内容的一个特定功能是anything-locate
。在* nix系统上,它使用locate命令创建的数据库来快速查找文件。在Windows上,我相信它适用于“Everything”,它可以让您在所有文件中获得接近即时的搜索结果。我的意思是所有。
汤姆提到了file-cache
。任何有用的东西。
正如旁注,一旦你习惯了,Dired就是一个绝对的怪物。您应该阅读与之相关的emacswiki页面。尤其是Emacs附带的dired-x
绑定 C-x C-j ,跳转到Dired中的当前缓冲区对我来说是一个启示。另外dired-find
,wdired
。
编辑:关于为什么 C-x C-j 很棒的一些细节。
当您在Dired缓冲区中弹出当前缓冲区时,您可以对其进行修改,即重命名,删除等。并且Emacs会知道您已完成的操作,并进行相应调整。
答案 5 :(得分:5)
其他可能性:
书签。 如果您使用 Bookmark+ ,那么您还可以:
书签Dired缓冲区,记住它们插入的子目录,标记和文件遗漏。您可以将打开的书签打开到一组特定的文件,这些文件不必位于同一目录甚至同一目录树中。
从Dired,你可以点击一个键为每个标记的文件或子目录创建一个单独的书签。
自动收藏文件(自动文件)。
使用任意文本标记标记书签和文件(自动文本书签)。 (标签甚至可以是非文本Lisp对象)。使用标签来组织,搜索等不同类别的书签。
为书签或书签文件或Emacs桌面添加书签。跳转到这样的书签以恢复给定的项目状态/上下文。
<强> Icicles 强>
即使从不同的目录中动态定义临时或持久的文件集。以各种方式操作集合中的文件。 (使用Emacs文件集,功能不强,方法相同。) 在任何完成命令期间完成针对此类已保存集的文件名,而不仅仅是文件查找。
在完成期间以不同方式对候选文件采取行动。
搜索已添加书签的对象或已保存的文件或缓冲区。
<强> Dired+ 强>
i
在子目录列表与父列表中的子目录行之间跳转。参考文献: