Emacs:导航目录和打开文件的好策略是什么?

Emacs:导航目录和打开文件的好策略是什么?,emacs,icicles,Emacs,Icicles,上周,由于不得不处理R和Perl的不同IDE(这两种IDE我都不喜欢也不太习惯使用),我(再次)感到愤怒,我决定尝试Emacs。我做出这个决定时一定会感到有些不安。我的主要用途是将Perl与cperl结合使用,将R与ESS结合使用。我的环境是Windows7Ultimate64位,我运行的是v23.4.1,我认为这是ESS软件包代表我安装的 近一个星期以来,它一直令人惊讶的无痛,没有比任何其他重要的软件更多的参与。我已经将ctrl键重新映射到caps lock,更改了默认文件夹,修改了.emac

上周,由于不得不处理R和Perl的不同IDE(这两种IDE我都不喜欢也不太习惯使用),我(再次)感到愤怒,我决定尝试Emacs。我做出这个决定时一定会感到有些不安。我的主要用途是将Perl与cperl结合使用,将R与ESS结合使用。我的环境是Windows7Ultimate64位,我运行的是v23.4.1,我认为这是ESS软件包代表我安装的

近一个星期以来,它一直令人惊讶的无痛,没有比任何其他重要的软件更多的参与。我已经将ctrl键重新映射到caps lock,更改了默认文件夹,修改了.emacs,并添加了自动安装、yasnippet、颜色主题、冰柱等功能。显然有一些非常复杂的东西。当然,除此之外,基本Emacs的某些特性立即非常强大和有用,例如isearching up和down。总的来说,我感到惊喜和放心

有一件事比我预想的更粗糙,那就是查找和打开文件的过程。在粗略地阅读了各种教程之后,我看到了这幅准魔法文件位置和文件名自动完成的图像。我的设置中的主目录有g:/roaming/code/perl或g:/roaming/code/R/等路径,但我经常需要分支到完全不同的路径,如g:/pricedata/support files/sector/project01/等

目前,当我需要使用不同的fork时,我会费力地删除文件路径,然后使用autocomplete深入到文件系统的那个分支中。这让我又回到了20年前在阿米加号上运行bashshell的时代

我期待什么?类似于(使用上面的示例)键入“project01”立即跳到路径底部的文件夹中。出于某种原因,我脑子里有个想法,Emacs将预加载目录。所以这可能不现实

我的猜测是,我的困难可能源于我自己对Emacs的不熟悉,而不是Emacs的结构性缺陷,并导致了我的问题。我不能抱怨没有足够的文件;而是有大量的信息,它是分散在相当随意。冰柱也有类似的问题——如果有什么问题的话,那就是冰太多了

1)当尝试在minibuffer中打开文件或使用其他方法时,在文件树的不同分支之间移动的最佳策略是什么?是否有别名可用于从一个位置到另一个位置的快捷方式,或者可以指定要预加载的目录?人们经常光碟吗?还是我从完全错误的角度出发,需要采取不同的策略?

2)通过附加设置,“自动完成”是否可以用于通过使用通配符等前缀查找(例如)正上方项目01中的文件?在这里,我应该专注于什么以提高效率?我没有利用诸如冰柱之类的附加组件的功能吗?


我意识到,这些问题危险地接近了不赞成的没有明确答案的类别。我的辩护理由是,在我养成坏习惯或采取糟糕的长期解决方案之前,在现阶段提供一些提示/指导是受欢迎的,我怀疑这些答案将有利于可能考虑改换的其他人。如果有问题,我很乐意撤回或重新措辞。

使用
ido模式可以使您受益匪浅,这大大增强了emacs中几乎所有地方的自动完成功能(尤其是在查找文件或缓冲区时)

(setq ido启用flex匹配t
ido自动合并工作目录长度-1
我总是创建新的缓冲区
我在“猜测”点使用文件名
我不喜欢
ido默认缓冲区方法(选定窗口)
(ido模式1)
(将'ido exit MINIBURE'禁用为零)
(何时(需要“ido”和“无”)
(ido模式1))
虽然这可能有助于您在“不远处”快速查找文件,但可能对您在完全不同的位置查找文件没有多大帮助

如果您发现开始解决此问题的一种方法是使用
recentf模式
快速跳转到最近的位置(如果您只有少量常用项目目录,这可能会奏效)
recentf
可以使用类似的方式与
ido
结合使用(我不确定这段代码是从哪里获得的):

(recentf模式1)
(setq recentf最大保存项目数50)
(解除ido接收打开()
“使用'ido completing read'\\\[查找文件]最近的文件”
(互动)
(如果(查找文件(ido完成读取“查找最近的文件:”recentf list))
(消息“正在打开文件…”)
(消息“正在中止”))
(全局设置键(kbd“C-x C-r”)‘ido recentf open)

有了它,您可以使用
C-x C-f
ido find file
)查找当前位置附近的文件,并使用
C-x C-r
ido recentf open
)查找最近打开的文件(希望其中一个文件离您想去的地方不太远).

除了IDO和recetf外,您还可以使用以下方法:

  • 递归地打开目录

    (定义op-i:dired(rec)
    “自定义目录:使用参数调用时将递归显示目录”
    (交互式“P”)
    (let((dir(car(find file read args“Dired:”nil)))
    (选项(如果rec(读取字符串“选项”:-lhAR”)“-lhA”))
    (if(file-directory-p dir)(dired dir opts)))
    (定义键(当前全球地图)(kbd“C-x C-d”)'op-i:dired)
    
    然后,您可以使用(通配符)搜索在目录缓冲区中导航,就像在任何其他缓冲区中导航一样

  • 使用Emacs寄存器指向常用目录。您可以在.emacs中初始化它们

    (设置寄存器?0(cons文件“c:/path/to/my-project0”))
    (设置寄存器1(cons文件“c:/path/to/my-project1”))
    
    然后跳转到注册表