Obtendo o caminho lógico na VIM quando há um link simbólico
Pergunta
Eu tenho a seguinte configuração:
mkdir /1
mkdir /1/2
mkdir /1/2/3
ln -s /1/2/3 /1/3
Se eu fizer cd /1/3
, e depois pwd
, recebo /1/3
. Se eu usar pwd -P
, posso obter /1/2/3
, ou pwd -L
à força /1/3
.
No VIM, eu estou procurando uma maneira de obter o /1/3
.
Se eu abrir um arquivo em /1/3/foo.txt
, e eu usar algo como fnamemodify(bufname(winbufnr(0)), ':p:h')
, ele retorna /1/2/3
.
Como posso dizer a ele para me dar o mesmo diretório que pwd
daria?
Solução
Parece que você não pode, que não via system('pwd -L')
. De acordo com o href="http://groups.google.com/group/vim_use/browse_thread/thread/602b96cd5441fb03/751fda406ec5940a?lnk=gst&q=resolve+symlinks#751fda406ec5940a" rel="noreferrer"> lista de discussão Vim resolve automaticamente links simbólicos hoje em dia.
Veja o texto em torno :h E773
de raciocínio; se Vim passar dos links simbólicos em vez de nome de arquivo resolvido, seria possível ter o mesmo arquivo aberto em dois buffers sob dois nomes diferentes, e Vim se tornaria confuso tentando descobrir onde o arquivo de swap deve ser. Veja também em :h version7.txt
:
Unix: Ao editar um arquivo através de um link simbólico do arquivo de troca usaria o nome do link simbólico. Agora use o nome do arquivo real, de modo que a edição do mesmo arquivo duas vezes é detectado.
Outras dicas
Resposta curta:
Você pode ser capaz de usar montagem de ligação como um substituto para links simbólicos. Veja man mount
.
Resposta longa:
Eu tive um problema semelhante, como eu tenho uma pequena ligação simbólica para um montado partição,
/e -> /media/iam/ext4test
Eu também tenho um ~/.vimrc -> /e/configs/.vimrc
link simbólico.
Eu estava correndo em apuros tentando pop em netrw no diretório que contém (eu estava pousando em ~
, mas eu não podia ver uma forma robusta para evitar que, tendo em mente o desejo de usar marcadores, etc).
Minha solução foi, depois de considerar possivelmente alterando o ponto de montagem, é que você pode Adicionar pontos de montagem. Então, depois de unlink e
, eu usei mount --bind /media/iam/ext4test /e
.
Agora, se eu estou em /e/configs/.vimrc
e uso :edit .
(ou :e.
etc), ele vai me pop em netrw no diretório que contém.
Editar:
O mount --bind
comando faz alterações transitórias. Para uma permanente bind de montagem, acrescento o seguinte para /etc/fstab
,
# <file system> <mount point> <type> <options> <dump> <pass>
/media/iam/ext4test /e none bind 0 0