Невозможно автоматически найти пользовательские файлы 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
так что когда команда execute
d тогда пробел в имени файла не вызовет проблемы.
ОБНОВЛЕНИЕ 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", содержащую все ваши файлы.