【问题标题】:Unix file naming convention for effective tab completion?有效制表符完成的Unix文件命名约定?
【发布时间】:2011-01-28 06:13:50
【问题描述】:

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

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

编辑:哇,感谢您的精彩见解。我认为我的每一个可能的弱点都在答案中得到了考虑。我接受了似乎是最好的生产力改进的一个,尽管它们都值得一读。

【问题讨论】:

  • 您可以随时打开show-all-if-ambiguous,因此您会得到一个名称不明确的文件列表,而不是铃声。
  • @Paul 非常接近,但它可能在代码方面,差不多。 @Jefromi 看起来很有用,我认为我的系统无论如何都会这样做。
  • @Ninefingers:在 /etc/inputrc 中可以有系统默认值,我认为即使没有设置,如果再次点击选项卡,您仍然可以获得列表。
  • 您也可以使用bell-style 完全禁用铃声。
  • 命名文件以优化制表符补全听起来像一条湿滑的道路。是什么阻止您使用只有您才能理解的大量缩写文件名? (我假设您不是唯一需要阅读这些文件的人。)

标签: bash unix shell emacs tab-completion


【解决方案1】:

我必须承认,我在命名我的文件时不考虑制表符完成,而是调整我点击制表符的冲动,直到我知道我输入了足够多的字符而不会出现制表符。

【讨论】:

    【解决方案2】:

    我通常从事相关文件都在同一个目录中的项目,并且文件名本身专门用于指示它们的内容。

    当然,这引出了一个问题,为什么要对文件名进行制表符补全?如果您正在阅读源代码,则有 TAGSCEDET 和大量其他 utilities,它们可以让您绕过文件名并直接跳转到您真正想要的函数/变量。

    这完全取决于你真正想要做什么,而找到一个特定的文件通常是达到不同目的的手段。

    【讨论】:

    • 这个。重载命名来描述关系很少是最好的方法。
    • 是的,并且“module_part1.ext, module_part2.ext, ...”并不比“module/part1.ext, module/part2.ext, ...”短。 (如果你使用 CamelCase,它只有一个字符,而且制表符补全会给你斜线!)
    【解决方案3】:

    我倾向于使用对代码组织有意义的任何内容,而不是选项卡完成 - 这可能会因相关代码而异,因此很难给出直接答案,但使用适当的子目录确实可以生活更轻松。我同意唐的观点。

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

    我将它与用于编辑的 Eclipse 或 VIM 等 IDE 结合使用,具体取决于我在做什么。我真的很喜欢两者,因为我将两者用于不同的目的。

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

    【讨论】:

    • 我曾经使用 ctags 导航到其他文件,但最近我在我的项目中发现betterthangrep.com“足够快”。 ack -G expr 用于文件名,ack expr 用于搜索内容,:set grepprg=ack 在 Vim 中让生活变得美好。
    • 我可以理解不喜欢 Emacs,因为它太大太复杂,但我无法理解使用 Eclipse 代替——据我所见,它更大更复杂!
    【解决方案4】:

    一般来说,

    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
    

    【讨论】:

      【解决方案5】:

      具有通用性的文件的目录通常是个好主意,但可能并不总是可行的。在这些情况下,一种行之有效的简单方法是将共性放在后缀中,而不是前缀中。例如,我将单元测试命名为“_test.py”作为后缀。反过来(例如test_foo.py)会阻碍每个测试文件的制表符完成。

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

      【讨论】:

        【解决方案6】:

        您可以使用 menu-complete 代替 complete:

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

        【讨论】:

          【解决方案7】:

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

          Wrt completion:是的,使用Icicles 之类的东西会有所帮助。灵活完成可以通过多种不同的方式提供帮助——包括在项目文件中进行搜索。例如,请参阅Icicles search

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2015-07-28
            • 2012-01-30
            • 2015-11-15
            • 2011-08-08
            • 2012-12-24
            • 2010-09-22
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多