Bash Unix文件命名约定是否可以有效完成选项卡?

Bash Unix文件命名约定是否可以有效完成选项卡?,bash,unix,shell,emacs,tab-completion,Bash,Unix,Shell,Emacs,Tab Completion,我觉得我经常以这样一种方式命名文件,当我编程时,我的计算机不断发出嘟嘟声,因为标签的完成是不明确的。在进行大量Unix编程之前,我倾向于使用相同的前缀命名相关文件,以表示它们之间的关系。现在我必须重新思考我的文件夹和文件结构以及名称的方法,以便更有效地编程 在编程以简化制表符完成时,您应用了哪些启发式或规则?您是否使用任何工具使制表符完成更平滑(例如) 编辑:哇,谢谢你的精彩见解。我认为我的每一个可能的弱点都在答案中得到了说明。我接受了一个似乎是提高生产力最好的方案,尽管它们都值得一读。我必须承

我觉得我经常以这样一种方式命名文件,当我编程时,我的计算机不断发出嘟嘟声,因为标签的完成是不明确的。在进行大量Unix编程之前,我倾向于使用相同的前缀命名相关文件,以表示它们之间的关系。现在我必须重新思考我的文件夹和文件结构以及名称的方法,以便更有效地编程

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


编辑:哇,谢谢你的精彩见解。我认为我的每一个可能的弱点都在答案中得到了说明。我接受了一个似乎是提高生产力最好的方案,尽管它们都值得一读。

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

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

当然,这就引出了一个问题,为什么要对文件名进行制表符补全?如果你在阅读源代码,有很多其他的方法可以让你绕过文件名直接跳转到你真正想要的函数/变量


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

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

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

我将其与Eclipse或VIM等IDE结合起来进行编辑,具体取决于我所做的工作。我两样都喜欢,真的,因为我用这两样东西的目的不同

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

一般来说

setterm -blength 0
将禁用终端的蜂鸣声。一些图形终端有自己的蜂鸣声通知设置

特别是对于和其他使用软件,可以使用
$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

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


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

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

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

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

Wrt补全:是的,它可以帮助使用类似的东西。灵活完成有许多不同的方法可以帮助您,包括在项目文件中搜索。例如,请参见


能够提供多个简单的匹配模式(“”)也有帮助——这比使用单个复杂的regexp容易得多。同样,能够排除某些模式(“”)的匹配也很有帮助。最后,对于文件名匹配,有时能够匹配目录组件也会有所帮助。

这一点。重载命名来描述关系很少是最好的方法。是的,“module_part1.ext,module_part2.ext,…”并不比“module/part1.ext,module/part2.ext,…”短。(如果您使用CamelCase,它只有一个字符,而且制表符补全将为您提供斜杠!)您可以始终打开
如果不明确,则显示所有文件
,这样您就可以得到一个名称模糊的文件列表,而不是一个bell。@Paul非常接近边界,但它可能位于代码栏的一侧,大约是@Jefromi看起来很有用,我想我的sys无论如何都能做到。@Ninefingers:/etc/inputrc中可能有这些的系统默认值,我认为,即使没有设置,如果您再次点击tab,您仍然会得到列表。您也可以使用
bell style
完全禁用bell。命名文件以优化tab完成听起来像是一条不平坦的道路。怎样才能防止你最终得到只有你才能理解的大量缩写文件名?(我假设你不是唯一一个需要阅读这些文件的人。)我曾经使用CTAG导航到其他文件,但最近我发现我的项目“足够快”
ack-G expr
用于文件名,
ack expr
用于搜索内容,以及
:在Vim中设置grepprg=ack
使生活变得很棒。我可以理解不喜欢Emacs becau