在开发中,我们经常会遇到一些以点开头的文件如 .gitignore, .gitattributes, .editorconfig, .npmignore, .travis.yml 等等,有时候这些文件已经创建好,修改时只需打开编辑即可,而有时候却需要自己手动创建这些文件,然而在 Windows 中,创建以点开头的文件可能并没有想象的那么自然。

如果想在资源管理器中,直接尝试创建一个以点开头的文件,会发现报出“必须键入文件名”错误。

必须键入文件名

究其原因,可以说是在 Windows 下并没有以点开头来命名文件的习惯,所以 Windows 善意地给出提醒,要求用户在文件扩展名之外再提供一个文件名。不过尽管 Windows 拒绝了直接输入以点开头的文件,但这并不代表这样的文件名在 Windows 下是非法的,只是为了创建以点开头的文件,我们需要曲线救国。

在 Windows 中创建以点开头的文件

资源管理器下创建以点开头的文件

尽管在资源管理器下直接键入我们想要的以点开头的文件会报出错误,但我们却可以在这个文件名后再加一个点来绕过这个限制。

比如,我想创建 .editorconfig,那么就可以在资源管理器中创建文件时,输入 .editorconfig. 并回车,注意文件名最后的那个点是关键。随后会弹出提示“如果改变文件扩展名,可能会导致文件不可用。确实要更改吗?”。

如果改变文件扩展名,可能会导致文件不可用。确实要更改吗?

此处选是即完成了以点开头的文件的创建,之前文件名末尾的多余的点也会被自动移除。如下所示。

创建成功

说起来这个技巧很简单,不过却也很实用,我也是在 EditorConfig 中看到以后才了解到有这么个小技巧。

命令行下创建以点开头的文件

此外,我们也可以在 cmd 下创建以点开头的文件。cmd 与资源管理器不同,并不会对以点开头的文件区别对待,因此,在 cmd 下创建一个以点开头的文件,其实与在 cmd 下创建一个普通文件并没有什么不同。

在命令行下有许多命令供我们创建一个空文件,简单列举几个如下:

copy NUL .dotfile

type NUL > .dotfile

fsutil file createnew .dotfile 0

上面给出的每个命令都是独立的,使用任何一条命令都可以,只需把命令中的 .dotfile 换成自己想要的名字即可。

如果想要了解更多的在命令行下创建文件的命令可以参考 StackOverflow 上的文章

此外,也可以对一个已经创建好的文件改名来得到以点开头的文件,如已在资源管理器中创建文件 a.dotfile,可用命令:

ren a.dotfile .dotfile

来改名文件。其中 renrename 的意思,也可用 rename 来替换以上命令中的 ren

命令行下创建以点开头的文件

利用另存为对话框来创建以点开头的文件

除了使用资源管理器和命令行,我们还有第三种方法来创建以点开头的文件,那就是利用“另存为”对话框。在“另存为”对话框中,没有限制以点开头的文件,因此我们可以使用记事本,或任何其他应用,通过“另存为”对话框来创建以点开头的文件。

另存为

点击“保存”即可。

dotfiles 的前世今生

说了这么久以点开头的文件,总觉着有些别扭,其实这类文件有着自己的名字,叫做 dotfile

文章开头提到,windows 并没有以点开头文件的习惯,实际上,这样的命名习惯来源于 Linux, Unix 等系统。在这些系统中,以点开头的文件,也就是 dotfiles,默认是隐藏的,通常作为软件的配置文件名,或者一些临时文件,如文本编辑器的备份文件、历史文件的文件名。

随着软件的跨平台,以及软件开发的跨平台,一些原本只见于类 Unix 系统的命名习惯也进入了 Windows,或者说在 Windows 下,有时也需要处理一些以 Unix, Linux 的命名习惯命名的文件。如 .gitignore, .gitattributes 是版本控制系统git中用到的配置文件,.npmignore 是 npm 包管理工具所用到的配置文件,.travis.yml 是持续集成系统 Travis CI 的配置文件。

随着 dotfiles 变得越来越常见,越来越深入软件开发,可以发现学习一些处理 dotfiles 的小知识还是很受用的。