Предисловие
vim полагается на огромную библиотеку плагинов, которые делают его потрясающим редактором, но все учебники в сети практически идентичны, учат нас, как установить менеджер плагинов, а затем как установить плагины, все то же самое, с очень малым количеством подробностей о более важных вещах.
При использовании инструмента управления плагинами, такого как Vundle или vim-plug, после установки мы загружаем соответствующий плагин через конфигурационный файл .vimrc в каталоге пользователя, а затем в папке .vim в каталоге пользователя находится папка, соответствующая соответствующему плагину, в каждой папке или подпапке существует xxxx Что это такое?
Другой вопрос, читает ли Vim все свои настройки и скрипты только из ~/.vimrc?
Для начала давайте ответим на два вопроса.
(1) Файлы xxxx.vim по своей природе являются скриптами, поэтому они загружаются при запуске vim, и именно существование этих скриптов официально позволяет нам настраивать vim.
(2) Файл ~/ .vimrc — это только наша обычная пользовательская конфигурация, но есть много других мест, откуда берется конфигурация vim.
Какие скрипты на самом деле загружаются при запуске vim xxx.vim
Как упоминалось ранее, Vim очень аккуратно структурирован, и .vimrc — это всего лишь один из многих конфигурационных файлов. На самом деле, вы можете попросить Vim сообщить вам, какие именно скрипты загружены.
Откройте файл с помощью vim и выполните следующую команду:
# 查看vim加载时加载了那些插件(执行了哪些脚本)
:scriptnames
1: /usr/share/vim/vimrc
2: /usr/share/vim/vim81/debian.vim
3: /usr/share/vim/vim81/syntax/syntax.vim
4: /usr/share/vim/vim81/syntax/synload.vim
5: /usr/share/vim/vim81/syntax/syncolor.vim
6: /usr/share/vim/vim81/filetype.vim
7: ~/.vim/ftdetect/nginx.vim
8: ~/.vimrc
9: /usr/share/vim/vim81/colors/space-vim-dark.vim
10: /usr/share/vim/vim81/plugin/getscriptPlugin.vim
11: /usr/share/vim/vim81/plugin/gzip.vim
12: /usr/share/vim/vim81/plugin/logiPat.vim
13: /usr/share/vim/vim81/plugin/manpager.vim
14: /usr/share/vim/vim81/plugin/matchparen.vim
15: /usr/share/vim/vim81/plugin/netrwPlugin.vim
16: /usr/share/vim/vim81/plugin/rrhelper.vim
17: /usr/share/vim/vim81/plugin/spellfile.vim
18: /usr/share/vim/vim81/plugin/tarPlugin.vim
19: /usr/share/vim/vim81/plugin/tohtml.vim
20: /usr/share/vim/vim81/plugin/vimballPlugin.vim
21: /usr/share/vim/vim81/plugin/zipPlugin.vim
22: /usr/share/vim/vim81/scripts.vim
23: /usr/share/vim/vim81/syntax/vim.vim
24: /usr/share/vim/vim81/syntax/python.vim
25: ~/.vim/plugged/vim-airline/plugin/airline.vim
26: ~/.vim/plugged/vim-airline/autoload/airline/init.vim
27: ~/.vim/plugged/vim-airline/autoload/airline/parts.vim
28: ~/.vim/plugged/vim-airline/autoload/airline/util.vim
29: ~/.vim/plugged/vim-easy-align/plugin/easy_align.vim
Список длиннее, чем вы ожидали? Мы обнаружили, что множество скриптов xxx.vim файлов были загружены из разных мест (т.е. в разных папках) (потому что у меня здесь установлено несколько плагинов, у некоторых их может быть не так много, количество не всегда одинаково). И мы обнаруживаем, что загружаются не только те плагины, которые мы сами установили из папки .vim, но и многие другие из других мест, откуда это взялось? Подробнее об этом позже.
Это фактически тот же скрипт, который vim загружает при запуске, и чем больше скриптов, тем больше времени они отнимают. Если у вас установлено много плагинов, то редактору придется проделать много работы.
Проверка времени запуска vim
vim --startuptime start.log test1.py
Когда вы открываете этот файл test1.py, создается файл журнала start.log.
times in msec
clock self+sourced self: sourced script
clock elapsed: other lines
000.014 000.014: --- VIM STARTING ---
000.415 000.401: Allocated generic buffers
000.717 000.302: locale set
000.734 000.017: window checked
001.838 001.104: inits 1
002.059 000.221: parsing arguments
002.063 000.004: expanding arguments
002.094 000.031: shell init
002.794 000.700: Termcap init
002.844 000.050: inits 2
003.193 000.349: init highlight
006.708 002.160 002.160: sourcing /usr/local/share/vim/vim82/syntax/syncolor.vim
007.073 002.654 000.494: sourcing /usr/local/share/vim/vim82/syntax/synload.vim
021.470 014.263 014.263: sourcing /usr/local/share/vim/vim82/filetype.vim
021.561 017.365 000.448: sourcing /usr/local/share/vim/vim82/syntax/syntax.vim
021.671 000.022 000.022: sourcing /usr/local/share/vim/vim82/filetype.vim
022.298 000.327 000.327: sourcing /usr/local/share/vim/vim82/syntax/syncolor.vim
023.018 000.311 000.311: sourcing /usr/local/share/vim/vim82/syntax/syncolor.vim
023.498 000.315 000.315: sourcing /usr/local/share/vim/vim82/syntax/syncolor.vim
024.292 002.567 001.614: sourcing /root/.vim/colors/molokai.vim
027.588 003.206 003.206: sourcing /root/.vim/autoload/plug.vim
031.007 001.300 001.300: sourcing /usr/local/share/vim/vim82/ftoff.vim
044.017 000.408 000.408: sourcing /root/.vim/plugged/vim-go/ftdetect/gofiletype.vim
044.226 011.661 011.253: sourcing /usr/local/share/vim/vim82/filetype.vim
044.435 000.064 000.064: sourcing /usr/local/share/vim/vim82/ftplugin.vim
044.607 000.054 000.054: sourcing /usr/local/share/vim/vim82/indent.vim
044.775 041.278 005.039: sourcing $HOME/.vimrc
044.785 000.314: sourcing vimrc file(s)
045.472 000.173 000.173: sourcing /root/.vim/plugged/vim-airline/autoload/airline/init.vim
046.018 000.142 000.142: sourcing /root/.vim/plugged/vim-airline/autoload/airline/parts.vim
047.723 000.339 000.339: sourcing /root/.vim/plugged/vim-airline/autoload/airline/util.vim
047.793 002.877 002.223: sourcing /root/.vim/plugged/vim-airline/plugin/airline.vim
048.251 000.357 000.357: sourcing /root/.vim/plugged/vim-easy-align/plugin/easy_align.vim
048.429 000.084 000.084: sourcing /root/.vim/plugged/neodark.vim/plugin/neodark.vim
049.881 001.103 001.103: sourcing /root/.vim/plugged/vim-go/autoload/go/config.vim
051.495 000.824 000.824: sourcing /root/.vim/plugged/vim-go/autoload/go/util.vim
...
...
中间省略
...
...
084.259 000.044 000.044: sourcing /root/.vim/plugged/vim-airline/autoload/airline/extensions/keymap.vim
091.665 000.092 000.092: sourcing /root/.vim/plugged/vim-airline/autoload/airline/themes.vim
092.103 000.665 000.573: sourcing /root/.vim/plugged/vim-airline/autoload/airline/themes/dark.vim
120.187 000.269 000.269: sourcing /root/.vim/plugged/vim-airline/autoload/airline/builder.vim
120.828 000.132 000.132: sourcing /root/.vim/plugged/vim-airline/autoload/airline/extensions/default.vim
190.934 110.326: opening buffers
190.988 000.054: BufEnter autocommands
191.000 000.012: editing files in windows
191.559 000.559: VimEnter autocommands
191.561 000.002: before starting main loop
194.803 003.242: first screen update
194.806 000.003: --- VIM STARTED ---
Как вы можете видеть, для открытия файла test1.py с помощью vim потребовалось 194,806 миллисекунд.
Запуск vim в чистом виде (без плагинов)
# --clean 'nocompatible', Vim defaults, no plugins, no viminfo,
# 即仅仅使用默认的vim设置,不加载插件,也不启用其它的vimrc的配置等。
# vim8.0版本可以使用--clean参数,vim7.4版本似乎没有这么参数,所以还是更新一下vim到新版本
vim --clean --startuptime start3.log test1.py
Открытие файла start3.log показывает, что общее количество миллисекунд составляет 022,682.
...
省略前面的
...
022.208 000.032: VimEnter autocommands
022.209 000.001: before starting main loop
022.680 000.471: first screen update
022.682 000.002: --- VIM STARTED ---
Путь поиска для загрузки времени выполнения vim
Чтобы определить, какие скрипты будут запущены при запуске или при загрузке буфера, Vim выполняет итерацию по ‘runtimepath’. Параметр представляет собой список каталогов, разделенных запятыми, каждый из которых имеет последовательную структуру.
Vim изучит структуру каждого каталога, найдет скрипты, которые необходимо запустить, и обработает их один за другим в том порядке, в котором перечислены каталоги.
Прохождение пути поиска runtimepath
После запуска vim выполните
:set runtimepath
Получите следующий результат.
runtimepath=~/.vim,
~/.vim/plugged/vim-airline,
~/.vim/plugged/vim-easy-align,
~/.vim/plugged/neodark.vim,
~/.vim/plugged/vim-monokai,
~/.vim/plugged/vim-colors-github,
~/.vim/plugged/vim-one,
~/.vim/plugged/vim-go,
~/.vim/plugged/vim-godef,
~/.vim/plugged/nerdtree,
~/.vim/plugged/vim-nerdtree-tabs,
~/.vim/plugged/nerdtree-git-plugin,
/usr/local/share/vim/vimfiles,
/usr/local/share/vim/vim82,
/usr/local/share/vim/vimfiles/after,
~/.vim/after
Краткое описание каталогов, содержащихся в runtimepath
-
~/.vim
- Домашний каталог, в котором вы можете сохранить свои личные предпочтения.
-
/usr/local/share/vim/vimfiles
- Общесистемный каталог vim, в котором хранятся файлы, определенные системным администратором.
-
/usr/local/share/vim/vim81
- т.е. $VIMRUNTIME, содержит файлы, распространяемые вместе с vim.
-
/usr/local/share/vim/vimfiles/after
- Каталог «after» в общесистемном каталоге Vim. Системный администратор может использовать этот каталог для отмены настроек по умолчанию или добавления новых.
-
~/.vim/after
- Каталог ‘after’ в домашнем каталоге. Этот каталог можно использовать для отмены настроек по умолчанию или системных настроек личными предпочтениями, а также для добавления новых настроек.
Эти каталоги обрабатываются по порядку, поэтому если и есть что-то особенное в каталоге «after», так это то, что он находится в конце списка. В действительности в «после» нет ничего особенного.
При обработке каждого каталога Vim ищет вложенные папки с определенным именем. Подробнее об этом. См. :help runtimepath
- плагин/
- Файлы сценариев Vim, которые автоматически загружаются при редактировании любого типа файлов, называются «глобальными плагинами».
-
автозагрузка/
- (Не путать с «плагинами»). Сценарии в автозагрузке содержат функции, которые загружаются только по запросу других сценариев.
-
ftdetect/
- Сценарий для определения типов файлов. Тип файла может быть определен по расширению файла, местоположению или внутреннему содержимому файла.
-
ftplugin/
- Сценарий, который будет выполняться при редактировании файлов известного типа.
-
компилятор/
- Определяет, как запускаются различные компиляторы или инструменты форматирования и как разбирается их вывод. Может использоваться совместно несколькими ftplugins. Он не выполняется автоматически и должен быть вызван через :компилятор.
-
пакет/
-
Собственный каталог пакетов Vim 8, который использует формат «Pathogen» для управления пакетами. Встроенная система управления пакетами не требует использования стороннего кода.
Пользовательская установка плагинов сторонних производителей
Плагины в vim — это, по сути, скрипты, в Vim они просто скрипты и должны быть помещены в нужное место в пути выполнения, чтобы быть выполненными.
инструменты управления плагинами vim
-
Vundle
-
vim-plug
-
Пакеты Vim 8
встроенный менеджер пакетов vim8
Наиболее стабильным способом управления плагинами является использование встроенной в Vim8 функции менеджера пакетов, которая не требует стороннего кода.
Сначала создайте каталог пакета в папке .vim в каталоге пользователя, затем создайте два подкаталога opt и start в каталоге пакета.
Обратите внимание, что пользовательские имена здесь — это способ классифицировать плагины, такие как автозаполнение, навигация, отладка и т.д., для удобства управления, но, конечно, я мог бы просто поместить их все в одну директорию, но это не так просто.
mkdir -p ~/.vim/pack/{自定义名称}/{opt,start}
Обратите внимание на пользовательское имя. Это имя полностью зависит от вас. Мы используем его для распределения пакетов по категориям. Большинство людей сваливают все свои плагины в бессмысленную категорию, и это совершенно нормально. Теоретически вы можете создать несколько категорий, например, ~/.vim/pack/navigation, ~/.vim/pack/linting и т.д., но, конечно, я могу поместить их все в каталог foobar.
Vim не определяет дубликаты между категориями, если есть дубликаты, они будут загружены дважды.