O que significa @ no final dos nomes dos arquivos no preenchimento automático no OS X?

2

Eu tinha yadr instalado no meu laptop e decidi me livrar dele executando rm -rf ~/.yadr as instruído pelo autor. No entanto, depois que eu fiz essa estranheza começou: Se eu tentar editar o meu vimrc e digite

$ vi .vim

preenchimento automático mostrará os seguintes arquivos:

.vim@     .viminfo  .vimrc@

Então, o que é isso @ no final de .vimrc? Se eu apenas digitar vi .vimrc , ele afirma que é um novo arquivo. Então, se eu tentar salvar o arquivo editado, recebo este erro:

.vimrc" E166: Can't open linked file for writing

Alguma idéia?

    
por abbood 23.12.2014 / 17:54

2 respostas

5

Geralmente, @ representa um link simbólico. Há certos indicadores de formato relativamente padrão, frequentemente anexados a um nome de arquivo, quando exibidos em uma lista de arquivos, para permitir que você tenha uma ideia do que é; Não tenho certeza se eles foram originados com ls , mas ls -F tem uma boa lista deles: / é um diretório, @ é um link simbólico (o que significa que o arquivo está realmente apontando para um arquivo em outro lugar) e | , > e = são "arquivos" especiais diferentes usados para comunicação entre processos. Além disso, arquivos com o bit de execução geralmente são exibidos com um * .

Estes não são realmente parte do nome do arquivo; eles são exibidos para o usuário para que eles categorizem rapidamente o arquivo como um arquivo normal, um programa, um diretório, um link simbólico ou qualquer outra coisa.

Nesse caso, olhando pelo script de instalação do yadr, parece que ele coloca todos os arquivos de configuração em arquivos não ocultos no diretório .yadr , presumivelmente para facilitar o gerenciamento deles. Como nada mais está procurando por dotfiles, então, por padrão, ele cria links simbólicos de seu diretório pessoal para o diretório em que está instalado (veja a linha 301 em Rakefile ; file_operation normalmente links simbólicos ~/.file to $PWD/file ). Em install.sh , podemos ver que yadr normalmente executa seu rakefile em ~/.yadr , então uma instalação padrão substituirá muitos dotfiles por links simbólicos em ~/.yadr . Na linha 24 do rakefile, vemos que é isso que está acontecendo: file_operation é chamado de vim e vimrc , significando que ~/.vim e ~/.vimrc são ligados simbolicamente a ~/.yadr/vim e ~/.yadr/vimrc , respectivamente. O ~/.vimrc anterior foi movido para ~/.vimrc.backup .

Então, o que aconteceu aqui é que a instalação do yadr moveu seu .vimrc para .vimrc.backup e o substituiu por um link para seu próprio arquivo, localizado em ~/.yadr . Quando você excluiu ~/.yadr , o link agora aponta dentro de um diretório inexistente; O vim pode criar um arquivo quando ele não existe, mas não pode salvar em um diretório inexistente . Para editar .vimrc , você terá que excluir o symlink atual e começar do backup criado automaticamente (se existir) ou do zero (se não existir).

    
por 23.12.2014 / 19:46
0

De comentários do arimo eu fiz isso:

$ readlink .vim
/Users/abdallah/.yadr/vim

também

$ ls -l .vim*
lrwxr-xr-x  1 abdallah  staff     25 Apr 23  2014 .vim -> /Users/abdallah/.yadr/vim
-rw-------  1 abdallah  staff  12602 Dec 24 07:27 .viminfo
lrwxr-xr-x  1 abdallah  staff     27 Apr 23  2014 .vimrc -> /Users/abdallah/.yadr/vimrc

a parte complicada é que eu sabia que digitar ls -l mostraria links simbólicos .. Eu simplesmente não sabia como mostrar os links simbólicos de arquivos de ponto . Também eu estava sempre tentando apagar os arquivos com o @ no final dele .. ou seja,

$ rm .vim@
rm: .vim@: No such file or directory

mas depois eu baseei na saída acima .. Eu simplesmente removi o arquivo .vim diretamente:

$ ls -l .vim*
lrwxr-xr-x  1 abdallah  staff     25 Apr 23  2014 .vim -> /Users/abdallah/.yadr/vim
-rw-------  1 abdallah  staff  12602 Dec 24 07:27 .viminfo
lrwxr-xr-x  1 abdallah  staff     27 Apr 23  2014 .vimrc -> /Users/abdallah/.yadr/vimrc

$ rm .vim

$ ls -l .vim*
-rw-------  1 abdallah  staff  12602 Dec 24 07:27 .viminfo
lrwxr-xr-x  1 abdallah  staff     27 Apr 23  2014 .vimrc -> /Users/abdallah/.yadr/vimrc

e pronto!

    
por 24.12.2014 / 06:35

Tags