@ 在 OS X 中自动完成的文件名末尾是什么意思?

abb*_*ood 3 vim shell macos

我有YADR安装在我的笔记本电脑,我决定通过运行摆脱它rm -rf ~/.yadr作为指导其作者。然而,在我做了那个奇怪的事情之后:如果我尝试编辑我的 vimrc 并输入

$ vi .vim
Run Code Online (Sandbox Code Playgroud)

自动完成将显示以下文件:

.vim@     .viminfo  .vimrc@
Run Code Online (Sandbox Code Playgroud)

那么@.vimrc 的末尾是什么?如果我只是输入vi .vimrc它声称它是一个新文件。然后,如果我尝试保存该编辑过的文件,则会出现此错误:

.vimrc" E166: Can't open linked file for writing
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

cpa*_*ast 5

通常,@代表一个符号链接。在文件列表中显示文件时,通常会附加某些相对标准的格式指示符,以便您快速了解它是什么;我不知道他们是否起源ls,但ls -F有他们的一个很好的列表:/是一个目录,@是一个符号链接(这意味着该文件是真的指向文件的其他地方),以及|>以及=使用不同的特殊的“文件”用于进程间通信。此外,带有执行位的文件通常以尾随显示*.

这些实际上不是文件名的一部分;它们向用户展示,让他们快速将文件归类为常规文件、程序、目录、符号链接或其他内容。

在这种情况下,查看 yadr 的安装脚本,它似乎将所有配置文件放在目录中的非隐藏文件中.yadr,大概是为了更容易管理它们。因为没有其他东西在那里寻找点文件,所以默认情况下它会创建从你的主目录到它安装目录的符号链接(从 yadr 的第 301 行开始Rakefilefile_operation通常符号链接~/.file$PWD/file)。在install.sh,我们可以看到,YADR正常运行它的Rake文件~/.yadr,所以默认安装将取代许多点文件与符号链接进入~/.yadr。在 rakefile 的第 24 行,我们看到正在发生的事情:分别file_operation调用vimand vimrc,意思是~/.vimand 。上一个移到~/.vimrc符号链接到~/.yadr/vimand~/.yadr/vimrc~/.vimrc~/.vimrc.backup.

因此,这里发生的事情是,YADR的安装感动你.vimrc.vimrc.backup,和一个链接到自己的文件,位于取代它~/.yadr。当你删除时~/.yadr,链接现在指向一个不存在的目录;vim 可以在文件不存在时创建文件,但不能保存在不存在的目录中。要编辑.vimrc,您必须删除当前的符号链接,然后从自动创建的备份(如果存在)或从头开始(如果不存在)重新开始。