2016-11-05 4 views
2

Как получить каталог Vim «смотрит в»? Я хочу настроить свою независимую платформу vimrc, поэтому я не хочу размещать явные каталоги. В Linux, например. vim смотрит на ~/.vim и на Windows в ~\vimfiles. Как я могу получить каталог, который используется, чтобы поместить туда мои файлы?Получение каталога Vim для файла vimrc

+2

Ответ более сложный, чем вы ожидаете. Существует несколько релевантных каталогов, и некоторые из них жестко закодированы. Подробнее см. ': H startup'. См. Также вывод 'vim -version'. –

+0

Где вам нужна папка vim в вашем '.vimrc'? Я просто проверил свой '.vimrc', и единственное место, где я его использую, - это временные файлы. Можете ли вы немного уточнить, что такое вариант использования? – pfnuesel

+0

Во-первых, это также временные файлы. Я сохраняю 'undo' и' backup' файлы в подкаталогах '.vim'. Другими вещами являются мои плагины. Я использую «vim-plug» и вам нужно указать папку. Я хочу, чтобы все это было в одной папке, и я могу просто поместить свою папку .vim в GitHub и синхронизировать ее, а также с системами, не имеющими Git. – DerWeh

ответ

1

Я не могу сказать, что это информация, которая нам никогда не нужна, поскольку я использую ее для этого.

В ЛХ-ВИМ-Lib, я продолжу этот путь (в lh#path#vimfiles()):

  • Сначала я построить регулярное выражение от $ HOME (то есть я заменить все слеши и backslahes в [/\\]): :let regex = substitute($HOME, '[/\\]', '[/\\\\]', 'g').
  • Затем я добавляю возможные каталоги: let regex .= '\(vimfiles\|.vim\)'
  • И я, наконец, я ищу мое регулярное выражение в & РПТ. Самый короткий результат - хороший. :let paths = filter(split(&rtp, ','), 'match(v:val, regex) != -1') + :return paths[lh#list#arg_min(paths, function('len'))]

Примечание: Реальный код немного более сложное, общее и устойчивое (/ устойчивость?) К ошибкам.

PS: из-за cygwin, тестирование на has('win32') не достаточно.

EDIT: меня попросили предоставить определение lh#list#arg_min(). Его можно найти в lh-vim-lib. Его определение довольно прост и немного громоздко (IMO)

function! lh#list#arg_min(list, ...) abort 
    if empty(a:list) | return -1 | endif 
    let Transfo = a:0 > 0 ? a:1 : function(s:getSNR(id)) 
    let m = Transfo(a:list[0]) 
    let p = 0 
    let i = 1 
    while i != len(a:list) 
    let e = a:list[i] 
    let v = Transfo(e) 
    if v < m 
     let m = v 
     let p = i 
    endif 
    let i += 1 
    endwhile 
    return p 
endfunction 
+0

Слишком много скобок после '& rtp' (я не могу его отредактировать, видимо, мне пришлось бы менять больше символов). Можете ли вы, возможно, также дать определение 'lh # list # arg_min', я не смог его найти. – DerWeh

+0

Действительно спасибо. Я сделал исправление. Что касается 'arg_min', это не так сложно, но все же немного громоздко. Это определение доступно здесь: https://github.com/LucHermitte/lh-vim-lib/blob/master/autoload/lh/list.vim#L430 –

0

Вы можете изменить настройки по умолчанию 'runtimepath', чтобы Vim использовать тот же ~/.vim/ на Windows, тоже. Просто положите это в свой ~/.vimrc:

if has('win32') || has('win64') 
    let &runtimepath = substitute(&runtimepath, '\C\V' . escape($HOME.'/vimfiles', '\'), escape($HOME.'/.vim', '\&'), 'g') 
endif 
Смежные вопросы