A opção 'caminho' padrão do Vim é redundante?

10

No documento de ajuda do Vim (consulte :help 'path':):

'path' String (padrão no Unix: " .,/usr/include,,")

-Para pesquisar em relação ao diretório do arquivo atual, use:

:set path=.

-Para pesquisar no diretório atual, use uma string vazia entre duas vírgulas:

:set path=,,

Parece que .e ,,não tem diferença na opção 'caminho'. Ambos significam o diretório atual.

Não consigo entender por que precisamos colocar os dois .e ,,a opção de caminho. Qual é a diferença entre :set path=.e :set path=,,?

Feng Yu
fonte

Respostas:

14

"Diretório atual" e "diretório do arquivo atual" são duas coisas diferentes.

O "diretório atual" é por padrão o diretório em que você iniciou o Vim. Você pergunta ao Vim o que é :pwde o altera com :cdou :lcdou configurando a autochdiropção. Se você nunca alterar, ele permanecerá o mesmo até você fechar a sessão atual.

O "diretório do arquivo atual" é exatamente o que ele afirma ser. Se o arquivo atual estiver no "diretório atual", ambos terão o mesmo valor. Se o arquivo atual estiver em outro diretório, eles terão valores diferentes.

Para pathser útil, é necessário abordar esses dois cenários com .e ,,.

Exemplo:

$ cd /foo/bar/baz
$ vim filename
:pwd                   -->  /foo/bar/baz
:echo expand("%:p:h")  -->  /foo/bar/baz
:e ../file
:pwd                   -->  /foo/bar/baz
:echo expand("%:p:h")  -->  /foo/bar
romainl
fonte
7

O diretório do arquivo atual e o diretório atual são duas coisas totalmente diferentes (que podem, ocasionalmente, ter o mesmo valor).

Considerar:

cd /tmp; vim /etc/bash.bashrc

A menos que eu tenha autochdir(ou algo semelhante) definido, o diretório atual é /tmp, mas o diretório do arquivo atual é /etc.

muru
fonte