Como configurar o NERDTree no CD para a pasta atual ao abri-lo pela primeira vez via: NERDTreeFind

7

Dado:

$ cd ~/Sites/project
project $ vim
:NERDTreeFind

Gostaria de ver o NERDTree sendo aberto ~/Sites/projectcomo uma pasta raiz.

Em vez disso, vejo ~/Sitescom a projectpasta selecionada. Então eu tenho que ir cdpara a pasta de trabalho de cada vez.

Estou certo de que deve haver uma configuração para isso, mas não consigo encontrá-la. Socorro.

firedev
fonte

Respostas:

3

A partir da documentação, parece que ele deve estar usando seu ~/Sites/projectdiretório. (Veja :h :NERDTree)

:NERDTree [<start-directory> | <bookmark>]                         *:NERDTree*
    Opens a fresh NERD tree. The root of the tree depends on the argument
    given. There are 3 cases: If no argument is given, the current directory
    will be used.  If a directory is given, that will be used. If a bookmark
    name is given, the corresponding directory will be used.  For example: >
        :NERDTree /home/marty/vim7/src
        :NERDTree foo   (foo is the name of a bookmark)

:NERDTreeToggle [<start-directory> | <bookmark>]             *:NERDTreeToggle*
    If a NERD tree already exists for this tab, it is reopened and rendered
    again.  If no NERD tree exists for this tab then this command acts the
    same as the |:NERDTree| command.

Se :NERDTreeToggleestiver carregando o diretório incorreto, tente o seguinte:

  • Verifique o diretório de trabalho atual do shell. <c-z>suspender o Vim e depois o fazer pwd. Use fgpara trazer de volta o Vim.
  • Verifique se o diretório de trabalho atual está definido corretamente no Vim. Verifique via :pwd.
  • Você tem algum plugin / personalização que alteraria seu diretório de trabalho atual?
  • Erro ainda está ocorrendo? Crie um ticket no rastreador do NERDTree . Certifique-se de usar um vimrc mínimo e nenhum plug-in além do NerdTree para que outros possam reproduzir esse bug.
Peter Rincker
fonte
Depois de reiniciar o vim com tudo comentado, .vimrcexceto nerdtree ... tudo voltou ao normal. Não tenho explicação para isso no momento, mas se consertou.
firedev
Desculpe, na verdade não é consistente. Eu preciso investigar mais.
firedev
2

Aqui está o que eu fiz no final. Graças ao GitHub

function! NERDTreeToggleInCurDir()
  " If NERDTree is open in the current buffer
  if (exists("t:NERDTreeBufName") && bufwinnr(t:NERDTreeBufName) != -1)
    exe ":NERDTreeClose"
  else
    if (expand("%:t") != '')
      exe ":NERDTreeFind"
    else
      exe ":NERDTreeToggle"
    endif
  endif
endfunction

" nnoremap <leader>nf :NERDTreeFind<cr>
nnoremap <leader>nf :call NERDTreeToggleInCurDir()<cr>
firedev
fonte
1

Nos documentos NERDTree, você poderá adicionar o seguinte ao seu arquivo .vimrc

"Open NERDTree if no files specified
autocmd StdinReadPre * let s:std_in=1
autocmd VimEnter * if argc() == 0 && !exists("s:std_in") | NERDTree | endif

Isso abrirá o diretório de trabalho atual se você não especificar um arquivo a ser aberto ao chamar vim

Espero que ajude!

Avery
fonte
o que !exists("s:std_in")significa
Dopatraman 02/07/2015
Eu imagino que ele emparelha com argc == 0 para verificar se uma chamada simples de vimfoi chamada. Em seguida, abre o NERDTree
Avery
0

FWIW, eu uso isso (no meu .vimrc): autocmd vimenter * silent! lcd %:p:h

Ele define o pwd como a pasta atual (ou a pasta / arquivo fornecido ao iniciar o vim).

RichS
fonte