2014-12-16 6 views
0

Позвольте мне объяснить, на мой вопрос, что я хочу сделать, это:В VIM, как сделать NERDTree открытым при запуске красиво, давая арг

  1. Из командной строки вызывающей gvim без аргументов, хочу NERDTree открыть по умолчанию в моей папке /home/user/Documents.

  2. Из командной строки, вызывающей gvim ., нужно открыть NERDTree с каталогом, установленным в фактический каталог, из которого была выполнена команда. НО я все еще хочу, чтобы NERDTree слева и пустой буфер справа (а не NERDTree, являющееся единственным окном, как обычно бывает).

  3. Из командной строки, вызывающей gvim /some/path/to/folder, нужно открыть NERDTree с каталогом, заданным для данного каталога. НО я все еще хочу, чтобы NERDTree слева и пустой буфер справа (а не NERDTree, являющееся единственным окном, как обычно бывает).

  4. При вызове gvim с аргументом:

    • Если это файл, не открывайте NERDTree только файл.
    • Если это каталог NERDTree должен работать как #3

Для решения #1 у меня есть:

function! StartUp() 
    if 0 == argc() 
     NERDTree ~/Documents 
    endif 
endfunction 

autocmd VimEnter * call StartUp() 
autocmd VimEnter * wincmd p 

То, что я думал обратиться #2 и #3 был:

function! StartUp() 
    if 0 == argc() 
     NERDTree ~/Documents 
    else 
     if argv(0) == '.' 
      NERDTree expand(getcwd()) 
     else 
      NERDTree expand(argv(0)) 
     endif 
    endif 
endfunction 

autocmd VimEnter * call StartUp() 
autocmd VimEnter * wincmd p 

Но это не сработает, это дает мне ошибки, и vim замерзает несколько раз. Что я могу сделать для достижения желаемого эффекта?

Благодарим за помощь.

Комплексное решение

Не работает точно так, как я ожидал, но это очень и очень близко. Пока что бог.

function! StartUp() 
    if 0 == argc() 
     NERDTree ~/Documents 
    else 
     if argv(0) == '.' 
      execute 'NERDTree' getcwd() 
     else 
      execute 'NERDTree' getcwd() . '/' . argv(0) 
     endif 
    endif 
endfunction 

autocmd VimEnter * call StartUp() 
autocmd VimEnter * wincmd p 

ответ

0

Я не могу дать вам полное решение, но вот подсказка, которая должна устранить ошибки:

Команда :NERDTree принимает (опционально) каталог; это не разрешает выражения. Правила оценки Vim отличаются от большинства языков программирования. Для оценки переменной (или выражения) вам необходимо использовать :execute; в противном случае это воспринимается буквально; Т.е. Vim использует имя переменной как аргумент. Так это изменить:

NERDTree expand(getcwd()) 

в:

execute 'NERDTree' getcwd() 

Я также ушел из expand(), а getcwd() уже возвращает полный путь.

+0

Спасибо, что это была очень хорошая подсказка! –