Невозможно автоматически найти пользовательские файлы Vim

Вот репозиторий с моей точной настройкой: https://github.com/Integralist/Fresh-Install/tree/master/Shell

Вот ссылка конкретно на мой .vimrc файл: https://github.com/Integralist/Fresh-Install/blob/master/Shell/.vimrc

Вот ссылка конкретно на мой кастом .vim файлы: https://github.com/Integralist/Fresh-Install/tree/master/Shell/vim


Я пытаюсь автоматически найти некоторые пользовательские .vim файлы.

Для автоматизации работы я понял, что мне нужен мой заказ .vim файлы должны быть в определенном порядке, и поэтому я должен был префикс имени файла с числовым номером. Например, 1.settings.vim

Я пытался положить их внутрь .vim/plugin но когда я открываю Vim, ни один из моих плагинов не работает, поэтому я должен выполнить вручную :BundleInstall (или перед запуском Vim vim +BundleInstall) но в тот момент, когда я закрываю Vim и запускаю его снова, плагины снова не работают. Поэтому, если нет способа заставить Vim автоматически выполнить команду установки пакета (и сделать это только один раз, потому что делать это каждый раз, когда я открываю Vim, просто смешно).

Поэтому вместо этого я решил попытаться автоматически получить их самостоятельно через Vim Script.

Следующий скрипт работает...

set runtimepath+=$DROPBOX/Fresh\ Install/Shell/vim
runtime 1.settings.vim
runtime 2.vundle.vim
runtime 3.mapping.vim
runtime 4.commands.vim

... но не масштабируется, потому что каждый раз, когда я добавляю новый .vim файл, то мне придется обновить скрипт.

Поэтому я попробовал другой способ...

Примечание: мой .zshrc экспортирует переменную DROPBOX и устанавливает его в мой путь Dropbox.

Если я открою Vim в новой вкладке (так что я в ~/ каталог) и выполнить :echo $DROPBOX я вижу /Users/markmcdonnell/Dropbox,

Если я открою Vim в новой вкладке (так что я в ~/ каталог) и выполнить :echo isdirectory("$DROPBOX/") Я вернусь 0 Это означает, что Vim не может найти этот каталог.

Но если я открою Vim в новой вкладке (так что я в ~/ каталог) и выполнить :echo isdirectory("/Users/markmcdonnell/Dropbox/") (что так же, как то, что :echo $DROPBOX вернулся с добавлением дополнительного слеша в конце) 1 Это означает, что Vim МОЖЕТ найти этот каталог.

Так что есть кое-что не совсем правильное в том, как Vim Script интерпретирует путь, введенный вручную, и путь, который раскрывается из переменной среды.

Пример сценария, который я пробовал, был...

if isdirectory("$DROPBOX/Fresh Install/Shell/vim")
  for file in split(globpath('$DROPBOX/Fresh Install/Shell/vim/', '*.vim'), '\n')
    execute 'source ' file
  endfor
endif

... но файлы не были получены, и тогда я понял, что в Vim isdirectory("$DROPBOX/Fresh Install/Shell/vim") возвращался 0,

Я не могу вручную ввести полный путь, потому что я синхронизирую свои файлы на разных машинах, и поэтому путь меняется.

Поэтому вместо этого я изменил оператор if на: isdirectory(expand('%:p:h').'/vim') который возвращается 1 при запуске в Vim (это когда я cd в папку Dropbox /Fresh Install/ и откройте /Shell/.vimrc файл).

Так, :echo expand('%:p:h') возвращается /Users/markmcdonnell/Dropbox/Fresh Install/Shell следовательно, ему удалось найти правильный каталог.

Но опять же это не сработало.

