Conclusão do nome do arquivo em relação ao arquivo editado atualmente

7

Se eu abrir um arquivo que não está no atual diretamente, quando usei o Vim para preencher automaticamente um nome de arquivo, o Vim fornecerá arquivos relativos ao local em que iniciei o Vim, e não o arquivo editado no momento.

Exemplo

$ find .
  nice-file.xml
  xml/
      messy-file.xml
      ok-file.xml
$ vim xml/messy-file.xml

Agora, se eu digitar Ctrl+ x, Ctrl+ f, o Vim fornece "nice-file.xml" como uma opção completa. Ele não oferece ok-file.xml, mesmo que esteja no mesmo diretório que o arquivo que estou editando no momento.

Eu gostaria que o Vim concluísse nomes de arquivos relativos a qualquer arquivo que eu estivesse editando. Isso é possível?

Scribblemacher
fonte

Respostas:

7

Você pode :cdno Vim alterar o diretório atual:

:cd xml

Ou, de maneira mais geral, se você desejar configurá-lo às vezes:

nnoremap gp :cd %:p:h<CR>

Ou se você deseja sempre estar no diretório do arquivo atual:

set autochdir

Observe que isso pode quebrar alguns plugins, porque eles podem confiar no diretório atual, você pode usar no local:

autocmd BufEnter * silent! lcd %:p:h

Se você não deseja alterar o diretório atual, também pode adicionar a pasta atual ao seu caminho de conclusão:

autocmd BufRead *
  \ let s:tempPath=escape(escape(expand("%:p:h"), ' '), '\ ') |
  \ exec "set path+=".s:tempPath
nobe4
fonte
2
Eu me arrependo por substituir o gfmapeamento maravilhosamente útil . Eu sugeriria substituindo algo como gsou talvez usando um <leader>mapeamento
Peter Rincker
se um plug-in não funcionar, acdé melhor corrigi- lo. Mas essa solução alternativa do BufEnter não deve mais ser necessária #
Christian Brabandt
11
autochdirera exatamente o que eu estava procurando. Não parece estar em conflito com a minha modesta seleção de plugins.
Scribblemacher