LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1184|回复: 5

Emacs 中的目录名补全

[复制链接]
发表于 2007-2-7 13:45:21 | 显示全部楼层 |阅读模式
Emacs 里的变量 completion-ignored-extensions 是一个列表,用来确定一个文件名或目录名是否会被忽略。如果这个列表里的名字是以斜线结束的,它就是一个目录名;所有和这些名字匹配的名字都会被忽略。

这有些不合理。例如,如果你在 Linux 系统里有个目录 kde.svn,或者在 Windows 系统里有个目录 emacs-cvs,这些名字就会被忽略。有时这不方便。

我准备做一个改进并将它推向上游。在 emacs-devel 上讨论后,我得到了两个解决方案:

[1] 添加一个变量 completion-ignored-names。只有与这个列表里的字符串匹配的名字会被忽略。

[2] 添加一个变量 completion-ignored-names-regexp。只有与这个列表里的正则表达式匹配的名字会被忽略。

很明显,completion-ignored-extensions 和 completion-ignored-names 所能处理的情况仅仅是 completion-ignored-names-regexp 所能处理的情况的子集。但是 [2] 可能是个过度设计:人们也许并不需要补全的正则表达式匹配。

请思考你是否需要这样的匹配方法。这将会影响这个特性的演化。

事先谢过了。
单选投票, 共有 4 人参与投票
100.00% (4)
0.00% (0)
您所在的用户组没有投票权限
发表于 2007-2-10 22:00:00 | 显示全部楼层
Post by herberteuler
Emacs 里的变量 completion-ignored-extensions 是一个列表,用来确定一个文件名或目录名是否会被忽略。如果这个列表里的名字是以斜线结束的,它就是一个目录名;所有和这些名字匹配的名字都会被忽略。

这有些不合理。例如,如果你在 Linux 系统里有个目录 kde.svn,或者在 Windows 系统里有个目录 emacs-cvs,这些名字就会被忽略。有时这不方便。

我准备做一个改进并将它推向上游。在 emacs-devel 上讨论后,我得到了两个解决方案:

[1] 添加一个变量 completion-ignored-names。只有与这个列表里的字符串匹配的名字会被忽略。

[2] 添加一个变量 completion-ignored-names-regexp。只有与这个列表里的正则表达式匹配的名字会被忽略。

很明显,completion-ignored-extensions 和 completion-ignored-names 所能处理的情况仅仅是 completion-ignored-names-regexp 所能处理的情况的子集。但是 [2] 可能是个过度设计:人们也许并不需要补全的正则表达式匹配。

请思考你是否需要这样的匹配方法。这将会影响这个特性的演化。

事先谢过了。

[color="Magenta"]
[1] 添加一个变量 completion-ignored-names。只有与这个列表里的字符串匹配的名字会被忽略。

[2] 添加一个变量 completion-ignored-names-regexp。只有与这个列表里的正则表达式匹配的名字会被忽略。

请问一下,这样做是否可以避免在同一目录下对某些目录进行操作时,不至于出现名称相同的问题吧。如果按你的方法识设置的话,emacs能自动识别吗?
上述这两种方法如果可行的话,能否在emacs 23中正常使用吗?
如果不用你所给的两个方案,我想能否在原来的基础上添加一个completion-ignored-record-var-list-regexp
我想这个功能应该可以解决在现有变量名称列表在重复条件下的自动选择问题。

另:
如果添加了completion-ignored-names这个功能,在emacs工作环境下,它能否识别出开发人员所做出的设置呢?能否给出一个可以提示的信息列表吗?还有如何在已有的emacs环境下查看completion-ignored-extensions这个列表吗?请herberteuler兄给个提示好吗?
回复

使用道具 举报

发表于 2007-2-11 17:13:46 | 显示全部楼层
恩,你的意思是用 completion-ignored-names 代替 completion-ignored-extensions 吗?那么我想还是用正则表达式吧,毕竟这个不是效率特别敏感的方面,不会有人10000次重复地来进行匹配。而正则表达式的灵活性又是更大的,不会为将来需要扩充而感到苦恼吧。所以我觉得还是使用正则表达式比较好。
回复

使用道具 举报

发表于 2007-2-11 21:59:03 | 显示全部楼层
Post by pluskid
恩,你的意思是用 completion-ignored-names 代替 completion-ignored-extensions 吗?那么我想还是用正则表达式吧,毕竟这个不是效率特别敏感的方面,不会有人10000次重复地来进行匹配。而正则表达式的灵活性又是更大的,不会为将来需要扩充而感到苦恼吧。所以我觉得还是使用正则表达式比较好。

[color="Magenta"]
那我能不能直接在变量列表中添加一个completion-ignored-regexp变量就可以了。直接用正则表达式来匹配所有符合条件的变量名称,以便在查找方面来得快些。
回复

使用道具 举报

 楼主| 发表于 2007-2-13 10:07:33 | 显示全部楼层
Post by pluskid
恩,你的意思是用 completion-ignored-names 代替 completion-ignored-extensions 吗?那么我想还是用正则表达式吧,毕竟这个不是效率特别敏感的方面,不会有人10000次重复地来进行匹配。而正则表达式的灵活性又是更大的,不会为将来需要扩充而感到苦恼吧。所以我觉得还是使用正则表达式比较好。
看上去正则表达式确实是一个好主意。但是,我不确定事实上有多少人会真正需要它。我自己也当然认为正则表达式更灵活,但到底我们在多大程度上依赖它呢?现在已有的扩展都是简单的匹配,而且功能也足够了。要保持客观确实很难。
回复

使用道具 举报

 楼主| 发表于 2007-2-13 10:10:25 | 显示全部楼层
Post by mylynx
[color="Magenta"]
那我能不能直接在变量列表中添加一个completion-ignored-regexp变量就可以了。直接用正则表达式来匹配所有符合条件的变量名称,以便在查找方面来得快些。
我不是很理解你说的话。仅仅添加一个变量是不能实现这个功能的,我们还需要调整一部分代码。要在 Emacs 环境里查看 completion-ignored-extensions 的值,可以用 C-h v completion-ignored-extensions RET。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表