10

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

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

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

4

7 回答 7

8

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

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

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

于 2010-03-16T18:30:02.987 回答
5

一般来说,

setterm -blength 0

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

特别是对于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
于 2010-03-16T18:43:47.953 回答
1

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

于 2010-03-16T18:29:14.723 回答
1

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

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

于 2010-03-16T20:16:23.793 回答
0

我倾向于使用对代码组织有意义的任何东西,而不是制表符完成 - 这可能会因所讨论的代码而异,因此很难给出直接答案,但使用适当的子目录确实会让生活更轻松。我同意唐。

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

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

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

于 2010-03-16T18:41:37.410 回答
0

您可以使用菜单完成而不是完成:

bind '"\C-i": menu-complete'
echo '"\C-i": menu-complete' >>~/.inputrc
于 2010-03-17T12:21:07.977 回答
0

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

Wrt完成:是的,它可以帮助使用像Icicles这样的东西。灵活完成可以通过多种不同的方式提供帮助——包括在项目文件中进行搜索。例如,请参见Icicles 搜索

Being able to provide multiple, simple match patterns ("progressive completion") helps too -- that's much easier than coming up with a single, complex regexp. Likewise, being able to exclude matches for certain patterns ("chipping away the non-elephant") is helpful. Finally, for file-name matching it can sometimes help to be able to match directory components as well.

于 2011-08-21T20:09:10.157 回答