VIM altera o caminho para onde foi invocado

0

Eu realmente gosto do meu vim para mudar seu diretório de trabalho para o arquivo que estou trabalhando atualmente. Para isso eu uso no meu vimrc: autocmd BufEnter * if bufname("") !~ "^\[A-Za-z0-9\]*://" | lcd %:p:h | endif

O que eu também gosto é usar gF (*) no vim para abrir arquivos sob o cursor em um novo buffer.

Essa combinação, no entanto, induz a um problema no meu fluxo de trabalho preferido:

  1. Digamos que eu queira encontrar todas as ocorrências de "foo" em um projeto, portanto, com meu shell, eu cd para a pasta path/to/project/src e execute: grep -Ern 'foo' * | vim - . Por causa do argumento, a saída, que é aberta no vim, é: %código%
  2. Agora, quero inspecionar o hit em a/file1.c:42: foo b/file2.c:13: foo , por isso uso file1 para ir para ele. Esta ação altera o diretório de trabalho para gF

  3. Quando volto para a guia com a saída de path/to/project/src/a , o diretório de trabalho permanece em grep porque path/to/project/src/a aparentemente não pode resolver um caminho para algo lido de stdin.

  4. Problema: agora não posso pular para %:p:h via file2 , pois o caminho relativo está errado agora.

Seria bom fazer com que o vim altere automaticamente seu diretório de trabalho para o local em que ele foi chamado ao alternar para um buffer. Para este exemplo, isso significa que, ao alternar para o buffer gF , espero que meu diretório de trabalho seja grep .

Eu ficaria grato por qualquer idéia de como conseguir isso.

(*) Divulgação completa: eu uso spf-13 vim mas o problema básico deve se aplicar ao vim em geral.

    
por Seriously 14.05.2018 / 11:50

1 resposta

0
  • Em vez do seu :autocmd , você pode simplesmente usar :set autochdir no seu ~/.vimrc . O Vim tem esse recurso embutido desde muitas versões.
  • Em vez de usar grep externamente, tente os comandos :grep (ou :vimgrep ) internos. Os resultados preencherão a lista de correções rápidas ; O bom disso é que os caminhos serão automaticamente adaptados às mudanças no diretório de trabalho.
por 03.09.2018 / 16:33

Tags