有效标签完成的Unix文件命名约定?

时间:2010-03-16 18:24:03

标签: bash unix shell emacs tab-completion

我觉得我经常命名文件的方式使我的计算机在编程时不断发出哔哔声,因为选项卡完成不明确。在进行大量Unix编程之前,我倾向于使用相同的前缀命名相关文件以指示它们之间的关系。现在我必须重新思考我对文件夹和文件结构和名称的处理方法,以便更有效地编程。

在编程以简化制表符完成时,您应用了哪些启发式或规则?您是否使用任何工具使标签完成更顺畅(例如emacs icicles)?

编辑:哇,谢谢您的精彩见解。我认为我的每个可能的弱点都在答案中得到了解释。我接受了一个看起来最好的生产力提升,尽管它们都值得一读。

7 个答案:

答案 0 :(得分:8)

我一般都处理相关文件都在同一个目录中的项目,文件名本身专门用于指示其内容。

当然,这引出了一个问题,为什么你要对文件名进行制表完成?如果您正在仔细阅读源代码,那么TAGSCEDET和其他utilities过多会让您绕过文件名并直接跳转到您的函数/变量真的过了。

这一切都取决于你真正想要做的事情,找到一个特定的文件通常是另一种手段。

答案 1 :(得分:5)

一般来说,

setterm -blength 0

将禁用终端的哔声。 GNU screen和一些图形终端有自己的蜂鸣声通知设置。

专门针对Bash和其他Readline - 使用软件,可以使用$INPUTRC/etc/inputrc~/.inputrc配置文件更改标签完成行为。例如,

bell-style none     # never ring the bell
bell-style visible  # use visual bell, if available

show-all-if-ambiguous on  # list all completions instead of ringing the bell

答案 2 :(得分:1)

我必须承认,我在不考虑标签完成的情况下命名我的文件,而是调整了我的标签,直到我知道我输入了足够多的字符才能得到制表符。

答案 3 :(得分:1)

具有通用性的文件目录通常是个好主意,但可能并非总是可行。在这些情况下,一种效果很好的简单方法是将通用性放在后缀中,而不是前缀中。例如,我将单元测试命名为“_test.py”作为后缀。反之亦然(例如test_foo.py)将为每个测试文件提交标签完成。

您可以将此想法扩展到扁平化层次结构的一般情况。例如,如果您具有类层次结构Person->Employee->Programmer,则可以通过调用测试programmer_employee_person_test.py来避免镜像代码的目录结构。同样,标识符的更多通用组件将在名称后面出现。

答案 4 :(得分:0)

我倾向于使用任何对代码组织有意义的东西,而不是标签完成 - 这可能会因所涉及的代码而异,所以很难给出直接的答案,但是使用适当的子目录会使生活更轻松。我同意唐。

相反,我使用find . -name {expr}(文件名),grep -r {expr} *(函数defs,protos和用法)及其组合等工具来浏览源代码。可以编写shell脚本,以便在整个源代码树中使用sed i 's/find/replace'有效地执行查找/替换操作。我的路径中有一个小文件夹,提供了一些像这样的有用脚本。

我将它与Eclipse(如Eclipse)进行编辑或VIM相结合,具体取决于我正在做什么。我同样非常喜欢,因为我将它们用于不同目的。

关于Emacs,我试过了,我不喜欢它。它太大而且复杂,而且我有更好的事情要做,而不是学习如何使用它(好吧,让我们在我们开始“真正的程序员使用......”讨论之前停下来)。所以我无法对您链接到的Emacs工具发表评论。我想尝试一下,看看它是否有帮助。

答案 5 :(得分:0)

您可以使用menu-complete而不是complete:

bind '"\C-i": menu-complete'
echo '"\C-i": menu-complete' >>~/.inputrc

答案 6 :(得分:0)

我同意这里的其他回复:一般来说,不要命名文件以方便完成或表达关系(除了描述文件的用途或用途所暗示的内容之外)。

Wrt 完成:是的,它可以帮助您使用Icicles之类的内容。灵活完成有许多不同的方式可以帮助 - 包括在项目文件中搜索。例如,请参阅Icicles search

能够提供多个简单的匹配模式(“progressive completion”)也有帮助 - 这比提出单个复杂的正则表达式要容易得多。同样,能够排除某些模式(“chipping away the non-elephant”)的匹配很有帮助。最后,对于文件名匹配,有时也可以帮助匹配目录组件。