Я также попробовал другой формат (но по сути тот же процесс, только более кратко написано): " execute join(map(split(glob("$DROPBOX/Fresh Install/Shell/vim/*.vim"), "\n"), '"source " . v:val'), "\n")

Опять не сработало.

Я тогда попробовал...

for file in split(globpath('$DROPBOX/Fresh Install/Shell/vim/', '*.vim'), '\n')
  execute 'source ' . file
endfor

... но без проверки папка существовала (потому что она должна существовать всегда).

Но теперь я получаю ошибку: Only one file name allowed: source /Users/markmcdonnell/Dropbox/Fresh Install/Shell/vim/1.settings.vim

Похоже, что он почти работает, но, возможно, пробел в пути заставляет скрипт думать, что есть два аргумента, когда он действительно один.

Я вернулся к предыдущей (не лаконичной версии) и попытался процитировать команду:

execute 'source ' . "file" а также execute 'source ' . "$file" а также execute "source $file"

Но опять же, ничего из этого не сработало.

Я уверен, что упускаю что-то действительно простое, но любая помощь приветствуется.

ОБНОВИТЬ:

let files = split(glob("$DROPBOX/Fresh Install/Shell/vim/*.vim"), "\n")
let mapped = map(files, '"source " . v:val')
execute join(mapped, "\n")

Это та же команда, что и раньше, но немного расширенная.

Я думаю, что мне нужно иметь возможность получить набор двойных кавычек вокруг v:val так что когда команда executed тогда пробел в имени файла не вызовет проблемы.

ОБНОВЛЕНИЕ 2:

Вот результат бега :verbose set rtp?

runtimepath=
~/.vim/bundle/vundle
~/.vim/bundle/ctrlp.vim
~/.vim/bundle/tomorrow-night-vim
~/.vim/bundle/vim-markdown
~/.vim/bund le/vim-cucumber
~/.vim/bundle/vim-misc
~/.vim/bundle/tagbar
~/.vim/bundle/YouCompleteMe
~/.vim/bundle/vim-repeat
~/.vim/bundle/vim -commentary
~/.vim/bundle/ack.vim
~/.vim/bundle/vim-endwise
~/.vim/bundle/vim-airline
~/.vim/bundle/tmuxline.vim
~/.vim/bundle/web api-vim
~/.vim/bundle/Gist.vim
~/.vim/bundle/vim-fugitive
~/.vim/bundle/emmet-vim
~/.vim/bundle/rename.vim
~/.vim/bundle/vim-gitgu tter
~/.vim/bundle/nerdtree
~/.vim/bundle/vim-haml
~/.vim/bundle/vim-surround
~/.vim/bundle/html5.vim
~/.vim/bundle/tabular
~/.vim /bundle/camelcasemotion
~/.vim
/usr/local/share/vim/vimfiles
/usr/local/share/vim/vim74
/usr/local/share/vim/vimfiles/after
~/.vim /after
~/Dropbox/Fresh Install/Shell/vim
~/.vim/bundle/vundle/after
~/.vim/bundle/ctrlp.vim/after
~/.vim/bundle/tomorrow-night-vim
/after
~/.vim/bundle/vim-markdown/after
~/.vim/bundle/vim-cucumber/after
~/.vim/bundle/vim-misc/after
~/.vim/bundle/tagbar/after

Last set from ~/Dropbox/Fresh Install/Shell/.vim/bundle/vundle/autoload/vundle/config.vim

Это был результат после того, как я удалил следующий фрагмент кода...

set runtimepath+=$DROPBOX/Fresh\ Install/Shell/vim
runtime 1.settings.vim
runtime 2.vundle.vim
runtime 3.mapping.vim
runtime 4.commands.vim

... который я использую, чтобы вручную получить исходные файлы.

Стоит также отметить, что у меня есть BufOnly.vim файл в ~/.vim/plugin который загружается автоматически, так почему другой .vim файлы не очень странные

ОБНОВЛЕНИЕ 3

Вот результат бега :scriptnames

1: ~/.vimrc
2: ~/Dropbox/Fresh Install/Shell/vim/1.settings.vim
3: /usr/local/Cellar/vim/7.4.052/share/vim/vim74/syntax/syntax.vim
4: /usr/local/Cellar/vim/7.4.052/share/vim/vim74/syntax/synload.vim
5: /usr/local/Cellar/vim/7.4.052/share/vim/vim74/syntax/syncolor.vim
6: /usr/local/Cellar/vim/7.4.052/share/vim/vim74/filetype.vim
7: ~/Dropbox/Fresh Install/Shell/vim/2.vundle.vim
8: /usr/local/Cellar/vim/7.4.052/share/vim/vim74/ftoff.vim
9: ~/Dropbox/Fresh Install/Shell/.vim/bundle/vundle/autoload/vundle.vim
10: ~/Dropbox/Fresh Install/Shell/.vim/bundle/vundle/autoload/vundle/config.vim
11: ~/Dropbox/Fresh Install/Shell/.vim/bundle/tomorrow-night-vim/colors/tomorrow-night-bright.vim
12: ~/Dropbox/Fresh Install/Shell/.vim/bundle/vim-markdown/ftdetect/markdown.vim
13: ~/Dropbox/Fresh Install/Shell/.vim/bundle/vim-cucumber/ftdetect/cucumber.vim
14: ~/Dropbox/Fresh Install/Shell/.vim/bundle/vim-haml/ftdetect/haml.vim
15: /usr/local/Cellar/vim/7.4.052/share/vim/vim74/ftplugin.vim
16: /usr/local/Cellar/vim/7.4.052/share/vim/vim74/indent.vim
17: ~/Dropbox/Fresh Install/Shell/vim/3.mapping.vim
18: ~/Dropbox/Fresh Install/Shell/vim/4.commands.vim
19: ~/Dropbox/Fresh Install/Shell/.vim/bundle/ctrlp.vim/plugin/ctrlp.vim
20: ~/Dropbox/Fresh Install/Shell/.vim/bundle/ctrlp.vim/autoload/ctrlp/mrufiles.vim
21: ~/Dropbox/Fresh Install/Shell/.vim/bundle/tagbar/plugin/tagbar.vim
22: ~/Dropbox/Fresh Install/Shell/.vim/bundle/YouCompleteMe/plugin/youcompleteme.vim
23: ~/Dropbox/Fresh Install/Shell/.vim/bundle/vim-commentary/plugin/commentary.vim
24: ~/Dropbox/Fresh Install/Shell/.vim/bundle/ack.vim/plugin/ack.vim
25: ~/Dropbox/Fresh Install/Shell/.vim/bundle/vim-endwise/plugin/endwise.vim
26: ~/Dropbox/Fresh Install/Shell/.vim/bundle/vim-airline/plugin/airline.vim
27: ~/Dropbox/Fresh Install/Shell/.vim/bundle/vim-airline/autoload/airline.vim
28: ~/Dropbox/Fresh Install/Shell/.vim/bundle/tmuxline.vim/plugin/tmuxline.vim
29: ~/Dropbox/Fresh Install/Shell/.vim/bundle/Gist.vim/plugin/gist.vim
30: ~/Dropbox/Fresh Install/Shell/.vim/bundle/vim-fugitive/plugin/fugitive.vim
31: ~/Dropbox/Fresh Install/Shell/.vim/bundle/emmet-vim/plugin/emmet.vim
32: ~/Dropbox/Fresh Install/Shell/.vim/bundle/rename.vim/plugin/rename.vim
33: ~/Dropbox/Fresh Install/Shell/.vim/bundle/vim-gitgutter/plugin/gitgutter.vim
34: ~/Dropbox/Fresh Install/Shell/.vim/bundle/nerdtree/plugin/NERD_tree.vim
35: ~/Dropbox/Fresh Install/Shell/.vim/bundle/nerdtree/autoload/nerdtree.vim
36: ~/Dropbox/Fresh Install/Shell/.vim/bundle/nerdtree/lib/nerdtree/path.vim
37: ~/Dropbox/Fresh Install/Shell/.vim/bundle/nerdtree/lib/nerdtree/menu_controller.vim
38: ~/Dropbox/Fresh Install/Shell/.vim/bundle/nerdtree/lib/nerdtree/menu_item.vim
39: ~/Dropbox/Fresh Install/Shell/.vim/bundle/nerdtree/lib/nerdtree/key_map.vim
40: ~/Dropbox/Fresh Install/Shell/.vim/bundle/nerdtree/lib/nerdtree/bookmark.vim
41: ~/Dropbox/Fresh Install/Shell/.vim/bundle/nerdtree/lib/nerdtree/tree_file_node.vim
42: ~/Dropbox/Fresh Install/Shell/.vim/bundle/nerdtree/lib/nerdtree/tree_dir_node.vim
43: ~/Dropbox/Fresh Install/Shell/.vim/bundle/nerdtree/lib/nerdtree/opener.vim
44: ~/Dropbox/Fresh Install/Shell/.vim/bundle/nerdtree/lib/nerdtree/creator.vim
45: ~/Dropbox/Fresh Install/Shell/.vim/bundle/nerdtree/nerdtree_plugin/exec_menuitem.vim
46: ~/Dropbox/Fresh Install/Shell/.vim/bundle/nerdtree/nerdtree_plugin/fs_menu.vim
47: ~/Dropbox/Fresh Install/Shell/.vim/bundle/vim-surround/plugin/surround.vim
48: ~/Dropbox/Fresh Install/Shell/.vim/bundle/tabular/plugin/Tabular.vim
49: ~/Dropbox/Fresh Install/Shell/.vim/bundle/camelcasemotion/plugin/camelcasemotion.vim
50: ~/Dropbox/Fresh Install/Shell/.vim/plugin/1.settings.vim
51: /usr/local/Cellar/vim/7.4.052/share/vim/vim74/syntax/nosyntax.vim
52: ~/Dropbox/Fresh Install/Shell/.vim/bundle/vim-airline/autoload/airline/init.vim
53: ~/Dropbox/Fresh Install/Shell/.vim/bundle/vim-airline/autoload/airline/parts.vim
54: ~/Dropbox/Fresh Install/Shell/.vim/bundle/vim-airline/autoload/airline/extensions.vim
55: ~/Dropbox/Fresh Install/Shell/.vim/bundle/vim-airline/autoload/airline/extensions/quickfix.vim
56: ~/Dropbox/Fresh Install/Shell/.vim/bundle/vim-airline/autoload/airline/extensions/ctrlp.vim
57: ~/Dropbox/Fresh Install/Shell/.vim/bundle/vim-airline/autoload/airline/extensions/hunks.vim
58: ~/Dropbox/Fresh Install/Shell/.vim/bundle/vim-airline/autoload/airline/extensions/tagbar.vim
59: ~/Dropbox/Fresh Install/Shell/.vim/bundle/vim-airline/autoload/airline/extensions/branch.vim
60: ~/Dropbox/Fresh Install/Shell/.vim/bundle/vim-airline/autoload/airline/extensions/whitespace.vim
61: ~/Dropbox/Fresh Install/Shell/.vim/bundle/vim-airline/autoload/airline/section.vim
62: ~/Dropbox/Fresh Install/Shell/.vim/bundle/vim-airline/autoload/airline/highlighter.vim
63: ~/Dropbox/Fresh Install/Shell/.vim/bundle/vim-airline/autoload/airline/themes/tomorrow.vim
64: ~/Dropbox/Fresh Install/Shell/.vim/bundle/vim-airline/autoload/airline/themes.vim
65: ~/Dropbox/Fresh Install/Shell/.vim/bundle/vim-airline/autoload/airline/builder.vim
66: ~/Dropbox/Fresh Install/Shell/.vim/bundle/vim-airline/autoload/airline/util.vim
67: ~/Dropbox/Fresh Install/Shell/.vim/bundle/vim-airline/autoload/airline/extensions/default.vim
68: ~/Dropbox/Fresh Install/Shell/.vim/plugin/2.vundle.vim
69: ~/Dropbox/Fresh Install/Shell/.vim/plugin/3.mapping.vim
70: ~/Dropbox/Fresh Install/Shell/.vim/plugin/4.commands.vim
71: ~/Dropbox/Fresh Install/Shell/.vim/plugin/BufOnly.vim
72: /usr/local/Cellar/vim/7.4.052/share/vim/vim74/plugin/getscriptPlugin.vim
73: /usr/local/Cellar/vim/7.4.052/share/vim/vim74/plugin/gzip.vim
74: /usr/local/Cellar/vim/7.4.052/share/vim/vim74/plugin/matchparen.vim
75: /usr/local/Cellar/vim/7.4.052/share/vim/vim74/plugin/netrwPlugin.vim
76: /usr/local/Cellar/vim/7.4.052/share/vim/vim74/plugin/rrhelper.vim
77: /usr/local/Cellar/vim/7.4.052/share/vim/vim74/plugin/spellfile.vim
78: /usr/local/Cellar/vim/7.4.052/share/vim/vim74/plugin/tarPlugin.vim
79: /usr/local/Cellar/vim/7.4.052/share/vim/vim74/plugin/tohtml.vim
80: /usr/local/Cellar/vim/7.4.052/share/vim/vim74/plugin/vimballPlugin.vim
81: /usr/local/Cellar/vim/7.4.052/share/vim/vim74/plugin/zipPlugin.vim
82: ~/Dropbox/Fresh Install/Shell/.vim/bundle/tabular/after/plugin/TabularMaps.vim
83: ~/Dropbox/Fresh Install/Shell/.vim/bundle/tabular/autoload/tabular.vim
84: ~/Dropbox/Fresh Install/Shell/.vim/bundle/YouCompleteMe/autoload/youcompleteme.vim
85: ~/Dropbox/Fresh Install/Shell/.vim/bundle/tagbar/autoload/tagbar.vim
86: /usr/local/Cellar/vim/7.4.052/share/vim/vim74/scripts.vim
87: ~/Dropbox/Fresh Install/Shell/.vim/bundle/nerdtree/syntax/nerdtree.vim
88: ~/Dropbox/Fresh Install/Shell/.vim/bundle/ctrlp.vim/autoload/ctrlp/utils.vim
89: /usr/local/Cellar/vim/7.4.052/share/vim/vim74/ftplugin/vim.vim
90: /usr/local/Cellar/vim/7.4.052/share/vim/vim74/indent/vim.vim
91: /usr/local/Cellar/vim/7.4.052/share/vim/vim74/syntax/vim.vim
92: /usr/local/Cellar/vim/7.4.052/share/vim/vim74/syntax/perl.vim
93: /usr/local/Cellar/vim/7.4.052/share/vim/vim74/syntax/pod.vim
94: /usr/local/Cellar/vim/7.4.052/share/vim/vim74/syntax/ruby.vim
95: /usr/local/Cellar/vim/7.4.052/share/vim/vim74/syntax/python.vim

Опять же, в соответствии с ОБНОВЛЕНИЕМ 2 это без кода, который я имел в моем .vimrc файл до этого был вручную источником моих отдельных файлов сценария vim. Единственный код в моем .vimrc в точке бега :scriptnames было...

if filereadable(".vimlocal")
  source .vimlocal
endif

... но что интересно, вы можете видеть выше, что файлы внутри ~/Dropbox/Fresh Install/Shell/vim/ похоже на загрузку (вот если это то что :scriptnames показывает?). Обратите внимание, что файлы в ~/Dropbox/Fresh Install/Shell/vim/ являются копией файлов в ~/.vim/plugin

2 ответа

Если бы $FOO указывает на реально существующий каталог...

:echo isdirectory("$FOO")

возвращается 0 потому что строка $FOO используется, и у вас нет $FOO каталог.

:echo isdirectory($FOO)

возвращается 1 потому что ценность $FOO используется вместо строки $FOO,


Могу ли я добавить, что я считаю вашу настройку слишком сложной?

Я дошел до

Я пытался поместить их в.vim/ плагин, но когда я открываю Vim, ни один из моих плагинов не работает

Я бы лучше починил спущенную шину, чем заново изобрел колесо.

От .vim/plugin ты имеешь ввиду ~/.vim/plugin/, так что ваши файлы

~/.vim/plugin/1.settings.vim

и так далее? Если это так, и если вы работаете в *NIX-подобной системе, это должно работать. Увидеть :help load-plugins по причинам vim может пропустить этап загрузки файлов плагинов. Пытаться :verbose set rtp? чтобы увидеть, следует ли вам использовать ~/.vim или что-то другое. использование :scriptnames чтобы убедиться, что они не загружаются - может быть какое-то другое объяснение того, что вы видите.

Обновление (на основе ваших комментариев):

я не ожидал ~/.vim/plugin быть перечисленным как часть 'rtp', Я ожидал ~/.vim быть в списке, и это. В соответствии с :help load-plugins, plugin/ часть пути добавлена.

Вы говорите, что BufOnly.vim Источник ~/.vim/plugin/, но он указан как 71: ~/Dropbox/Fresh Install/Shell/.vim/plugin/BufOnly.vim, Вы сделали сим-ссылку из ~/.vim в ~/Dropbox/Fresh Install/Shell/.vim/? Файлы, которые вы хотите, 1.settings.vim через 4.commands.vim, находятся в том же каталоге, и они также получены в соответствии с вашим выводом из :scriptnames (Строки 50 и 68-70, прямо перед BufOnly.vim).

Я не вижу здесь ничего загадочного. Файлы, которые вы хотите получить, находятся в источнике. Если они не дают того эффекта, который вы хотели, тогда ищите объяснение в другом месте.

Кстати, между 17 файлами 1.settings.vim а также 2.vundle.vim, Я уверен, что 1.settings.vim должен вызвать эти другие файлы.

У меня была аналогичная проблема. символические ссылки не распознаются в ˜/.vim/plugin, поэтому вам придется копировать туда свои файлы, а не создавать символические ссылки на папку "git", содержащую все ваши файлы.

Другие вопросы по тегам