wbthomason / packer.nvim

A use-package inspired plugin manager for Neovim. Uses native packages, supports Luarocks dependencies, written in Lua, allows for expressive config
MIT License
7.9k stars 264 forks source link

startup time very slow #191

Closed hamsterBiscuit closed 3 years ago

hamsterBiscuit commented 3 years ago

nvim version:

NVIM v0.5.0-dev+nightly-355-g69103ff0c Build type: Release LuaJIT 2.1.0-beta3 Compilation: /usr/bin/clang -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=1 -DNDEBUG -Wall -Wextra -pedantic -Wno-unused-parameter -Wstrict-prototypes -std=gnu99 -Wshadow -Wconversion -Wmissing-prototypes -Wimplicit-fallthrough -Wvla -fstack-protector-strong -fno-common -fdiagnostics-color=auto -DINCLUDE_GENERATED_DECLARATIONS -D_GNU_SOURCE -DNVIM_MSGPACK_HAS_FLOAT32 -DNVIM_UNIBI_HAS_VAR_FROM -DMIN_LOG_LEVEL=3 -I/tmp/neovim-20210125-7796-o75irp/build/config -I/tmp/neovim-20210125-7796-o75irp/src -I/usr/local/include -I/usr/local/Cellar/msgpack/3.3.0/include -I/tmp/neovim-20210125-7796-o75irp/deps-build/include -I/usr/local/Cellar/libtermkey/0.22/include -I/usr/local/Cellar/libvterm/0.1.4/include -I/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include -I/usr/local/opt/gettext/include -I/tmp/neovim-20210125-7796-o75irp/build/src/nvim/auto -I/tmp/neovim-20210125-7796-o75irp/build/include Compiled by yongqi@zhangyongqideMacBook-Pro.local Features: +acl +iconv +tui See ":help feature-compile" system vimrc file: "$VIM/sysinit.vim" fall-back for $VIM: "/usr/local/Cellar/neovim/HEAD-69103ff/share/nvim" Run :checkhealth for more info

problem: startup time exceed 200ms

sartup Info:

times in msec clock self+sourced self: sourced script clock elapsed: other lines 000.012 000.012: --- NVIM STARTING --- 001.267 001.255: locale set 002.086 000.820: inits 1 002.121 000.035: window checked 002.127 000.006: parsing arguments 002.474 000.346: expanding arguments 002.584 000.110: inits 2 003.270 000.686: init highlight 003.272 000.002: waiting for UI 006.208 002.936: done waiting for UI 006.270 000.062: initialized screen early for UI 051.492 045.222: sourcing vimrc file(s) 061.828 000.055 000.055: sourcing /Users/yongqi/.local/share/nvim/site/pack/packer/start/nvim-treesitter/ftdetect/query.vim 062.158 010.490 010.435: sourcing /usr/local/Cellar/neovim/HEAD-69103ff/share/nvim/runtime/filetype.vim 063.040 000.061 000.061: sourcing /usr/local/Cellar/neovim/HEAD-69103ff/share/nvim/runtime/ftplugin.vim 063.867 000.054 000.054: sourcing /usr/local/Cellar/neovim/HEAD-69103ff/share/nvim/runtime/indent.vim 065.300 000.366 000.366: sourcing /usr/local/Cellar/neovim/HEAD-69103ff/share/nvim/runtime/syntax/syncolor.vim 066.162 001.393 001.028: sourcing /usr/local/Cellar/neovim/HEAD-69103ff/share/nvim/runtime/syntax/synload.vim 066.205 001.615 000.222: sourcing /usr/local/Cellar/neovim/HEAD-69103ff/share/nvim/runtime/syntax/syntax.vim 073.756 001.052 001.052: sourcing /Users/yongqi/.config/nvim/plugin/bufkill.vim 073.971 000.122 000.122: sourcing /Users/yongqi/.config/nvim/plugin/difftools.vim 074.149 000.112 000.112: sourcing /Users/yongqi/.config/nvim/plugin/nicefold.vim 116.935 014.269 014.269: sourcing /Users/yongqi/.local/share/nvim/site/pack/packer/start/onebuddy/colors/onebuddy.vim 136.367 001.688 001.688: sourcing /Users/yongqi/.local/share/nvim/site/pack/packer/opt/nvim-treesitter-textobjects/plugin/nvim-treesitter-textobjects.vim 136.721 062.505 046.547: sourcing /Users/yongqi/.config/nvim/plugin/packer_compiled.vim 137.849 000.027 000.027: sourcing /usr/local/Cellar/neovim/HEAD-69103ff/share/nvim/runtime/plugin/gzip.vim 137.945 000.021 000.021: sourcing /usr/local/Cellar/neovim/HEAD-69103ff/share/nvim/runtime/plugin/health.vim 138.093 000.081 000.081: sourcing /usr/local/Cellar/neovim/HEAD-69103ff/share/nvim/runtime/plugin/man.vim 138.185 000.021 000.021: sourcing /usr/local/Cellar/neovim/HEAD-69103ff/share/nvim/runtime/plugin/matchit.vim 138.277 000.022 000.022: sourcing /usr/local/Cellar/neovim/HEAD-69103ff/share/nvim/runtime/plugin/matchparen.vim 138.376 000.032 000.032: sourcing /usr/local/Cellar/neovim/HEAD-69103ff/share/nvim/runtime/plugin/netrwPlugin.vim 138.695 000.017 000.017: sourcing /Users/yongqi/.local/share/nvim/rplugin.vim 138.705 000.261 000.244: sourcing /usr/local/Cellar/neovim/HEAD-69103ff/share/nvim/runtime/plugin/rplugin.vim 138.899 000.121 000.121: sourcing /usr/local/Cellar/neovim/HEAD-69103ff/share/nvim/runtime/plugin/shada.vim 139.020 000.037 000.037: sourcing /usr/local/Cellar/neovim/HEAD-69103ff/share/nvim/runtime/plugin/spellfile.vim 139.126 000.026 000.026: sourcing /usr/local/Cellar/neovim/HEAD-69103ff/share/nvim/runtime/plugin/tarPlugin.vim 139.223 000.021 000.021: sourcing /usr/local/Cellar/neovim/HEAD-69103ff/share/nvim/runtime/plugin/tohtml.vim 139.332 000.029 000.029: sourcing /usr/local/Cellar/neovim/HEAD-69103ff/share/nvim/runtime/plugin/tutor.vim 139.434 000.027 000.027: sourcing /usr/local/Cellar/neovim/HEAD-69103ff/share/nvim/runtime/plugin/zipPlugin.vim 139.483 011.253: loading plugins 140.457 000.134 000.134: sourcing /Users/yongqi/.local/share/nvim/site/pack/packer/start/accelerated-jk/plugin/accelerated-jk.vim 142.090 001.306 001.306: sourcing /Users/yongqi/.local/share/nvim/site/pack/packer/start/asyncrun.vim/plugin/asyncrun.vim 143.565 001.208 001.208: sourcing /Users/yongqi/.local/share/nvim/site/pack/packer/start/asynctasks.vim/plugin/asynctasks.vim 148.432 000.233 000.233: sourcing /Users/yongqi/.local/share/nvim/site/pack/packer/start/vim-operator-user/autoload/operator/user.vim 156.389 012.118 011.885: sourcing /Users/yongqi/.local/share/nvim/site/pack/packer/start/caw.vim/plugin/caw.vim 157.374 000.366 000.366: sourcing /Users/yongqi/.local/share/nvim/site/pack/packer/start/dashboard-nvim/plugin/dashboard.vim 158.309 000.587 000.587: sourcing /Users/yongqi/.local/share/nvim/site/pack/packer/start/editorconfig-vim/plugin/editorconfig.vim 158.875 000.251 000.251: sourcing /Users/yongqi/.local/share/nvim/site/pack/packer/start/emmet-vim/plugin/emmet.vim 159.363 000.174 000.174: sourcing /Users/yongqi/.local/share/nvim/site/pack/packer/start/galaxyline.nvim/plugin/galaxyline.vim 159.854 000.133 000.133: sourcing /Users/yongqi/.local/share/nvim/site/pack/packer/start/lspsaga.nvim/plugin/lspsaga.vim 160.560 000.345 000.345: sourcing /Users/yongqi/.local/share/nvim/site/pack/packer/start/markdown-preview.nvim/plugin/mkdp.vim 160.928 000.039 000.039: sourcing /Users/yongqi/.local/share/nvim/site/pack/packer/start/nvim-bufferline.lua/plugin/bufferline.vim 161.367 000.142 000.142: sourcing /Users/yongqi/.local/share/nvim/site/pack/packer/start/nvim-compe/plugin/compe.vim 161.729 000.059 000.059: sourcing /Users/yongqi/.local/share/nvim/site/pack/packer/start/nvim-lspconfig/plugin/lspconfig.vim 162.170 000.144 000.144: sourcing /Users/yongqi/.local/share/nvim/site/pack/packer/start/nvim-tree.lua/plugin/tree.vim 163.552 001.008 001.008: sourcing /Users/yongqi/.local/share/nvim/site/pack/packer/start/nvim-treesitter/plugin/nvim-treesitter.vim 163.762 000.039 000.039: sourcing /Users/yongqi/.local/share/nvim/site/pack/packer/start/nvim-treesitter/ftdetect/query.vim 164.236 000.092 000.092: sourcing /Users/yongqi/.local/share/nvim/site/pack/packer/start/nvim-web-devicons/plugin/nvim-web-devicons.vim 169.858 005.058 005.058: sourcing /Users/yongqi/.local/share/nvim/site/pack/packer/start/plenary.nvim/plugin/plenary.vim 170.867 000.587 000.587: sourcing /Users/yongqi/.local/share/nvim/site/pack/packer/start/vim-closetag/plugin/closetag.vim 171.689 000.510 000.510: sourcing /Users/yongqi/.local/share/nvim/site/pack/packer/start/vim-eft/plugin/eft.vim 172.601 000.376 000.376: sourcing /Users/yongqi/.local/share/nvim/site/pack/packer/start/vim-operator-surround/plugin/operator/surround.vim 173.953 000.948 000.948: sourcing /Users/yongqi/.local/share/nvim/site/pack/packer/start/vim-terminal-help/plugin/terminal_help.vim 174.401 000.137 000.137: sourcing /Users/yongqi/.local/share/nvim/site/pack/packer/start/vista.vim/plugin/vista.vim 174.940 009.698: loading packages 177.170 001.488 001.488: sourcing /Users/yongqi/.local/share/nvim/site/pack/packer/start/nvim-compe/after/plugin/compe_buffer.vim 178.472 001.221 001.221: sourcing /Users/yongqi/.local/share/nvim/site/pack/packer/start/nvim-compe/after/plugin/compe_calc.vim 180.046 001.488 001.488: sourcing /Users/yongqi/.local/share/nvim/site/pack/packer/start/nvim-compe/after/plugin/compe_nvim_lsp.vim 181.327 001.198 001.198: sourcing /Users/yongqi/.local/share/nvim/site/pack/packer/start/nvim-compe/after/plugin/compe_nvim_lua.vim 181.792 000.148 000.148: sourcing /Users/yongqi/.local/share/nvim/site/pack/packer/start/nvim-compe/autoload/compe.vim 182.150 000.118 000.118: sourcing /Users/yongqi/.local/share/nvim/site/pack/packer/start/nvim-compe/autoload/compe_path/source.vim 182.568 000.139 000.139: sourcing /Users/yongqi/.local/share/nvim/site/pack/packer/start/nvim-compe/autoload/compe/source/vim_bridge.vim 182.656 001.254 000.849: sourcing /Users/yongqi/.local/share/nvim/site/pack/packer/start/nvim-compe/after/plugin/compe_path.vim 186.614 003.877 003.877: sourcing /Users/yongqi/.local/share/nvim/site/pack/packer/start/nvim-compe/after/plugin/compe_snippets_nvim.vim 187.806 001.115 001.115: sourcing /Users/yongqi/.local/share/nvim/site/pack/packer/start/nvim-compe/after/plugin/compe_spell.vim 189.035 001.157 001.157: sourcing /Users/yongqi/.local/share/nvim/site/pack/packer/start/nvim-compe/after/plugin/compe_tags.vim 190.199 001.090 001.090: sourcing /Users/yongqi/.local/share/nvim/site/pack/packer/start/nvim-compe/after/plugin/compe_ultisnips.vim 190.301 000.033 000.033: sourcing /Users/yongqi/.local/share/nvim/site/pack/packer/start/nvim-compe/after/plugin/compe_vim_lsp.vim 191.497 001.097 001.097: sourcing /Users/yongqi/.local/share/nvim/site/pack/packer/start/nvim-compe/after/plugin/compe_vsnip.vim 191.824 001.866: loading after plugins 191.839 000.015: inits 3 198.934 007.096: reading ShaDa 199.222 000.056 000.056: sourcing /Users/yongqi/.local/share/nvim/site/pack/packer/start/nvim-treesitter/autoload/nvim_treesitter.vim 201.506 002.515: opening buffers 202.139 000.174 000.174: sourcing /Users/yongqi/.local/share/nvim/site/pack/packer/start/dashboard-nvim/autoload/dashboard.vim 205.381 003.701: BufEnter autocommands 205.386 000.005: editing files in windows 205.959 000.035 000.035: sourcing /Users/yongqi/.local/share/nvim/site/pack/packer/start/dashboard-nvim/autoload/dashboard/utils.vim 206.996 000.139 000.139: sourcing /Users/yongqi/.local/share/nvim/site/pack/packer/start/dashboard-nvim/autoload/dashboard/section.vim 208.530 000.276 000.276: sourcing /usr/local/Cellar/neovim/HEAD-69103ff/share/nvim/runtime/autoload/provider/clipboard.vim 214.602 000.296 000.296: sourcing /Users/yongqi/.local/share/nvim/site/pack/packer/start/dashboard-nvim/syntax/dashboard.vim 216.113 000.044 000.044: sourcing /Users/yongqi/.local/share/nvim/site/pack/packer/start/dashboard-nvim/syntax/dashboard.vim 219.859 013.683: VimEnter autocommands 219.864 000.006: UIEnter autocommands 219.870 000.005: before starting main loop 223.938 004.069: first screen update 223.942 000.003: --- NVIM STARTED ---

and my plugins config:

local install_path = vim.fn.stdpath("data") .. "/site/pack/packer/start/packer.nvim" if vim.fn.empty(vim.fn.glob(install_path)) > 0 then vim.api.nvim_command("!git clone https://github.com/wbthomason/packer.nvim " .. install_path) end local packer = require("packer") local use = packer.use packer.init( { git = { clone_timeout = nil } } ) packer.reset() -- return packer.startup( -- function() -- plugins manger use "wbthomason/packer.nvim" -- 标签页 状态栏 use "kyazdani42/nvim-web-devicons" -- tab 栏插件 提供 leader + number 切换buffer use { "akinsho/nvim-bufferline.lua", config = require("plugin-config.bufferline") } -- 状态栏插件 use {"glepnir/galaxyline.nvim", config = require("eviline")} -- 开屏 use { "glepnir/dashboard-nvim", config = require("plugin-config.dashboard") } -- 操作视觉增强 -- j k 增强插件 use {"rhysd/accelerated-jk"} -- gc gcc 注释插件 use { "tyru/caw.vim", requires = { "Shougo/context_filetype.vim", config = function() vim.g["context_filetype#search_offset"] = 2000 end } } -- f t 增强 use {"hrsh7th/vim-eft"} -- 平滑滚动插件 半屏或者整屏翻页变为滚动效果 use {"psliwka/vim-smoothie", event = {"BufReadPre *", "BufNewFile *"}} -- 增删改引号 use "kana/vim-operator-user" use {"rhysd/vim-operator-surround"} -- 任务 异步run term 插件 use { "skywind3000/asyncrun.vim", config = function() vim.g.asyncrun_open = 6 vim.g.asyncrun_mode = "term" end } use {"skywind3000/asynctasks.vim"} use {"skywind3000/vim-terminal-help"} -- 缩进线插件 use { "glepnir/indent-guides.nvim", event = {"BufReadPre *", "BufNewFile *"}, config = function() require("indent_guides").setup { even_colors = {fg = "NONE", bg = "#23272e"}, odd_colors = {fg = "NONE", bg = "#23272e"} } end } -- 当前光标下划线 高亮 use { "itchyny/vim-cursorword", event = {"BufReadPre *", "BufNewFile *"}, config = require("plugin-config.vim-cursorword") } -- 颜色荧光笔 use { "norcalli/nvim-colorizer.lua", config = require("plugin-config.nvim-colorizer"), ft = { "html", "css", "sass", "scss", "vim", "javascript", "javascriptreact", "typescript", "typescriptreact", "vue", "lua" } } -- fuzzyfind 模糊搜索 use { "nvim-telescope/telescope.nvim", cmd = "Telescope", requires = { {"nvim-lua/popup.nvim"}, {"nvim-lua/plenary.nvim"} }, config = require("plugin-config.telescope") } -- 高亮 主题 use { "nvim-treesitter/nvim-treesitter", requires = { {"nvim-treesitter/nvim-treesitter-textobjects", after = "nvim-treesitter"} }, config = require("plugin-config.treesitter") } use { "tjdevries/colorbuddy.vim", { "Th3Whit3Wolf/onebuddy", config = require("plugin-config.onebuddy") } } -- 文件管理 use { "kyazdani42/nvim-tree.lua", config = require("plugin-config.nvim-tree") } -- 补全 use { "neovim/nvim-lspconfig", { "glepnir/lspsaga.nvim", config = function() require "lspsaga".init_lsp_saga() end } } use { "hrsh7th/nvim-compe", config = require("plugin-config.nvim-compe"), requires = { -- {"aca/completion-tabnine", event = "InsertCharPre *", run = "version=3.1.9 ./install.sh"}, { "hrsh7th/vim-vsnip", event = "InsertCharPre *", config = function() vim.g.vsnip_filetypes = {} vim.g.vsnip_filetypes.javascriptreact = {"javascript"} vim.g.vsnip_filetypes.vue = {"vue", "javascript", "typescript"} vim.g.vsnip_filetypes.typescriptreact = {"typescript"} end }, {"hrsh7th/vim-vsnip-integ", event = "InsertCharPre *"} } } use { "dsznajder/vscode-es7-javascript-react-snippets", "xabikos/vscode-javascript", "hollowtree/vscode-vue-snippets" } -- git信息展示 :SignifyDiff use { "lewis6991/gitsigns.nvim", event = {"BufReadPre *", "BufNewFile *"}, config = function() require("gitsigns").setup() end, requires = { "nvim-lua/plenary.nvim" } } use { "f-person/git-blame.nvim", event = {"BufReadPre *", "BufNewFile *"} } -- 自动括号括回 use { "Raimondi/delimitMate", event = {"BufReadPre *", "BufNewFile *"}, config = require("plugin-config.delimitMate") } -- 目前配置了lua和js,ts的格式化 use { "mhartington/formatter.nvim", cmd = "Format", config = require("plugin-config.formatter") } -- Tag 展示插件,目前主要使用lsp提供,CTAG也依然好用 use { "liuchengxu/vista.vim", config = require("plugin-config.vista") } -- lang Prettier 用来格式化js ts文件,formatter 配置为默认使用项目下 -- Prettier,这个是全局的 use {"prettier/vim-prettier", run = "yarn install", cmd = "Prettier"} -- editorconfig -- 编辑器配置,个大编辑器都有实现或者有插件,用来统一项目的编辑格式,比如锁进等文件规范 use "editorconfig/editorconfig-vim" -- 同步预览MD文件 :MarkdownPreview use {"iamcco/markdown-preview.nvim", run = "cd app && yarn install"} -- emmei插件 使用 ,, 触发补全, use { "mattn/emmet-vim", config = require("plugin-config.emmet") } -- HTML tag 自动补全 use { "alvan/vim-closetag", config = require("plugin-config.closetag") } use { "posva/vim-vue", ft = "vue", config = function() vim.g.vue_pre_processors = "detect_on_enter" end } -- end -- )

i'm a new vimer, if it a stupid question, i'm sorry for this. thinks

wbthomason commented 3 years ago

Do you have information about how long your startup takes with any other plugin manager? If it's faster with others, then this is probably a packer problem; otherwise, the startup time probably comes from the plugins you're using.

I would suggest using https://github.com/dstein64/vim-startuptime to get a better breakdown of where the time during startup is spent, so that you can identify what's slowing you down.

hamsterBiscuit commented 3 years ago

think you for you help, i use vim-startuptime and run StartupTime --tries 20, results:

event                  time percent plot
sourcing vimrc file(  41.28   21.09 ██████████████████████████
packer_compiled.vim   40.11   20.50 █████████████████████████▎
VimEnter autocommand  11.55    5.90 ███████▎
loading plugins       10.51    5.37 ██████▋
filetype.vim           9.61    4.91 ██████
loading packages       8.81    4.50 █████▌
caw.vim                8.22    4.20 █████▏
reading ShaDa          7.37    3.77 ████▋
BufEnter autocommand   5.03    2.57 ███▏
plenary.vim            5.02    2.57 ███▏
compe_snippets_nvim.   3.99    2.04 ██▌
opening buffers        2.78    1.42 █▊
first screen update    2.36    1.20 █▌
nvim-treesitter-text   2.20    1.13 █▍
done waiting for UI    2.04    1.04 █▎
loading after plugin   1.92    0.98 █▎
compe_buffer.vim       1.64    0.84 █
compe_nvim_lsp.vim     1.61    0.82 █
asyncrun.vim           1.55    0.79 █
syntax.vim             1.50    0.77 █
compe_path.vim         1.46    0.74 ▉
asynctasks.vim         1.38    0.70 ▉
synload.vim            1.29    0.66 ▊
compe_nvim_lua.vim     1.25    0.64 ▊
compe_vsnip.vim        1.25    0.64 ▊
compe_calc.vim         1.23    0.63 ▊
compe_tags.vim         1.19    0.61 ▊
compe_ultisnips.vim    1.19    0.61 ▊
compe_spell.vim        1.17    0.60 ▊
bufkill.vim            1.13    0.58 ▊
locale set             1.11    0.57 ▊
terminal_help.vim      0.90    0.46 ▋
nvim-treesitter.vim    0.87    0.45 ▌
inits 1                0.71    0.36 ▌
editorconfig.vim       0.63    0.32 ▍
init highlight         0.60    0.31 ▍
closetag.vim           0.57    0.29 ▍
eft.vim                0.49    0.25 ▎
expanding arguments    0.44    0.22 ▎
clipboard.vim          0.42    0.21 ▎
mkdp.vim               0.36    0.18 ▎
dashboard.vim          0.36    0.18 ▎
surround.vim           0.35    0.18 ▎
rplugin.vim            0.35    0.18 ▎
syncolor.vim           0.33    0.17 ▎
startuptime.vim        0.30    0.15 ▎
emmet.vim              0.30    0.15 ▏
syncolor.vim           0.28    0.14 ▏
syncolor.vim           0.25    0.13 ▏
syncolor.vim           0.25    0.13 ▏
dashboard.vim          0.23    0.12 ▏
compe.vim              0.22    0.11 ▏
galaxyline.vim         0.20    0.10 ▏
user.vim               0.19    0.10 ▏
accelerated-jk.vim     0.18    0.09 ▏
shada.vim              0.17    0.09 ▏
section.vim            0.17    0.09 ▏
tree.vim               0.15    0.08 ▏
vim_bridge.vim         0.15    0.08 ▏
nicefold.vim           0.15    0.07 ▏
source.vim             0.15    0.07 ▏
vista.vim              0.15    0.07 ▏
compe.vim              0.14    0.07 ▏
dashboard.vim          0.14    0.07 ▏
difftools.vim          0.14    0.07 ▏
lspsaga.vim            0.14    0.07 ▏
man.vim                0.12    0.06 ▏
inits 2                0.09    0.05
nvim_treesitter.vim    0.09    0.04
indent.vim             0.07    0.03
lspconfig.vim          0.06    0.03
utils.vim              0.06    0.03
ftplugin.vim           0.06    0.03
spellfile.vim          0.06    0.03
nvim-web-devicons.vi   0.06    0.03
netrwPlugin.vim        0.06    0.03
query.vim              0.06    0.03
gzip.vim               0.05    0.03
matchparen.vim         0.05    0.02
executing command ar   0.05    0.02
health.vim             0.05    0.02
matchit.vim            0.05    0.02
rplugin.vim            0.05    0.02
bufferline.vim         0.05    0.02
compe_vim_lsp.vim      0.04    0.02
tutor.vim              0.04    0.02
tohtml.vim             0.04    0.02
zipPlugin.vim          0.04    0.02
tarPlugin.vim          0.04    0.02
query.vim              0.03    0.02
window checked         0.03    0.02
initialized screen e   0.02    0.01
dashboard.vim          0.02    0.01
inits 3                0.02    0.01
parsing arguments      0.01    0.01
--- NVIM STARTING --   0.01    0.00
editing files in win   0.01    0.00
UIEnter autocommands   0.00    0.00
before starting main   0.00    0.00
--- NVIM STARTED ---   0.00    0.00
waiting for UI         0.00    0.00

total:

image

and it is startup for 'dein',

event                  time percent plot
sourcing vimrc file(  32.58   34.73 ██████████████████████████
filetype.vim          10.25   10.93 ████████▏
caw.vim                7.84    8.36 ██████▎
VimEnter autocommand   6.86    7.31 █████▌
loading plugins        4.68    4.99 ███▊
BufEnter autocommand   4.41    4.70 ███▌
galaxyline.vim         3.06    3.27 ██▌
done waiting for UI    2.20    2.34 █▊
state_nvim.vim         1.71    1.83 █▍
asyncrun.vim           1.56    1.66 █▎
first screen update    1.56    1.66 █▎
asynctasks.vim         1.40    1.50 █▏
opening buffers        1.37    1.46 █▏
syntax.vim             1.31    1.40 █
synload.vim            1.09    1.17 ▉
locale set             1.02    1.08 ▊
bufkill.vim            0.93    0.99 ▊
terminal_help.vim      0.74    0.79 ▋
inits 1                0.67    0.72 ▌
util.vim               0.61    0.65 ▌
init highlight         0.59    0.63 ▌
editorconfig.vim       0.58    0.61 ▌
closetag.vim           0.49    0.52 ▍
expanding arguments    0.44    0.47 ▍
syncolor.vim           0.39    0.41 ▎
reading ShaDa          0.37    0.40 ▎
dashboard.vim          0.36    0.38 ▎
clipboard.vim          0.29    0.31 ▎
autoload.vim           0.28    0.30 ▎
startuptime.vim        0.28    0.30 ▎
loading after plugin   0.27    0.29 ▎
dein.vim               0.26    0.27 ▎
loading packages       0.25    0.26 ▎
section.vim            0.23    0.24 ▏
syncolor.vim           0.22    0.24 ▏
dashboard.vim          0.21    0.22 ▏
ftdetect.vim           0.20    0.22 ▏
syncolor.vim           0.20    0.21 ▏
syncolor.vim           0.19    0.20 ▏
dashboard.vim          0.19    0.20 ▏
user.vim               0.15    0.16 ▏
shada.vim              0.14    0.14 ▏
lspsaga.vim            0.12    0.13 ▏
tree.vim               0.11    0.12 ▏
difftools.vim          0.11    0.12 ▏
nicefold.vim           0.10    0.11 ▏
man.vim                0.10    0.11 ▏
inits 2                0.08    0.09 ▏
ftplugin.vim           0.06    0.07
indent.vim             0.05    0.06
ftoff.vim              0.05    0.05
nvim-web-devicons.vi   0.05    0.05
executing command ar   0.05    0.05
spellfile.vim          0.04    0.04
utils.vim              0.04    0.04
bufferline.vim         0.04    0.04
tutor.vim              0.03    0.03
initialized screen e   0.03    0.03
netrwPlugin.vim        0.03    0.03
window checked         0.03    0.03
zipPlugin.vim          0.03    0.03
gzip.vim               0.03    0.03
tarPlugin.vim          0.03    0.03
tohtml.vim             0.02    0.03
ftplugin.vim           0.02    0.03
health.vim             0.02    0.02
matchit.vim            0.02    0.02
matchparen.vim         0.02    0.02
rplugin.vim            0.02    0.02
inits 3                0.01    0.01
parsing arguments      0.01    0.01
--- NVIM STARTING --   0.01    0.01
editing files in win   0.01    0.01
UIEnter autocommands   0.00    0.00
before starting main   0.00    0.00
--- NVIM STARTED ---   0.00    0.00
waiting for UI         0.00    0.00

total: image

the packer_compiled.vim is use long time, i think.

wbthomason commented 3 years ago

Cool, thanks for the information. That's quite a large difference. Would you mind posting your dein config too, so I can make sure it's doing all the same things as the packer config?

wbthomason commented 3 years ago

One thing I will note is that several plugin files (e.g. compe_snippets.vim, nvim-treesitter-text, etc.) appear only in the packer timing info, not the dein info. I think that either points to the dein config loading a slightly different set of plugins or to native packages (which underlies packer's plugin loading) being substantially slower for some reason...

wbthomason commented 3 years ago

Oh, sorry - could you also post your packer_compiled.vim so that I can see if it's at all strange? For comparison, my packer_compiled generally takes ~3ms of a ~80ms startup time to source, so 40ms is unusually high.

hamsterBiscuit commented 3 years ago

sure, my dein config lazy plugin not same packer, but I feel that effect less ms.

my dein config:

# 标签页 状态栏
- repo: kyazdani42/nvim-web-devicons

#: tab 栏插件 提供 leader + number 切换buffer
- repo: akinsho/nvim-bufferline.lua
  depends: nvim-web-devicons
  hook_source: lua require("plugin-config.bufferline")

# 状态栏插件
- repo: glepnir/galaxyline.nvim
  hook_source: lua require("eviline")

# 开屏
- repo: glepnir/dashboard-nvim
  hook_source: lua require("plugin-config.dashboard")

- repo: Shougo/context_filetype.vim
  on_event: BufReadPre
  hook_source: let g:context_filetype#search_offset = 2000

# j k 增强插件
- repo: rhysd/accelerated-jk
  on_map: { n: <Plug> }

# gc gcc 注释插件
- repo: tyru/caw.vim
  depends: context_filetype.vim
  on_map: { nx: <Plug> }
  hook_add: |
    function! InitCaw() abort
      if !&l:modifiable
        silent! nunmap <buffer> gc
        silent! xunmap <buffer> gc
        silent! nunmap <buffer> gcc
        silent! xunmap <buffer> gcc
      else
        nmap <buffer> gc <Plug>(caw:prefix)
        xmap <buffer> gc <Plug>(caw:prefix)
        nmap <buffer> gcc <Plug>(caw:hatpos:toggle)
        xmap <buffer> gcc <Plug>(caw:hatpos:toggle)
      endif
    endfunction
    autocmd FileType * call InitCaw()
    call InitCaw()

# f t 增强
- repo: hrsh7th/vim-eft
  on_map: { nox: <Plug> }
  hook_source: let g:eft_ignorecase = v:true

#  平滑滚动插件 半屏或者整屏翻页变为滚动效果
- repo: psliwka/vim-smoothie
  on_event: [BufReadPre, BufNewFile]

# 增删改引号
- repo: kana/vim-operator-user

- repo: rhysd/vim-operator-surround
  depends: vim-operator-user
  on_map: { n: <Plug> }

# 任务 异步run term 插件
- repo: skywind3000/asyncrun.vim
  hook_source: |
    let g:asyncrun_open = 6
    let g:asyncrun_mode = "term"

- repo: skywind3000/asynctasks.vim

- repo: skywind3000/vim-terminal-help

# 缩进线插件
- repo: glepnir/indent-guides.nvim
  on_event: [BufReadPre, BufNewFile]
  hook_source: |
    lua <<EOF
    require("indent_guides").setup {
      even_colors = {fg = "NONE", bg = "#23272e"},
      odd_colors = {fg = "NONE", bg = "#23272e"}
    }
    EOF

# 当前光标下划线 高亮
- repo: itchyny/vim-cursorword
  on_event: [BufReadPre, BufNewFile]
  hook_source: lua require("plugin-config.vim-cursorword")

# 颜色荧光笔
- repo: norcalli/nvim-colorizer.lua
  hook_source: lua require("plugin-config.nvim-colorizer")
  on_ft:
    [
      html,
      css,
      sass,
      scss,
      vim,
      javascript,
      javascriptreact,
      typescript,
      typescriptreact,
      vue,
      lua
    ]

# fuzzyfind 模糊搜索
- repo: nvim-telescope/telescope.nvim
  on_cmd: Telescope
  hook_source: lua require("plugin-config.telescope")

- repo: nvim-lua/popup.nvim
  on_source: telescope.nvim

- repo: nvim-lua/plenary.nvim
  on_source: [telescope.nvim, gitsigns.nvim]

# 高亮 主题
- repo: nvim-treesitter/nvim-treesitter
  on_event: BufRead
  hook_source: lua require("plugin-config.treesitter")

- repo: nvim-treesitter/nvim-treesitter-textobjects
  on_source: nvim-treesitter

# 文件管理
- repo: kyazdani42/nvim-tree.lua
  hook_source: lua require("plugin-config.nvim-tree")

# 补全
- repo: neovim/nvim-lspconfig
  on_event: BufRead
  on_source: lspsaga.nvim
  hook_source: lua require("plugin-config.lsp")

- repo: glepnir/lspsaga.nvim
  hook_source: lua require("lspsaga").init_lsp_saga()

- repo: hrsh7th/nvim-compe
  on_event: InsertEnter
  hook_source: lua require("plugin-config.nvim-compe")

- repo: hrsh7th/vim-vsnip
  on_event: InsertCharPre
  hook_source: |
    let g:vsnip_filetypes = {}
    let g:vsnip_filetypes.javascriptreact = ["javascript"]
    let g:vsnip_filetypes.vue = ["vue", "javascript", "typescript"]
    let g:vsnip_filetypes.typescriptreact = ["typescript"]

- repo: hrsh7th/vim-vsnip-integ
  on_event: InsertCharPre

- repo: dsznajder/vscode-es7-javascript-react-snippets
  on_event: InsertCharPre

- repo: xabikos/vscode-javascript
  on_event: InsertCharPre

- repo: hollowtree/vscode-vue-snippets
  on_event: InsertCharPre

# git信息展示 :SignifyDiff
- repo: lewis6991/gitsigns.nvim
  on_event: [BufReadPre, BufNewFile]
  hook_source: lua require("gitsigns").setup()

- repo: f-person/git-blame.nvim
  on_event: [BufReadPre, BufNewFile]

# 自动括号括回
- repo: Raimondi/delimitMate
  on_event: [BufReadPre, BufNewFile]
  hook_source: lua require("plugin-config.delimitMate")

# 目前配置了lua和js,ts的格式化
- repo: mhartington/formatter.nvim
  on_cmd: Format
  hook_source: lua require("plugin-config.formatter")

# Tag 展示插件,目前主要使用lsp提供,CTAG也依然好用
- repo: liuchengxu/vista.vim
  on_cmd: [Vista, Vista!, Vista!!]
  hook_source: require("plugin-config.vista")

# lang Prettier 用来格式化js ts文件,formatter 配置为默认使用项目下
# Prettier,这个是全局的
- repo: prettier/vim-prettier
  build: 'sh -c "cd app & yarn install"'
  on_cmd: Prettier

# editorconfig
# 编辑器配置,个大编辑器都有实现或者有插件,用来统一项目的编辑格式,比如锁进等文件规范
- repo: editorconfig/editorconfig-vim

# 同步预览MD文件 :MarkdownPreview
- repo: iamcco/markdown-preview.nvim
  on_ft: [markdown, pandoc.markdown, rmd]
  build: 'sh -c "cd app & yarn install"'
# emmei插件 使用 ,, 触发补全,
- repo: mattn/emmet-vim
  on_event: InsertEnter
  hook_source: lua require("plugin-config.emmet")

# HTML tag 自动补全
- repo: alvan/vim-closetag
  hook_source: lua require("plugin-config.closetag")

- repo: posva/vim-vue
  on_ft: vue
  hook_source: let g:vue_pre_processors = "detect_on_enter"

my packer_compiled.vim:

" Automatically generated packer.nvim plugin loader code

if !has('nvim-0.5')
  echohl WarningMsg
  echom "Invalid Neovim version for packer.nvim!"
  echohl None
  finish
endif
try

lua << END
  local package_path_str = "/Users/yongqi/.cache/nvim/packer_hererocks/2.1.0-beta3/share/lua/5.1/?.lua;/Users/yongqi/.cache/nvim/packer_hererocks/2.1.0-beta3/share/lua/5.1/?/init.lua;/Users/yongqi/.cache/nvim/packer_hererocks/2.1.0-beta3/lib/luarocks/rocks-5.1/?.lua;/Users/yongqi/.cache/nvim/packer_hererocks/2.1.0-beta3/lib/luarocks/rocks-5.1/?/init.lua"
  local install_cpath_pattern = "/Users/yongqi/.cache/nvim/packer_hererocks/2.1.0-beta3/lib/lua/5.1/?.so"
  if not string.find(package.path, package_path_str, 1, true) then
    package.path = package.path .. ';' .. package_path_str
  end

  if not string.find(package.cpath, install_cpath_pattern, 1, true) then
    package.cpath = package.cpath .. ';' .. install_cpath_pattern
  end

_G.packer_plugins = {
  ["accelerated-jk"] = {
    loaded = true,
    only_sequence = true,
    only_setup = false,
    path = "/Users/yongqi/.local/share/nvim/site/pack/packer/start/accelerated-jk"
  },
  ["asyncrun.vim"] = {
    config = { "\27LJ\2\nR\0\0\2\0\5\0\t6\0\0\0009\0\1\0)\1\6\0=\1\2\0006\0\0\0009\0\1\0'\1\4\0=\1\3\0K\0\1\0\tterm\18asyncrun_mode\18asyncrun_open\6g\bvim\0" },
    loaded = true,
    only_sequence = true,
    only_setup = false,
    path = "/Users/yongqi/.local/share/nvim/site/pack/packer/start/asyncrun.vim"
  },
  ["asynctasks.vim"] = {
    loaded = true,
    only_sequence = true,
    only_setup = false,
    path = "/Users/yongqi/.local/share/nvim/site/pack/packer/start/asynctasks.vim"
  },
  ["caw.vim"] = {
    loaded = true,
    only_sequence = true,
    only_setup = false,
    path = "/Users/yongqi/.local/share/nvim/site/pack/packer/start/caw.vim"
  },
  ["colorbuddy.vim"] = {
    loaded = true,
    only_sequence = true,
    only_setup = false,
    path = "/Users/yongqi/.local/share/nvim/site/pack/packer/start/colorbuddy.vim"
  },
  ["context_filetype.vim"] = {
    loaded = true,
    only_sequence = true,
    only_setup = false,
    path = "/Users/yongqi/.local/share/nvim/site/pack/packer/start/context_filetype.vim"
  },
  ["dashboard-nvim"] = {
    config = { "\27LJ\2\n·\15\0\0\4\0\18\0\0256\0\0\0009\0\1\0005\1\3\0=\1\2\0006\0\0\0009\0\1\0'\1\5\0=\1\4\0006\0\0\0009\0\1\0005\1\n\0005\2\b\0005\3\a\0=\3\t\2=\2\v\0015\2\r\0005\3\f\0=\3\t\2=\2\14\0015\2\16\0005\3\15\0=\3\t\2=\2\17\1=\1\6\0K\0\1\0\rnew_file\1\0\1\fcommand\21DashboardNewFile\1\2\0\0009  New   File                              SPC t f\14find_file\1\0\1\fcommand\22DashboardFindFile\1\2\0\0009  Find  File                              SPC f f\17find_history\1\0\0\16description\1\0\1\fcommand\25DashboardFindHistory\1\2\0\0009  Recently opened files                   SPC f h\29dashboard_custom_section\14telescope dashboard_default_executive\1\20\0\0\5\5Z        ⢀⣴⡾⠃⠄⠄⠄⠄⠄⠈⠺⠟⠛⠛⠛⠛⠻⢿⣿⣿⣿⣿⣶⣤⡀  `      ⢀⣴⣿⡿⠁⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⣸⣿⣿⣿⣿⣿⣿⣿⣷ b     ⣴⣿⡿⡟⡼⢹⣷⢲⡶⣖⣾⣶⢄⠄⠄⠄⠄⠄⢀⣼⣿⢿⣿⣿⣿⣿⣿⣿⣿ d    ⣾⣿⡟⣾⡸⢠⡿⢳⡿⠍⣼⣿⢏⣿⣷⢄⡀⠄⢠⣾⢻⣿⣸⣿⣿⣿⣿⣿⣿⣿ h  ⣡⣿⣿⡟⡼⡁⠁⣰⠂⡾⠉⢨⣿⠃⣿⡿⠍⣾⣟⢤⣿⢇⣿⢇⣿⣿⢿⣿⣿⣿⣿⣿ j ⣱⣿⣿⡟⡐⣰⣧⡷⣿⣴⣧⣤⣼⣯⢸⡿⠁⣰⠟⢀⣼⠏⣲⠏⢸⣿⡟⣿⣿⣿⣿⣿⣿ j ⣿⣿⡟⠁⠄⠟⣁⠄⢡⣿⣿⣿⣿⣿⣿⣦⣼⢟⢀⡼⠃⡹⠃⡀⢸⡿⢸⣿⣿⣿⣿⣿⡟ j ⣿⣿⠃⠄⢀⣾⠋⠓⢰⣿⣿⣿⣿⣿⣿⠿⣿⣿⣾⣅⢔⣕⡇⡇⡼⢁⣿⣿⣿⣿⣿⣿⢣ j ⣿⡟⠄⠄⣾⣇⠷⣢⣿⣿⣿⣿⣿⣿⣿⣭⣀⡈⠙⢿⣿⣿⡇⡧⢁⣾⣿⣿⣿⣿⣿⢏⣾ j ⣿⡇⠄⣼⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠟⢻⠇⠄⠄⢿⣿⡇⢡⣾⣿⣿⣿⣿⣿⣏⣼⣿ j ⣿⣷⢰⣿⣿⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⢰⣧⣀⡄⢀⠘⡿⣰⣿⣿⣿⣿⣿⣿⠟⣼⣿⣿ j ⢹⣿⢸⣿⣿⠟⠻⢿⣿⣿⣿⣿⣿⣿⣿⣶⣭⣉⣤⣿⢈⣼⣿⣿⣿⣿⣿⣿⠏⣾⣹⣿⣿ j ⢸⠇⡜⣿⡟⠄⠄⠄⠈⠙⣿⣿⣿⣿⣿⣿⣿⣿⠟⣱⣻⣿⣿⣿⣿⣿⠟⠁⢳⠃⣿⣿⣿ d  ⣰⡗⠹⣿⣄⠄⠄⠄⢀⣿⣿⣿⣿⣿⣿⠟⣅⣥⣿⣿⣿⣿⠿⠋  ⣾⡌⢠⣿⡿⠃ T ⠜⠋⢠⣷⢻⣿⣿⣶⣾⣿⣿⣿⣿⠿⣛⣥⣾⣿⠿⠟⠛⠉            \5\5\28dashboard_custom_header\6g\bvim\0" },
    loaded = true,
    only_sequence = true,
    only_setup = false,
    path = "/Users/yongqi/.local/share/nvim/site/pack/packer/start/dashboard-nvim"
  },
  delimitMate = {
    config = { "\27LJ\2\n´\2\0\0\3\0\t\0\0226\0\0\0009\0\1\0)\1\0\0=\1\2\0006\0\0\0009\0\1\0)\1\1\0=\1\3\0006\0\0\0009\0\1\0)\1\1\0=\1\4\0006\0\0\0009\0\1\0)\1\0\0=\1\5\0006\0\0\0009\0\6\0009\0\a\0'\2\b\0B\0\2\1K\0\1\0Yau FileType xml,html,phtml,php,xhtml,js let b:delimitMate_matchpairs = \"(:),[:],{:}\"\17nvim_command\bapi%delimitMate_expand_inside_quotes\29delimitMate_smart_quotes\29delimitMate_expand_space\26delimitMate_expand_cr\6g\bvim\0" },
    loaded = false,
    only_sequence = false,
    only_setup = false,
    path = "/Users/yongqi/.local/share/nvim/site/pack/packer/opt/delimitMate"
  },
  ["editorconfig-vim"] = {
    loaded = true,
    only_sequence = true,
    only_setup = false,
    path = "/Users/yongqi/.local/share/nvim/site/pack/packer/start/editorconfig-vim"
  },
  ["emmet-vim"] = {
    config = { "\27LJ\2\nÞ\2\0\0\3\0\f\0\0266\0\0\0009\0\1\0)\1\0\0=\1\2\0006\0\0\0009\0\1\0)\1\0\0=\1\3\0006\0\0\0009\0\1\0)\1\0\0=\1\4\0006\0\0\0009\0\1\0'\1\6\0=\1\5\0006\0\0\0009\0\1\0'\1\b\0=\1\a\0006\0\0\0009\0\t\0009\0\n\0'\2\v\0B\0\2\1K\0\1\0eautocmd FileType html,css,javascript,javascriptreact,vue,typescript,typescriptreact EmmetInstall\17nvim_command\bapi\6,\26user_emmet_leader_key\6i\20user_emmet_mode\31user_emmet_install_command\30user_emmet_install_global\28user_emmet_complete_tag\6g\bvim\0" },
    loaded = true,
    only_sequence = true,
    only_setup = false,
    path = "/Users/yongqi/.local/share/nvim/site/pack/packer/start/emmet-vim"
  },
  ["formatter.nvim"] = {
    commands = { "Format" },
    config = { "\27LJ\2\n€\1\0\0\5\0\6\1\n5\0\0\0005\1\1\0006\2\2\0009\2\3\0029\2\4\2)\4\0\0B\2\2\0?\2\0\0=\1\5\0L\0\2\0\targs\22nvim_buf_get_name\bapi\bvim\1\2\0\0\21--stdin-filepath\1\0\2\nstdin\2\bexe\rprettier\5€€À™\4N\0\0\2\0\3\0\0045\0\0\0005\1\1\0=\1\2\0L\0\2\0\targs\1\4\0\0\19--indent-count\3\2\f--stdin\1\0\2\nstdin\2\bexe\vluafmtø\1\1\0\6\0\14\0\0313\0\0\0007\0\1\0006\0\2\0'\2\3\0B\0\2\0029\0\4\0005\2\5\0005\3\6\0004\4\3\0006\5\1\0>\5\1\4=\4\a\0034\4\3\0006\5\1\0>\5\1\4=\4\b\0034\4\3\0006\5\1\0>\5\1\4=\4\t\0034\4\3\0006\5\1\0>\5\1\4=\4\n\0034\4\3\0003\5\v\0>\5\1\4=\4\f\3=\3\r\2B\0\2\1K\0\1\0\rfiletype\blua\0\20javascriptreact\20typescriptreact\15typescript\15javascript\1\0\0\1\0\1\flogging\1\nsetup\14formatter\frequire\rPrettier\0\0" },
    loaded = false,
    only_sequence = false,
    only_setup = false,
    path = "/Users/yongqi/.local/share/nvim/site/pack/packer/opt/formatter.nvim"
  },
  ["galaxyline.nvim"] = {
    config = { "\27LJ\2\n\\\0\0\5\0\5\1\0156\0\0\0009\0\1\0009\0\2\0006\2\0\0009\2\1\0029\2\3\2'\4\4\0B\2\2\0A\0\0\2\b\0\0\0X\0\2€+\0\2\0L\0\2\0+\0\1\0L\0\2\0\b%:t\vexpand\nempty\afn\bvim\2\20\0\0\1\0\1\0\2'\0\0\0L\0\2\0\t▊ Î\3\0\0\6\1$\0J5\0\1\0-\1\0\0009\1\0\1=\1\2\0-\1\0\0009\1\3\1=\1\4\0-\1\0\0009\1\5\1=\1\6\0-\1\0\0009\1\5\1=\1\a\0-\1\0\0009\1\5\1=\1\b\0-\1\0\0009\1\t\1=\1\n\0-\1\0\0009\1\0\1=\1\v\0-\1\0\0009\1\f\1=\1\r\0-\1\0\0009\1\f\1=\1\14\0-\1\0\0009\1\f\1=\1\15\0-\1\0\0009\1\16\1=\1\17\0-\1\0\0009\1\18\1=\1\19\0-\1\0\0009\1\18\1=\1\20\0-\1\0\0009\1\t\1=\1\21\0-\1\0\0009\1\t\1=\1\22\0-\1\0\0009\1\23\1=\1\24\0-\1\0\0009\1\23\1=\1\25\0-\1\0\0009\1\23\1=\1\26\0-\1\0\0009\1\t\1=\1\27\0-\1\0\0009\1\t\1=\1\28\0006\1\29\0009\1\30\0019\1\31\1'\3 \0006\4\29\0009\4!\0049\4\"\4B\4\1\0028\4\4\0&\3\4\3B\1\2\1'\1#\0L\1\2\0\2À\n  \tmode\afn\27hi GalaxyViMode guifg=\17nvim_command\bapi\bvim\6t\6!\ar?\arm\6r\tcyan\ace\acv\aRv\6R\vpurple\aic\vyellow\6\19\6S\6s\vorange\ano\6c\bred\6V\6\22\6v\tblue\6i\ngreen\6n\1\0\0\fmagenta\21\0\0\1\0\1\0\2'\0\0\0L\0\2\0\n  L\0\0\3\0\3\1\r6\0\0\0009\0\1\0009\0\2\0)\2\0\0B\0\2\2\25\0\0\0)\1(\0\1\1\0\0X\1\2€+\1\2\0L\1\2\0+\1\1\0L\1\2\0\rwinwidth\afn\bvim\4\20\0\0\1\0\1\0\2'\0\0\0L\0\2\0\t ▊¼\1\0\0\t\1\t\0\0206\0\0\0'\2\1\0B\0\2\0029\1\2\0B\1\1\0026\2\3\0-\4\0\0009\4\4\4B\2\2\4X\5\a€6\a\5\0009\a\6\a9\a\a\a\5\6\a\0X\a\2€'\a\b\0L\a\2\0E\5\3\3R\5÷L\1\2\0\0À\5\rfiletype\abo\bvim\20short_line_list\vipairs\26get_current_file_name!galaxyline.provider_fileinfo\frequire«\21\1\0\v\0u\0µ\0026\0\0\0'\2\1\0B\0\2\0029\1\2\0005\2\4\0=\2\3\0005\2\5\0003\3\6\0009\4\a\0015\5\14\0005\6\t\0003\a\b\0=\a\n\0064\a\3\0009\b\v\2>\b\1\a9\b\f\2>\b\2\a=\a\r\6=\6\15\5>\5\1\0049\4\a\0015\5\20\0005\6\17\0003\a\16\0=\a\n\0065\a\19\0009\b\18\2>\b\1\a9\b\f\2>\b\2\a=\a\r\6=\6\21\5>\5\2\0049\4\a\0015\5\25\0005\6\22\0=\3\23\0064\a\3\0009\b\24\2>\b\1\a9\b\f\2>\b\2\a=\a\r\6=\6\26\5>\5\3\0049\4\a\0015\5\30\0005\6\27\0=\3\23\0064\a\3\0006\b\0\0'\n\28\0B\b\2\0029\b\29\b>\b\1\a9\b\f\2>\b\2\a=\a\r\6=\6\31\5>\5\4\0049\4\a\0015\5$\0005\6!\0005\a \0=\a\n\6=\3\23\0065\a#\0009\b\"\2>\b\1\a9\b\f\2>\b\2\a=\a\r\6=\6%\5>\5\5\0049\4\a\0015\5)\0005\6&\0005\a'\0009\b\f\2>\b\2\a=\a(\0064\a\3\0009\b\24\2>\b\1\a9\b\f\2>\b\2\a=\a\r\6=\6*\5>\5\6\0049\4\a\0015\5.\0005\6+\0005\a,\0009\b\f\2>\b\2\a=\a(\0065\a-\0009\b\24\2>\b\1\a9\b\f\2>\b\2\a=\a\r\6=\6/\5>\5\a\0049\4\a\0015\0051\0005\0060\0004\a\3\0009\b\18\2>\b\1\a9\b\f\2>\b\2\a=\a\r\6=\0062\5>\5\b\0049\4\a\0015\0055\0005\0063\0004\a\3\0009\b4\2>\b\1\a9\b\f\2>\b\2\a=\a\r\6=\0066\5>\5\t\0049\4\a\0015\0059\0005\0067\0004\a\3\0009\b8\2>\b\1\a9\b\f\2>\b\2\a=\a\r\6=\6:\5>\5\n\0049\4\a\0015\5<\0005\6;\0004\a\3\0009\b\v\2>\b\1\a9\b\f\2>\b\2\a=\a\r\6=\6=\5>\5\v\0049\4>\0015\5B\0005\6?\0005\a@\0009\b\f\2>\b\2\a=\a(\0065\aA\0009\b8\2>\b\1\a9\b\f\2>\b\2\a=\a\r\6=\6C\5>\5\1\0049\4>\0015\5G\0005\6D\0005\aE\0009\b\f\2>\b\2\a=\a(\0065\aF\0009\b8\2>\b\1\a9\b\f\2>\b\2\a=\a\r\6=\6H\5>\5\2\0049\4>\0015\5P\0005\6J\0003\aI\0=\a\n\0066\a\0\0'\tK\0B\a\2\0029\aL\a=\a\23\0065\aM\0009\b\f\2>\b\2\a=\a(\0065\aO\0009\bN\2>\b\1\a9\b\f\2>\b\2\a=\a\r\6=\6Q\5>\5\3\0049\4>\0015\5T\0005\6R\0006\a\0\0'\tK\0B\a\2\0029\aL\a=\a\23\0065\aS\0009\bN\2>\b\1\a9\b\f\2>\b\2\a=\a\r\6=\6U\5>\5\4\0043\4V\0009\5>\0015\6X\0005\aW\0=\4\23\a4\b\3\0009\t\"\2>\t\1\b9\t\f\2>\t\2\b=\b\r\a=\aY\6>\6\5\0059\5>\0015\6\\\0005\aZ\0=\4\23\a4\b\3\0009\t[\2>\t\1\b9\t\f\2>\t\2\b=\b\r\a=\a]\6>\6\6\0059\5>\0015\6_\0005\a^\0=\4\23\a4\b\3\0009\t\18\2>\t\1\b9\t\f\2>\t\2\b=\b\r\a=\a`\6>\6\a\0059\5>\0015\6c\0005\ab\0003\ba\0=\b\n\a4\b\3\0009\t\v\2>\t\1\b9\t\f\2>\t\2\b=\b\r\a=\ad\6>\6\b\0059\5e\0015\6i\0005\af\0005\bg\0009\t\f\2>\t\2\b=\b(\a5\bh\0009\t\v\2>\t\1\b9\t\f\2>\t\2\b=\b\r\a=\aj\6>\6\1\0059\5e\0015\6o\0005\al\0003\bk\0=\b\n\a=\3\23\a5\bn\0009\tm\2>\t\1\b9\t\f\2>\t\2\b=\b\r\a=\ap\6>\6\2\0059\5q\0015\6s\0005\ar\0004\b\3\0009\t\24\2>\t\1\b9\t\f\2>\t\2\b=\b\r\a=\at\6>\6\1\0052\0\0€K\0\1\0\15BufferIcon\1\0\0\1\0\1\rprovider\15BufferIcon\21short_line_right\14SFileName\1\0\0\1\4\0\0\0\0\tbold\nwhite\1\0\0\0\15BufferType\1\0\0\1\4\0\0\0\0\tbold\1\2\0\0\tNONE\1\0\2\rprovider\17FileTypeName\14separator\6 \20short_line_left\16RainbowBlue\1\0\0\1\0\0\0\15DiffRemove\1\0\0\1\0\2\rprovider\15DiffRemove\ticon\n  \17DiffModified\1\0\0\vorange\1\0\2\rprovider\17DiffModified\ticon\t 柳\fDiffAdd\1\0\0\1\0\2\rprovider\fDiffAdd\ticon\n  \0\14GitBranch\1\0\0\1\4\0\0\0\0\tbold\1\0\1\rprovider\14GitBranch\fGitIcon\1\0\0\1\4\0\0\0\0\tbold\vviolet\1\2\0\0\tNONE\24check_git_workspace\28galaxyline.provider_vcs\1\0\1\14separator\6 \0\15FileFormat\1\0\0\1\4\0\0\0\0\tbold\1\2\0\0\tNONE\1\0\2\rprovider\15FileFormat\14separator\6 \15FileEncode\1\0\0\1\4\0\0\0\0\tbold\1\2\0\0\tNONE\1\0\2\rprovider\15FileEncode\14separator\6 \nright\19DiagnosticInfo\1\0\0\1\0\2\rprovider\19DiagnosticInfo\ticon\n  \19DiagnosticHint\1\0\0\tcyan\1\0\2\rprovider\19DiagnosticHint\ticon\n  \19DiagnosticWarn\1\0\0\vyellow\1\0\2\rprovider\19DiagnosticWarn\ticon\n  \20DiagnosticError\1\0\0\1\0\2\rprovider\20DiagnosticError\ticon\n  \fPerCent\1\0\0\1\4\0\0\0\0\tbold\1\2\0\0\tNONE\1\0\2\rprovider\16LinePercent\14separator\6 \rLineInfo\1\0\0\24separator_highlight\1\2\0\0\tNONE\1\0\2\rprovider\15LineColumn\14separator\6 \rFileName\1\0\0\1\4\0\0\0\0\tbold\ngreen\1\0\0\1\2\0\0\rFileName\rFileIcon\1\0\0\24get_file_icon_color!galaxyline.provider_fileinfo\1\0\1\rprovider\rFileIcon\rFileSize\1\0\0\afg\14condition\1\0\1\rprovider\rFileSize\vViMode\1\0\0\1\4\0\0\0\0\tbold\bred\1\0\0\0\15RainbowRed\1\0\0\14highlight\abg\tblue\rprovider\1\0\0\0\tleft\0\1\0\v\vviolet\f#a9a1e1\vyellow\f#fabd2f\bred\f#ec5f67\tblue\f#51afef\vorange\f#FF8800\fmagenta\f#c678dd\ngreen\f#98be65\abg\f#202328\rdarkblue\f#081633\afg\f#bbc2cf\tcyan\f#008080\1\4\0\0\rNvimTree\nvista\tdbui\20short_line_list\fsection\15galaxyline\frequire\0" },
    loaded = true,
    only_sequence = true,
    only_setup = false,
    path = "/Users/yongqi/.local/share/nvim/site/pack/packer/start/galaxyline.nvim"
  },
  ["git-blame.nvim"] = {
    loaded = false,
    only_sequence = false,
    only_setup = false,
    path = "/Users/yongqi/.local/share/nvim/site/pack/packer/opt/git-blame.nvim"
  },
  ["gitsigns.nvim"] = {
    config = { "\27LJ\2\n6\0\0\3\0\3\0\0066\0\0\0'\2\1\0B\0\2\0029\0\2\0B\0\1\1K\0\1\0\nsetup\rgitsigns\frequire\0" },
    loaded = false,
    only_sequence = false,
    only_setup = false,
    path = "/Users/yongqi/.local/share/nvim/site/pack/packer/opt/gitsigns.nvim"
  },
  ["indent-guides.nvim"] = {
    config = { "\27LJ\2\n•\1\0\0\4\0\b\0\v6\0\0\0'\2\1\0B\0\2\0029\0\2\0005\2\4\0005\3\3\0=\3\5\0025\3\6\0=\3\a\2B\0\2\1K\0\1\0\15odd_colors\1\0\2\afg\tNONE\abg\f#23272e\16even_colors\1\0\0\1\0\2\afg\tNONE\abg\f#23272e\nsetup\18indent_guides\frequire\0" },
    loaded = false,
    only_sequence = false,
    only_setup = false,
    path = "/Users/yongqi/.local/share/nvim/site/pack/packer/opt/indent-guides.nvim"
  },
  ["lspsaga.nvim"] = {
    config = { "\27LJ\2\n=\0\0\3\0\3\0\0066\0\0\0'\2\1\0B\0\2\0029\0\2\0B\0\1\1K\0\1\0\18init_lsp_saga\flspsaga\frequire\0" },
    loaded = true,
    only_sequence = true,
    only_setup = false,
    path = "/Users/yongqi/.local/share/nvim/site/pack/packer/start/lspsaga.nvim"
  },
  ["markdown-preview.nvim"] = {
    loaded = true,
    only_sequence = true,
    only_setup = false,
    path = "/Users/yongqi/.local/share/nvim/site/pack/packer/start/markdown-preview.nvim"
  },
  ["nvim-bufferline.lua"] = {
    config = { "\27LJ\2\nt\0\0\4\0\6\0\t6\0\0\0'\2\1\0B\0\2\0029\0\2\0005\2\4\0005\3\3\0=\3\5\2B\0\2\1K\0\1\0\foptions\1\0\0\1\0\2\rmappings\2\27always_show_bufferline\1\nsetup\15bufferline\frequire\0" },
    loaded = true,
    only_sequence = true,
    only_setup = false,
    path = "/Users/yongqi/.local/share/nvim/site/pack/packer/start/nvim-bufferline.lua"
  },
  ["nvim-colorizer.lua"] = {
    config = { "\27LJ\2\n7\0\0\3\0\3\0\0066\0\0\0'\2\1\0B\0\2\0029\0\2\0B\0\1\1K\0\1\0\nsetup\14colorizer\frequire\0" },
    loaded = false,
    only_sequence = false,
    only_setup = false,
    path = "/Users/yongqi/.local/share/nvim/site/pack/packer/opt/nvim-colorizer.lua"
  },
  ["nvim-compe"] = {
    config = { "\27LJ\2\n¹\1\0\0\4\0\6\0\t6\0\0\0'\2\1\0B\0\2\0029\0\2\0005\2\3\0005\3\4\0=\3\5\2B\0\2\1K\0\1\0\vsource\1\0\5\nvsnip\2\tpath\2\rnvim_lua\2\rnvim_lsp\2\vbuffer\2\1\0\5\25allow_prefix_unmatch\1\ndebug\1\14preselect\valways\15min_length\3\1\fenabled\2\nsetup\ncompe\frequire\0" },
    loaded = true,
    only_sequence = true,
    only_setup = false,
    path = "/Users/yongqi/.local/share/nvim/site/pack/packer/start/nvim-compe"
  },
  ["nvim-lspconfig"] = {
    loaded = true,
    only_sequence = true,
    only_setup = false,
    path = "/Users/yongqi/.local/share/nvim/site/pack/packer/start/nvim-lspconfig"
  },
  ["nvim-tree.lua"] = {
    config = { "\27LJ\2\nÓ\3\0\0\3\0\16\0%6\0\0\0009\0\1\0)\1\1\0=\1\2\0006\0\0\0009\0\1\0)\1\1\0=\1\3\0006\0\0\0009\0\1\0)\1\1\0=\1\4\0006\0\0\0009\0\1\0)\1\1\0=\1\5\0006\0\0\0009\0\1\0)\1\1\0=\1\6\0006\0\0\0009\0\1\0)\1\1\0=\1\a\0006\0\0\0009\0\1\0005\1\n\0005\2\t\0=\2\v\1=\1\b\0006\0\0\0009\0\1\0005\1\r\0005\2\14\0=\2\15\1=\1\f\0K\0\1\0\bgit\1\0\5\vstaged\b✚\runstaged\b✚\14untracked\b★\frenamed\b≫\runmerged\b≠\1\0\2\fsymlink\b\fdefault\b\20nvim_tree_icons\tedit\1\0\2\16edit_vsplit\6s\15edit_split\6i\1\3\0\0\t<CR>\6l\23nvim_tree_bindings\27nvim_tree_allow_resize\23nvim_tree_tab_open\21nvim_tree_git_hl\27nvim_tree_quit_on_open\25nvim_tree_auto_close\29nvim_tree_indent_markers\6g\bvim\0" },
    loaded = true,
    only_sequence = true,
    only_setup = false,
    path = "/Users/yongqi/.local/share/nvim/site/pack/packer/start/nvim-tree.lua"
  },
  ["nvim-treesitter"] = {
    after = { "nvim-treesitter-textobjects" },
    only_config = true,
    only_sequence = true
  },
  ["nvim-treesitter-textobjects"] = {
    load_after = {},
    loaded = false,
    only_sequence = true,
    only_setup = false,
    path = "/Users/yongqi/.local/share/nvim/site/pack/packer/opt/nvim-treesitter-textobjects"
  },
  ["nvim-web-devicons"] = {
    loaded = true,
    only_sequence = true,
    only_setup = false,
    path = "/Users/yongqi/.local/share/nvim/site/pack/packer/start/nvim-web-devicons"
  },
  onebuddy = {
    config = { "\27LJ\2\nš\4\0\0\f\0\25\0O6\0\0\0'\2\1\0B\0\2\0029\0\2\0'\2\3\0B\0\2\0016\0\0\0'\2\1\0B\0\2\0029\0\4\0B\0\1\0069\5\5\0049\6\6\2'\b\a\0009\t\b\0019\n\t\0019\v\5\4B\6\5\0019\6\6\2'\b\n\0009\t\v\0019\n\t\0019\v\5\4B\6\5\0019\6\6\2'\b\f\0009\t\r\0019\n\v\1\18\v\5\0B\6\5\0019\6\6\2'\b\14\0009\t\15\0019\n\v\1\18\v\5\0B\6\5\0019\6\6\2'\b\16\0009\t\17\0019\n\v\1\18\v\5\0B\6\5\0019\6\6\2'\b\18\0009\t\19\0019\n\v\1\18\v\5\0B\6\5\0019\6\6\2'\b\20\0009\t\r\0019\n\v\1\18\v\5\0B\6\5\0019\6\6\2'\b\21\0009\t\17\0019\n\v\1\18\v\5\0B\6\5\0019\6\6\2'\b\22\0009\t\r\0019\n\v\1\18\v\5\0B\6\5\0019\6\6\2'\b\23\0009\t\19\0019\n\v\1\18\v\5\0B\6\5\0019\6\6\2'\b\24\0009\t\17\0019\n\v\1\18\v\5\0B\6\5\1K\0\1\0\16DiffRemoved\rDiffLine\16DiffNewFile\rDiffFile\14DiffAdded\nhue_2\rDiffText\nhue_5\15DiffDelete\nhue_6\15DiffChange\nhue_4\fDiffAdd\14syntax_bg\16EndOfBuffer\tnone\vmono_4\15SignColumn\bnew\tNONE\nsetup\ronebuddy\16colorscheme\15colorbuddy\frequire\0" },
    loaded = true,
    only_sequence = true,
    only_setup = false,
    path = "/Users/yongqi/.local/share/nvim/site/pack/packer/start/onebuddy"
  },
  ["packer.nvim"] = {
    loaded = true,
    only_sequence = true,
    only_setup = false,
    path = "/Users/yongqi/.local/share/nvim/site/pack/packer/start/packer.nvim"
  },
  ["plenary.nvim"] = {
    loaded = true,
    only_sequence = true,
    only_setup = false,
    path = "/Users/yongqi/.local/share/nvim/site/pack/packer/start/plenary.nvim"
  },
  ["popup.nvim"] = {
    loaded = true,
    only_sequence = true,
    only_setup = false,
    path = "/Users/yongqi/.local/share/nvim/site/pack/packer/start/popup.nvim"
  },
  ["telescope.nvim"] = {
    commands = { "Telescope" },
    config = { "\27LJ\2\n§\2\0\0\t\0\15\0\0236\0\0\0'\2\1\0B\0\2\0029\0\2\0005\2\r\0005\3\3\0005\4\n\0005\5\6\0006\6\0\0'\b\4\0B\6\2\0029\6\5\6=\6\a\0056\6\0\0'\b\4\0B\6\2\0029\6\b\6=\6\t\5=\5\v\4=\4\f\3=\3\14\2B\0\2\1K\0\1\0\rdefaults\1\0\0\rmappings\6i\1\0\0\n<C-k>\28move_selection_previous\n<C-j>\1\0\0\24move_selection_next\22telescope.actions\1\0\3\20prompt_position\btop\18prompt_prefix\t🤖\21sorting_strategy\14ascending\nsetup\14telescope\frequire\0" },
    loaded = false,
    only_sequence = false,
    only_setup = false,
    path = "/Users/yongqi/.local/share/nvim/site/pack/packer/opt/telescope.nvim"
  },
  ["vim-closetag"] = {
    config = { "\27LJ\2\nÒ\3\0\0\2\0\15\0\0296\0\0\0009\0\1\0'\1\3\0=\1\2\0006\0\0\0009\0\1\0'\1\5\0=\1\4\0006\0\0\0009\0\1\0'\1\a\0=\1\6\0006\0\0\0009\0\1\0'\1\t\0=\1\b\0006\0\0\0009\0\1\0)\1\1\0=\1\n\0006\0\0\0009\0\1\0005\1\f\0=\1\v\0006\0\0\0009\0\1\0'\1\14\0=\1\r\0K\0\1\0\6>\22closetag_shortcut\1\0\2\19typescript.tsx\24jsxRegion,tsxRegion\19javascript.jsx\14jsxRegion\21closetag_regions%closetag_emptyTags_caseSensitive\14xhtml,jsx\29closetag_xhtml_filetypes#html,xhtml,phtml,js,jsx,ts,tsx\23closetag_filetypes\"*.xhtml,*.jsx,*.js,*.ts,*.tsx\29closetag_xhtml_filenames1*.html,*.xhtml,*.phtml,*.js,*.jsx,*.ts,*.tsx\23closetag_filenames\6g\bvim\0" },
    loaded = true,
    only_sequence = true,
    only_setup = false,
    path = "/Users/yongqi/.local/share/nvim/site/pack/packer/start/vim-closetag"
  },
  ["vim-cursorword"] = {
    config = { "\27LJ\2\n»\3\0\0\3\0\n\0$6\0\0\0009\0\1\0009\0\2\0'\2\3\0B\0\2\0016\0\0\0009\0\1\0009\0\2\0'\2\4\0B\0\2\0016\0\0\0009\0\1\0009\0\2\0'\2\5\0B\0\2\0016\0\0\0009\0\1\0009\0\2\0'\2\6\0B\0\2\0016\0\0\0009\0\1\0009\0\2\0'\2\a\0B\0\2\0016\0\0\0009\0\1\0009\0\2\0'\2\b\0B\0\2\0016\0\0\0009\0\1\0009\0\2\0'\2\t\0B\0\2\1K\0\1\0\16augroup END/autocmd InsertLeave * let b:cursorword = 1/autocmd InsertEnter * let b:cursorword = 0Gautocmd WinEnter * if &diff || &pvw | let b:cursorword = 0 | endifFautocmd FileType defx,denite,fern,clap,vista let b:cursorword = 0\rautocmd!#augroup user_plugin_cursorword\17nvim_command\bapi\bvim\0" },
    loaded = false,
    only_sequence = false,
    only_setup = false,
    path = "/Users/yongqi/.local/share/nvim/site/pack/packer/opt/vim-cursorword"
  },
  ["vim-eft"] = {
    loaded = true,
    only_sequence = true,
    only_setup = false,
    path = "/Users/yongqi/.local/share/nvim/site/pack/packer/start/vim-eft"
  },
  ["vim-operator-surround"] = {
    loaded = true,
    only_sequence = true,
    only_setup = false,
    path = "/Users/yongqi/.local/share/nvim/site/pack/packer/start/vim-operator-surround"
  },
  ["vim-operator-user"] = {
    loaded = true,
    only_sequence = true,
    only_setup = false,
    path = "/Users/yongqi/.local/share/nvim/site/pack/packer/start/vim-operator-user"
  },
  ["vim-prettier"] = {
    commands = { "Prettier" },
    loaded = false,
    only_sequence = false,
    only_setup = false,
    path = "/Users/yongqi/.local/share/nvim/site/pack/packer/opt/vim-prettier"
  },
  ["vim-smoothie"] = {
    loaded = false,
    only_sequence = false,
    only_setup = false,
    path = "/Users/yongqi/.local/share/nvim/site/pack/packer/opt/vim-smoothie"
  },
  ["vim-terminal-help"] = {
    loaded = true,
    only_sequence = true,
    only_setup = false,
    path = "/Users/yongqi/.local/share/nvim/site/pack/packer/start/vim-terminal-help"
  },
  ["vim-vsnip"] = {
    config = { "\27LJ\2\nÍ\1\0\0\2\0\t\0\0206\0\0\0009\0\1\0004\1\0\0=\1\2\0006\0\0\0009\0\1\0009\0\2\0005\1\4\0=\1\3\0006\0\0\0009\0\1\0009\0\2\0005\1\6\0=\1\5\0006\0\0\0009\0\1\0009\0\2\0005\1\b\0=\1\a\0K\0\1\0\1\2\0\0\15typescript\20typescriptreact\1\4\0\0\bvue\15javascript\15typescript\bvue\1\2\0\0\15javascript\20javascriptreact\20vsnip_filetypes\6g\bvim\0" },
    loaded = false,
    only_sequence = false,
    only_setup = false,
    path = "/Users/yongqi/.local/share/nvim/site/pack/packer/opt/vim-vsnip"
  },
  ["vim-vsnip-integ"] = {
    loaded = false,
    only_sequence = false,
    only_setup = false,
    path = "/Users/yongqi/.local/share/nvim/site/pack/packer/opt/vim-vsnip-integ"
  },
  ["vim-vue"] = {
    config = { "\27LJ\2\nD\0\0\2\0\4\0\0056\0\0\0009\0\1\0'\1\3\0=\1\2\0K\0\1\0\20detect_on_enter\23vue_pre_processors\6g\bvim\0" },
    loaded = false,
    only_sequence = false,
    only_setup = false,
    path = "/Users/yongqi/.local/share/nvim/site/pack/packer/opt/vim-vue"
  },
  ["vista.vim"] = {
    config = { "\27LJ\2\nÁ\2\0\0\2\0\f\0\0256\0\0\0009\0\1\0)\1\1\0=\1\2\0006\0\0\0009\0\1\0'\1\4\0=\1\3\0006\0\0\0009\0\1\0'\1\6\0=\1\5\0006\0\0\0009\0\1\0'\1\b\0=\1\a\0006\0\0\0009\0\1\0)\1\1\0=\1\t\0006\0\0\0009\0\1\0005\1\v\0=\1\n\0K\0\1\0\1\0\2\fvimwiki\rmarkdown\vpandoc\rmarkdown\24vista_executive_for\31vista_highlight_whole_line\rmarkdown\28vista_vimwiki_executive\vscroll\31vista_echo_cursor_strategy\rnvim_lsp\28vista_default_executive\29vista_disable_statusline\6g\bvim\0" },
    loaded = true,
    only_sequence = true,
    only_setup = false,
    path = "/Users/yongqi/.local/share/nvim/site/pack/packer/start/vista.vim"
  },
  ["vscode-es7-javascript-react-snippets"] = {
    loaded = true,
    only_sequence = true,
    only_setup = false,
    path = "/Users/yongqi/.local/share/nvim/site/pack/packer/start/vscode-es7-javascript-react-snippets"
  },
  ["vscode-javascript"] = {
    loaded = true,
    only_sequence = true,
    only_setup = false,
    path = "/Users/yongqi/.local/share/nvim/site/pack/packer/start/vscode-javascript"
  },
  ["vscode-vue-snippets"] = {
    loaded = true,
    only_sequence = true,
    only_setup = false,
    path = "/Users/yongqi/.local/share/nvim/site/pack/packer/start/vscode-vue-snippets"
  }
}

local function handle_bufread(names)
  for _, name in ipairs(names) do
    local path = packer_plugins[name].path
    for _, dir in ipairs({ 'ftdetect', 'ftplugin', 'after/ftdetect', 'after/ftplugin' }) do
      if #vim.fn.finddir(dir, path) > 0 then
        vim.cmd('doautocmd BufRead')
        return
      end
    end
  end
end

local packer_load = nil
local function handle_after(name, before)
  local plugin = packer_plugins[name]
  plugin.load_after[before] = nil
  if next(plugin.load_after) == nil then
    packer_load({name}, {})
  end
end

packer_load = function(names, cause)
  local some_unloaded = false
  for _, name in ipairs(names) do
    if not packer_plugins[name].loaded then
      some_unloaded = true
      break
    end
  end

  if not some_unloaded then return end

  local fmt = string.format
  local del_cmds = {}
  local del_maps = {}
  for _, name in ipairs(names) do
    if packer_plugins[name].commands then
      for _, cmd in ipairs(packer_plugins[name].commands) do
        del_cmds[cmd] = true
      end
    end

    if packer_plugins[name].keys then
      for _, key in ipairs(packer_plugins[name].keys) do
        del_maps[key] = true
      end
    end
  end

  for cmd, _ in pairs(del_cmds) do
    vim.cmd('silent! delcommand ' .. cmd)
  end

  for key, _ in pairs(del_maps) do
    vim.cmd(fmt('silent! %sunmap %s', key[1], key[2]))
  end

  for _, name in ipairs(names) do
    if not packer_plugins[name].loaded then
      vim.cmd('packadd ' .. name)
      if packer_plugins[name].config then
        for _i, config_line in ipairs(packer_plugins[name].config) do
          loadstring(config_line)()
        end
      end

      if packer_plugins[name].after then
        for _, after_name in ipairs(packer_plugins[name].after) do
          handle_after(after_name, name)
          vim.cmd('redraw')
        end
      end

      packer_plugins[name].loaded = true
    end
  end

  handle_bufread(names)

  if cause.cmd then
    local lines = cause.l1 == cause.l2 and '' or (cause.l1 .. ',' .. cause.l2)
    vim.cmd(fmt('%s%s%s %s', lines, cause.cmd, cause.bang, cause.args))
  elseif cause.keys then
    local keys = cause.keys
    local extra = ''
    while true do
      local c = vim.fn.getchar(0)
      if c == 0 then break end
      extra = extra .. vim.fn.nr2char(c)
    end

    if cause.prefix then
      local prefix = vim.v.count ~= 0 and vim.v.count or ''
      prefix = prefix .. '"' .. vim.v.register .. cause.prefix
      if vim.fn.mode('full') == 'no' then
        if vim.v.operator == 'c' then
          prefix = '' .. prefix
        end

        prefix = prefix .. vim.v.operator
      end

      vim.fn.feedkeys(prefix, 'n')
    end

    local escaped_keys = vim.api.nvim_replace_termcodes(cause.keys .. extra, true, true, true)
    vim.api.nvim_feedkeys(escaped_keys, 'm', true)
  elseif cause.event then
    vim.cmd(fmt('doautocmd <nomodeline> %s', cause.event))
  elseif cause.ft then
    vim.cmd(fmt('doautocmd <nomodeline> %s FileType %s', 'filetypeplugin', cause.ft))
    vim.cmd(fmt('doautocmd <nomodeline> %s FileType %s', 'filetypeindent', cause.ft))
  end
end

_packer_load_wrapper = function(names, cause)
  success, err_msg = pcall(packer_load, names, cause)
  if not success then
    vim.cmd('echohl ErrorMsg')
    vim.cmd('echomsg "Error in packer_compiled: ' .. vim.fn.escape(err_msg, '"') .. '"')
    vim.cmd('echomsg "Please check your config for correctness"')
    vim.cmd('echohl None')
  end
end

-- Runtimepath customization

-- Pre-load configuration
-- Post-load configuration
-- Config for: nvim-bufferline.lua
loadstring("\27LJ\2\nt\0\0\4\0\6\0\t6\0\0\0'\2\1\0B\0\2\0029\0\2\0005\2\4\0005\3\3\0=\3\5\2B\0\2\1K\0\1\0\foptions\1\0\0\1\0\2\rmappings\2\27always_show_bufferline\1\nsetup\15bufferline\frequire\0")()
-- Config for: lspsaga.nvim
loadstring("\27LJ\2\n=\0\0\3\0\3\0\0066\0\0\0'\2\1\0B\0\2\0029\0\2\0B\0\1\1K\0\1\0\18init_lsp_saga\flspsaga\frequire\0")()
-- Config for: dashboard-nvim
loadstring("\27LJ\2\n·\15\0\0\4\0\18\0\0256\0\0\0009\0\1\0005\1\3\0=\1\2\0006\0\0\0009\0\1\0'\1\5\0=\1\4\0006\0\0\0009\0\1\0005\1\n\0005\2\b\0005\3\a\0=\3\t\2=\2\v\0015\2\r\0005\3\f\0=\3\t\2=\2\14\0015\2\16\0005\3\15\0=\3\t\2=\2\17\1=\1\6\0K\0\1\0\rnew_file\1\0\1\fcommand\21DashboardNewFile\1\2\0\0009  New   File                              SPC t f\14find_file\1\0\1\fcommand\22DashboardFindFile\1\2\0\0009  Find  File                              SPC f f\17find_history\1\0\0\16description\1\0\1\fcommand\25DashboardFindHistory\1\2\0\0009  Recently opened files                   SPC f h\29dashboard_custom_section\14telescope dashboard_default_executive\1\20\0\0\5\5Z        ⢀⣴⡾⠃⠄⠄⠄⠄⠄⠈⠺⠟⠛⠛⠛⠛⠻⢿⣿⣿⣿⣿⣶⣤⡀  `      ⢀⣴⣿⡿⠁⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⣸⣿⣿⣿⣿⣿⣿⣿⣷ b     ⣴⣿⡿⡟⡼⢹⣷⢲⡶⣖⣾⣶⢄⠄⠄⠄⠄⠄⢀⣼⣿⢿⣿⣿⣿⣿⣿⣿⣿ d    ⣾⣿⡟⣾⡸⢠⡿⢳⡿⠍⣼⣿⢏⣿⣷⢄⡀⠄⢠⣾⢻⣿⣸⣿⣿⣿⣿⣿⣿⣿ h  ⣡⣿⣿⡟⡼⡁⠁⣰⠂⡾⠉⢨⣿⠃⣿⡿⠍⣾⣟⢤⣿⢇⣿⢇⣿⣿⢿⣿⣿⣿⣿⣿ j ⣱⣿⣿⡟⡐⣰⣧⡷⣿⣴⣧⣤⣼⣯⢸⡿⠁⣰⠟⢀⣼⠏⣲⠏⢸⣿⡟⣿⣿⣿⣿⣿⣿ j ⣿⣿⡟⠁⠄⠟⣁⠄⢡⣿⣿⣿⣿⣿⣿⣦⣼⢟⢀⡼⠃⡹⠃⡀⢸⡿⢸⣿⣿⣿⣿⣿⡟ j ⣿⣿⠃⠄⢀⣾⠋⠓⢰⣿⣿⣿⣿⣿⣿⠿⣿⣿⣾⣅⢔⣕⡇⡇⡼⢁⣿⣿⣿⣿⣿⣿⢣ j ⣿⡟⠄⠄⣾⣇⠷⣢⣿⣿⣿⣿⣿⣿⣿⣭⣀⡈⠙⢿⣿⣿⡇⡧⢁⣾⣿⣿⣿⣿⣿⢏⣾ j ⣿⡇⠄⣼⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠟⢻⠇⠄⠄⢿⣿⡇⢡⣾⣿⣿⣿⣿⣿⣏⣼⣿ j ⣿⣷⢰⣿⣿⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⢰⣧⣀⡄⢀⠘⡿⣰⣿⣿⣿⣿⣿⣿⠟⣼⣿⣿ j ⢹⣿⢸⣿⣿⠟⠻⢿⣿⣿⣿⣿⣿⣿⣿⣶⣭⣉⣤⣿⢈⣼⣿⣿⣿⣿⣿⣿⠏⣾⣹⣿⣿ j ⢸⠇⡜⣿⡟⠄⠄⠄⠈⠙⣿⣿⣿⣿⣿⣿⣿⣿⠟⣱⣻⣿⣿⣿⣿⣿⠟⠁⢳⠃⣿⣿⣿ d  ⣰⡗⠹⣿⣄⠄⠄⠄⢀⣿⣿⣿⣿⣿⣿⠟⣅⣥⣿⣿⣿⣿⠿⠋  ⣾⡌⢠⣿⡿⠃ T ⠜⠋⢠⣷⢻⣿⣿⣶⣾⣿⣿⣿⣿⠿⣛⣥⣾⣿⠿⠟⠛⠉            \5\5\28dashboard_custom_header\6g\bvim\0")()
-- Config for: vista.vim
loadstring("\27LJ\2\nÁ\2\0\0\2\0\f\0\0256\0\0\0009\0\1\0)\1\1\0=\1\2\0006\0\0\0009\0\1\0'\1\4\0=\1\3\0006\0\0\0009\0\1\0'\1\6\0=\1\5\0006\0\0\0009\0\1\0'\1\b\0=\1\a\0006\0\0\0009\0\1\0)\1\1\0=\1\t\0006\0\0\0009\0\1\0005\1\v\0=\1\n\0K\0\1\0\1\0\2\fvimwiki\rmarkdown\vpandoc\rmarkdown\24vista_executive_for\31vista_highlight_whole_line\rmarkdown\28vista_vimwiki_executive\vscroll\31vista_echo_cursor_strategy\rnvim_lsp\28vista_default_executive\29vista_disable_statusline\6g\bvim\0")()
-- Config for: emmet-vim
loadstring("\27LJ\2\nÞ\2\0\0\3\0\f\0\0266\0\0\0009\0\1\0)\1\0\0=\1\2\0006\0\0\0009\0\1\0)\1\0\0=\1\3\0006\0\0\0009\0\1\0)\1\0\0=\1\4\0006\0\0\0009\0\1\0'\1\6\0=\1\5\0006\0\0\0009\0\1\0'\1\b\0=\1\a\0006\0\0\0009\0\t\0009\0\n\0'\2\v\0B\0\2\1K\0\1\0eautocmd FileType html,css,javascript,javascriptreact,vue,typescript,typescriptreact EmmetInstall\17nvim_command\bapi\6,\26user_emmet_leader_key\6i\20user_emmet_mode\31user_emmet_install_command\30user_emmet_install_global\28user_emmet_complete_tag\6g\bvim\0")()
-- Config for: nvim-compe
loadstring("\27LJ\2\n¹\1\0\0\4\0\6\0\t6\0\0\0'\2\1\0B\0\2\0029\0\2\0005\2\3\0005\3\4\0=\3\5\2B\0\2\1K\0\1\0\vsource\1\0\5\nvsnip\2\tpath\2\rnvim_lua\2\rnvim_lsp\2\vbuffer\2\1\0\5\25allow_prefix_unmatch\1\ndebug\1\14preselect\valways\15min_length\3\1\fenabled\2\nsetup\ncompe\frequire\0")()
-- Config for: asyncrun.vim
loadstring("\27LJ\2\nR\0\0\2\0\5\0\t6\0\0\0009\0\1\0)\1\6\0=\1\2\0006\0\0\0009\0\1\0'\1\4\0=\1\3\0K\0\1\0\tterm\18asyncrun_mode\18asyncrun_open\6g\bvim\0")()
-- Config for: vim-closetag
loadstring("\27LJ\2\nÒ\3\0\0\2\0\15\0\0296\0\0\0009\0\1\0'\1\3\0=\1\2\0006\0\0\0009\0\1\0'\1\5\0=\1\4\0006\0\0\0009\0\1\0'\1\a\0=\1\6\0006\0\0\0009\0\1\0'\1\t\0=\1\b\0006\0\0\0009\0\1\0)\1\1\0=\1\n\0006\0\0\0009\0\1\0005\1\f\0=\1\v\0006\0\0\0009\0\1\0'\1\14\0=\1\r\0K\0\1\0\6>\22closetag_shortcut\1\0\2\19typescript.tsx\24jsxRegion,tsxRegion\19javascript.jsx\14jsxRegion\21closetag_regions%closetag_emptyTags_caseSensitive\14xhtml,jsx\29closetag_xhtml_filetypes#html,xhtml,phtml,js,jsx,ts,tsx\23closetag_filetypes\"*.xhtml,*.jsx,*.js,*.ts,*.tsx\29closetag_xhtml_filenames1*.html,*.xhtml,*.phtml,*.js,*.jsx,*.ts,*.tsx\23closetag_filenames\6g\bvim\0")()
-- Config for: nvim-treesitter
loadstring("\27LJ\2\n›\3\0\0\6\0\19\0\0276\0\0\0009\0\1\0009\0\2\0'\2\3\0B\0\2\0016\0\0\0009\0\1\0009\0\2\0'\2\4\0B\0\2\0016\0\5\0'\2\6\0B\0\2\0029\0\a\0005\2\b\0005\3\t\0=\3\n\0025\3\v\0=\3\f\0025\3\16\0005\4\r\0005\5\14\0=\5\15\4=\4\17\3=\3\18\2B\0\2\1K\0\1\0\16textobjects\vselect\1\0\0\fkeymaps\1\0\4\aif\20@function.inner\aaf\20@function.outer\aac\17@class.outer\aic\17@class.inner\1\0\1\venable\2\vindent\1\0\1\venable\2\14highlight\1\0\1\venable\2\1\0\1\21ensure_installed\ball\nsetup\28nvim-treesitter.configs\frequire,set foldexpr=nvim_treesitter#foldexpr()\24set foldmethod=expr\17nvim_command\bapi\bvim\0")()
-- Config for: onebuddy
loadstring("\27LJ\2\nš\4\0\0\f\0\25\0O6\0\0\0'\2\1\0B\0\2\0029\0\2\0'\2\3\0B\0\2\0016\0\0\0'\2\1\0B\0\2\0029\0\4\0B\0\1\0069\5\5\0049\6\6\2'\b\a\0009\t\b\0019\n\t\0019\v\5\4B\6\5\0019\6\6\2'\b\n\0009\t\v\0019\n\t\0019\v\5\4B\6\5\0019\6\6\2'\b\f\0009\t\r\0019\n\v\1\18\v\5\0B\6\5\0019\6\6\2'\b\14\0009\t\15\0019\n\v\1\18\v\5\0B\6\5\0019\6\6\2'\b\16\0009\t\17\0019\n\v\1\18\v\5\0B\6\5\0019\6\6\2'\b\18\0009\t\19\0019\n\v\1\18\v\5\0B\6\5\0019\6\6\2'\b\20\0009\t\r\0019\n\v\1\18\v\5\0B\6\5\0019\6\6\2'\b\21\0009\t\17\0019\n\v\1\18\v\5\0B\6\5\0019\6\6\2'\b\22\0009\t\r\0019\n\v\1\18\v\5\0B\6\5\0019\6\6\2'\b\23\0009\t\19\0019\n\v\1\18\v\5\0B\6\5\0019\6\6\2'\b\24\0009\t\17\0019\n\v\1\18\v\5\0B\6\5\1K\0\1\0\16DiffRemoved\rDiffLine\16DiffNewFile\rDiffFile\14DiffAdded\nhue_2\rDiffText\nhue_5\15DiffDelete\nhue_6\15DiffChange\nhue_4\fDiffAdd\14syntax_bg\16EndOfBuffer\tnone\vmono_4\15SignColumn\bnew\tNONE\nsetup\ronebuddy\16colorscheme\15colorbuddy\frequire\0")()
-- Config for: galaxyline.nvim
loadstring("\27LJ\2\n\\\0\0\5\0\5\1\0156\0\0\0009\0\1\0009\0\2\0006\2\0\0009\2\1\0029\2\3\2'\4\4\0B\2\2\0A\0\0\2\b\0\0\0X\0\2€+\0\2\0L\0\2\0+\0\1\0L\0\2\0\b%:t\vexpand\nempty\afn\bvim\2\20\0\0\1\0\1\0\2'\0\0\0L\0\2\0\t▊ Î\3\0\0\6\1$\0J5\0\1\0-\1\0\0009\1\0\1=\1\2\0-\1\0\0009\1\3\1=\1\4\0-\1\0\0009\1\5\1=\1\6\0-\1\0\0009\1\5\1=\1\a\0-\1\0\0009\1\5\1=\1\b\0-\1\0\0009\1\t\1=\1\n\0-\1\0\0009\1\0\1=\1\v\0-\1\0\0009\1\f\1=\1\r\0-\1\0\0009\1\f\1=\1\14\0-\1\0\0009\1\f\1=\1\15\0-\1\0\0009\1\16\1=\1\17\0-\1\0\0009\1\18\1=\1\19\0-\1\0\0009\1\18\1=\1\20\0-\1\0\0009\1\t\1=\1\21\0-\1\0\0009\1\t\1=\1\22\0-\1\0\0009\1\23\1=\1\24\0-\1\0\0009\1\23\1=\1\25\0-\1\0\0009\1\23\1=\1\26\0-\1\0\0009\1\t\1=\1\27\0-\1\0\0009\1\t\1=\1\28\0006\1\29\0009\1\30\0019\1\31\1'\3 \0006\4\29\0009\4!\0049\4\"\4B\4\1\0028\4\4\0&\3\4\3B\1\2\1'\1#\0L\1\2\0\2À\n  \tmode\afn\27hi GalaxyViMode guifg=\17nvim_command\bapi\bvim\6t\6!\ar?\arm\6r\tcyan\ace\acv\aRv\6R\vpurple\aic\vyellow\6\19\6S\6s\vorange\ano\6c\bred\6V\6\22\6v\tblue\6i\ngreen\6n\1\0\0\fmagenta\21\0\0\1\0\1\0\2'\0\0\0L\0\2\0\n  L\0\0\3\0\3\1\r6\0\0\0009\0\1\0009\0\2\0)\2\0\0B\0\2\2\25\0\0\0)\1(\0\1\1\0\0X\1\2€+\1\2\0L\1\2\0+\1\1\0L\1\2\0\rwinwidth\afn\bvim\4\20\0\0\1\0\1\0\2'\0\0\0L\0\2\0\t ▊¼\1\0\0\t\1\t\0\0206\0\0\0'\2\1\0B\0\2\0029\1\2\0B\1\1\0026\2\3\0-\4\0\0009\4\4\4B\2\2\4X\5\a€6\a\5\0009\a\6\a9\a\a\a\5\6\a\0X\a\2€'\a\b\0L\a\2\0E\5\3\3R\5÷L\1\2\0\0À\5\rfiletype\abo\bvim\20short_line_list\vipairs\26get_current_file_name!galaxyline.provider_fileinfo\frequire«\21\1\0\v\0u\0µ\0026\0\0\0'\2\1\0B\0\2\0029\1\2\0005\2\4\0=\2\3\0005\2\5\0003\3\6\0009\4\a\0015\5\14\0005\6\t\0003\a\b\0=\a\n\0064\a\3\0009\b\v\2>\b\1\a9\b\f\2>\b\2\a=\a\r\6=\6\15\5>\5\1\0049\4\a\0015\5\20\0005\6\17\0003\a\16\0=\a\n\0065\a\19\0009\b\18\2>\b\1\a9\b\f\2>\b\2\a=\a\r\6=\6\21\5>\5\2\0049\4\a\0015\5\25\0005\6\22\0=\3\23\0064\a\3\0009\b\24\2>\b\1\a9\b\f\2>\b\2\a=\a\r\6=\6\26\5>\5\3\0049\4\a\0015\5\30\0005\6\27\0=\3\23\0064\a\3\0006\b\0\0'\n\28\0B\b\2\0029\b\29\b>\b\1\a9\b\f\2>\b\2\a=\a\r\6=\6\31\5>\5\4\0049\4\a\0015\5$\0005\6!\0005\a \0=\a\n\6=\3\23\0065\a#\0009\b\"\2>\b\1\a9\b\f\2>\b\2\a=\a\r\6=\6%\5>\5\5\0049\4\a\0015\5)\0005\6&\0005\a'\0009\b\f\2>\b\2\a=\a(\0064\a\3\0009\b\24\2>\b\1\a9\b\f\2>\b\2\a=\a\r\6=\6*\5>\5\6\0049\4\a\0015\5.\0005\6+\0005\a,\0009\b\f\2>\b\2\a=\a(\0065\a-\0009\b\24\2>\b\1\a9\b\f\2>\b\2\a=\a\r\6=\6/\5>\5\a\0049\4\a\0015\0051\0005\0060\0004\a\3\0009\b\18\2>\b\1\a9\b\f\2>\b\2\a=\a\r\6=\0062\5>\5\b\0049\4\a\0015\0055\0005\0063\0004\a\3\0009\b4\2>\b\1\a9\b\f\2>\b\2\a=\a\r\6=\0066\5>\5\t\0049\4\a\0015\0059\0005\0067\0004\a\3\0009\b8\2>\b\1\a9\b\f\2>\b\2\a=\a\r\6=\6:\5>\5\n\0049\4\a\0015\5<\0005\6;\0004\a\3\0009\b\v\2>\b\1\a9\b\f\2>\b\2\a=\a\r\6=\6=\5>\5\v\0049\4>\0015\5B\0005\6?\0005\a@\0009\b\f\2>\b\2\a=\a(\0065\aA\0009\b8\2>\b\1\a9\b\f\2>\b\2\a=\a\r\6=\6C\5>\5\1\0049\4>\0015\5G\0005\6D\0005\aE\0009\b\f\2>\b\2\a=\a(\0065\aF\0009\b8\2>\b\1\a9\b\f\2>\b\2\a=\a\r\6=\6H\5>\5\2\0049\4>\0015\5P\0005\6J\0003\aI\0=\a\n\0066\a\0\0'\tK\0B\a\2\0029\aL\a=\a\23\0065\aM\0009\b\f\2>\b\2\a=\a(\0065\aO\0009\bN\2>\b\1\a9\b\f\2>\b\2\a=\a\r\6=\6Q\5>\5\3\0049\4>\0015\5T\0005\6R\0006\a\0\0'\tK\0B\a\2\0029\aL\a=\a\23\0065\aS\0009\bN\2>\b\1\a9\b\f\2>\b\2\a=\a\r\6=\6U\5>\5\4\0043\4V\0009\5>\0015\6X\0005\aW\0=\4\23\a4\b\3\0009\t\"\2>\t\1\b9\t\f\2>\t\2\b=\b\r\a=\aY\6>\6\5\0059\5>\0015\6\\\0005\aZ\0=\4\23\a4\b\3\0009\t[\2>\t\1\b9\t\f\2>\t\2\b=\b\r\a=\a]\6>\6\6\0059\5>\0015\6_\0005\a^\0=\4\23\a4\b\3\0009\t\18\2>\t\1\b9\t\f\2>\t\2\b=\b\r\a=\a`\6>\6\a\0059\5>\0015\6c\0005\ab\0003\ba\0=\b\n\a4\b\3\0009\t\v\2>\t\1\b9\t\f\2>\t\2\b=\b\r\a=\ad\6>\6\b\0059\5e\0015\6i\0005\af\0005\bg\0009\t\f\2>\t\2\b=\b(\a5\bh\0009\t\v\2>\t\1\b9\t\f\2>\t\2\b=\b\r\a=\aj\6>\6\1\0059\5e\0015\6o\0005\al\0003\bk\0=\b\n\a=\3\23\a5\bn\0009\tm\2>\t\1\b9\t\f\2>\t\2\b=\b\r\a=\ap\6>\6\2\0059\5q\0015\6s\0005\ar\0004\b\3\0009\t\24\2>\t\1\b9\t\f\2>\t\2\b=\b\r\a=\at\6>\6\1\0052\0\0€K\0\1\0\15BufferIcon\1\0\0\1\0\1\rprovider\15BufferIcon\21short_line_right\14SFileName\1\0\0\1\4\0\0\0\0\tbold\nwhite\1\0\0\0\15BufferType\1\0\0\1\4\0\0\0\0\tbold\1\2\0\0\tNONE\1\0\2\rprovider\17FileTypeName\14separator\6 \20short_line_left\16RainbowBlue\1\0\0\1\0\0\0\15DiffRemove\1\0\0\1\0\2\rprovider\15DiffRemove\ticon\n  \17DiffModified\1\0\0\vorange\1\0\2\rprovider\17DiffModified\ticon\t 柳\fDiffAdd\1\0\0\1\0\2\rprovider\fDiffAdd\ticon\n  \0\14GitBranch\1\0\0\1\4\0\0\0\0\tbold\1\0\1\rprovider\14GitBranch\fGitIcon\1\0\0\1\4\0\0\0\0\tbold\vviolet\1\2\0\0\tNONE\24check_git_workspace\28galaxyline.provider_vcs\1\0\1\14separator\6 \0\15FileFormat\1\0\0\1\4\0\0\0\0\tbold\1\2\0\0\tNONE\1\0\2\rprovider\15FileFormat\14separator\6 \15FileEncode\1\0\0\1\4\0\0\0\0\tbold\1\2\0\0\tNONE\1\0\2\rprovider\15FileEncode\14separator\6 \nright\19DiagnosticInfo\1\0\0\1\0\2\rprovider\19DiagnosticInfo\ticon\n  \19DiagnosticHint\1\0\0\tcyan\1\0\2\rprovider\19DiagnosticHint\ticon\n  \19DiagnosticWarn\1\0\0\vyellow\1\0\2\rprovider\19DiagnosticWarn\ticon\n  \20DiagnosticError\1\0\0\1\0\2\rprovider\20DiagnosticError\ticon\n  \fPerCent\1\0\0\1\4\0\0\0\0\tbold\1\2\0\0\tNONE\1\0\2\rprovider\16LinePercent\14separator\6 \rLineInfo\1\0\0\24separator_highlight\1\2\0\0\tNONE\1\0\2\rprovider\15LineColumn\14separator\6 \rFileName\1\0\0\1\4\0\0\0\0\tbold\ngreen\1\0\0\1\2\0\0\rFileName\rFileIcon\1\0\0\24get_file_icon_color!galaxyline.provider_fileinfo\1\0\1\rprovider\rFileIcon\rFileSize\1\0\0\afg\14condition\1\0\1\rprovider\rFileSize\vViMode\1\0\0\1\4\0\0\0\0\tbold\bred\1\0\0\0\15RainbowRed\1\0\0\14highlight\abg\tblue\rprovider\1\0\0\0\tleft\0\1\0\v\vviolet\f#a9a1e1\vyellow\f#fabd2f\bred\f#ec5f67\tblue\f#51afef\vorange\f#FF8800\fmagenta\f#c678dd\ngreen\f#98be65\abg\f#202328\rdarkblue\f#081633\afg\f#bbc2cf\tcyan\f#008080\1\4\0\0\rNvimTree\nvista\tdbui\20short_line_list\fsection\15galaxyline\frequire\0")()
-- Config for: nvim-tree.lua
loadstring("\27LJ\2\nÓ\3\0\0\3\0\16\0%6\0\0\0009\0\1\0)\1\1\0=\1\2\0006\0\0\0009\0\1\0)\1\1\0=\1\3\0006\0\0\0009\0\1\0)\1\1\0=\1\4\0006\0\0\0009\0\1\0)\1\1\0=\1\5\0006\0\0\0009\0\1\0)\1\1\0=\1\6\0006\0\0\0009\0\1\0)\1\1\0=\1\a\0006\0\0\0009\0\1\0005\1\n\0005\2\t\0=\2\v\1=\1\b\0006\0\0\0009\0\1\0005\1\r\0005\2\14\0=\2\15\1=\1\f\0K\0\1\0\bgit\1\0\5\vstaged\b✚\runstaged\b✚\14untracked\b★\frenamed\b≫\runmerged\b≠\1\0\2\fsymlink\b\fdefault\b\20nvim_tree_icons\tedit\1\0\2\16edit_vsplit\6s\15edit_split\6i\1\3\0\0\t<CR>\6l\23nvim_tree_bindings\27nvim_tree_allow_resize\23nvim_tree_tab_open\21nvim_tree_git_hl\27nvim_tree_quit_on_open\25nvim_tree_auto_close\29nvim_tree_indent_markers\6g\bvim\0")()
-- Conditional loads
-- Load plugins in order defined by `after`
vim.cmd [[ packadd nvim-treesitter-textobjects ]]
END

function! s:load(names, cause) abort
  call luaeval('_packer_load_wrapper(_A[1], _A[2])', [a:names, a:cause])
endfunction

" Command lazy-loads
command! -nargs=* -range -bang -complete=file Prettier call s:load(['vim-prettier'], { "cmd": "Prettier", "l1": <line1>, "l2": <line2>, "bang": <q-bang>, "args": <q-args> })
command! -nargs=* -range -bang -complete=file Telescope call s:load(['telescope.nvim'], { "cmd": "Telescope", "l1": <line1>, "l2": <line2>, "bang": <q-bang>, "args": <q-args> })
command! -nargs=* -range -bang -complete=file Format call s:load(['formatter.nvim'], { "cmd": "Format", "l1": <line1>, "l2": <line2>, "bang": <q-bang>, "args": <q-args> })

" Keymap lazy-loads

augroup packer_load_aucmds
  au!
  " Filetype lazy-loads
  au FileType javascriptreact ++once call s:load(['nvim-colorizer.lua'], { "ft": "javascriptreact" })
  au FileType typescript ++once call s:load(['nvim-colorizer.lua'], { "ft": "typescript" })
  au FileType typescriptreact ++once call s:load(['nvim-colorizer.lua'], { "ft": "typescriptreact" })
  au FileType vue ++once call s:load(['nvim-colorizer.lua', 'vim-vue'], { "ft": "vue" })
  au FileType lua ++once call s:load(['nvim-colorizer.lua'], { "ft": "lua" })
  au FileType vim ++once call s:load(['nvim-colorizer.lua'], { "ft": "vim" })
  au FileType html ++once call s:load(['nvim-colorizer.lua'], { "ft": "html" })
  au FileType css ++once call s:load(['nvim-colorizer.lua'], { "ft": "css" })
  au FileType sass ++once call s:load(['nvim-colorizer.lua'], { "ft": "sass" })
  au FileType scss ++once call s:load(['nvim-colorizer.lua'], { "ft": "scss" })
  au FileType javascript ++once call s:load(['nvim-colorizer.lua'], { "ft": "javascript" })
  " Event lazy-loads
  au BufReadPre * ++once call s:load(['indent-guides.nvim', 'git-blame.nvim', 'vim-smoothie', 'vim-cursorword', 'delimitMate', 'gitsigns.nvim'], { "event": "BufReadPre *" })
  au BufNewFile * ++once call s:load(['indent-guides.nvim', 'git-blame.nvim', 'vim-smoothie', 'vim-cursorword', 'delimitMate', 'gitsigns.nvim'], { "event": "BufNewFile *" })
  au InsertCharPre * ++once call s:load(['vim-vsnip', 'vim-vsnip-integ'], { "event": "InsertCharPre *" })
  " Function lazy-loads
augroup END

catch
  echohl ErrorMsg
  echom "Error in packer_compiled: " .. v:exception
  echom "Please check your config for correctness"
  echohl None
endtry
wbthomason commented 3 years ago

Thanks! I'll see if I can figure out what's taking so much time. If you get a chance to experiment, the one potentially big difference I noticed is that your dein config loads nvim-treesitter - and, by extension, your treesitter config and the plugins which load after nvim-treesitter (looks like just nvim-treesitter-textobjects?) on BufRead, whereas they are eagerly loaded in packer. In my experience, treesitter is pretty expensive to load, so this may account for part of the time difference.

Regardless, I'll try to clone your setup and do some more in-depth profiling once I get a chance (though this probably won't be too soon).

Thanks again!

hamsterBiscuit commented 3 years ago

OK,thinks,I agree you with nvim-treesitter, it's effect no more 10 ms and I use icon font for dashboard-nvim, I think it has something to do with this,i well delete icon font test again,

Thanks for you help!

hamsterBiscuit commented 3 years ago

It seems because I compile the config code.

I change config

config = require("plugin-config.nvim-colorizer") to config = [[require("plugin-config.nvim-colorizer")]]

startup time drop to 63ms.

thanks.

it is not problem for me now

wbthomason commented 3 years ago

Very strange. You did not alter the colorizer config code at all, except to change it from a module that returns a function to a module that directly runs the function's code? I would not expect there to be so large a performance difference between using loadstring or not...

hamsterBiscuit commented 3 years ago

I don't know, now I lazy load more plugins. some plugins is changed

akinsho commented 3 years ago

I was also curious about this since I'd also noticed a drop in my startup time and done some profiling with plenary's profile module. I don't think it relates to packer tbh since I rewrote most of my config in lua and added quite a few new plugins, I tried moving my configs from plain requires to strings but don't see a consistent drop in startup time, I'd almost be glad if it was this since my current startup time is about 160ms, 70ms ish of which is spent in packer_compiled.vim

wbthomason commented 3 years ago

Yeah, I have not found a significant difference in startup time between strings or loadstring functions. packer_compiled often takes a while because it's loading so many other files (if you have a lot of config/setup keys); the best ways I've found to profile this are either (1) sequentially commenting out config values in packer_compiled and re-running startup timing or (2) temporarily moving each config value to its own file in plugin, which helps get a more useful, granular breakdown of startup timing.

I wonder if I should add an option to insert profiling code in packer_compiled, e.g. that activates if a certain environment variable is present? It could time each "section" (e.g. requires, making the packer_plugins table, making commands/autocommands, running setups and configs and conds, etc.) and output a report.

wbthomason commented 3 years ago

fwiw, I currently get a startup time of about 60-65ms total, though I'm using relatively few plugins (44 at the moment) and have taken a lot of care to defer what I can to (mostly command-based) lazy loads.

I also noticed that plenary in particular has a substantial startup cost from loading neorocks (and have made a PR to optionally disable this: https://github.com/nvim-lua/plenary.nvim/pull/77). I wonder if it's worth looking at how much the package.path modifications in packer_compiled cost, though - as we statically determine the path additions at compile time - I doubt it's as expensive as neorocks.

akinsho commented 3 years ago

I wonder if I should add an option to insert profiling code in packer_compiled, e.g. that activates if a certain environment variable is present? It could time each "section" (e.g. requires, making the packer_plugins table, making commands/autocommands, running setups and configs and conds, etc.) and output a report.

This would be very cool 😍 I really like to know when adding plugins what the cost of the plugin will be to my startup time i.e. should I lazy load it or not, do I need it if it's this costly time wise etc. Atm this feels a little obscured because most startup time plugins I don't think report lua plugin costs correctly or maybe just not in aggregate.

Was actually just thinking of trying find a way locally to use :profile on packer_compiled.vim although that needs to be run before startup ideally and profile is triggered when vim is already loaded

akinsho commented 3 years ago

tbh the actual number now isn't really a blocker at all it's more me being obsessive but I think a consistent way to know when you're sacrificing startup time and how much would be super useful just so you can make decisions about what to keep and how to load it. I tried to jerry rig something with plenary.profile but this will only profile lua code you can inject the profile functions into short of messing with require which I'd rather not do

wbthomason commented 3 years ago

Atm this feels a little obscured because most startup time plugins I don't think report lua plugin costs correctly or maybe just not in aggregate.

Yeah, I made https://github.com/nvim-lua/wishlist/issues/15 for this reason (though nobody's taken it up yet/I don't have time to do it myself right now.)

Was actually just thinking of trying find a way locally to use :profile on packer_compiled.vim although that needs to be run before startup ideally and profile is triggered when vim is already loaded

I think the easiest way to do this would be to insert vim.fn.reltime/vim.fn.reltimestr calls around each "section". The biggest question to me is whether this is better always inserted and evaluated only if there's an env var set (which imposes some cost when you're not profiling) or instead only inserting this if you run a special "PackerCompile profile" command or something (which means more recompilation).

wbthomason commented 3 years ago

Separately, I should at some point take a look through dein to see if there are any clever tricks packer can adapt.

akinsho commented 3 years ago

I think the easiest way to do this would be to insert vim.fn.reltime/vim.fn.reltimestr calls around each "section". The biggest question to me is whether this is better always inserted and evaluated only if there's an env var set (which imposes some cost when you're not profiling) or instead only inserting this if you run a special "PackerCompile profile" command or something (which means more recompilation).

will checking the existence of an env var really cost that much? it could just be checked once at the beginning of the file, and only then does it do any evaluation. Although on the other hand profiling shouldn't be something that makes daily usage slower, tbh if a user is wanting to profile stuff they'd likely be fine doing a bit more work, but also I can think of it being a nice addition for packer to have some configurable option that reported plugin costs over a configurable threshold

wbthomason commented 3 years ago

It's not so much the cost of checking for the env var as it is the cost of the extra function calls to record timing info. I've started an implementation in #221 that I think has potential, though - it makes the time() function a NOP if the env var isn't present.

gegoune commented 3 years ago

Just a suggestion, but there could be a parameter passed to PackerCompile which would create compile file with profiling functions. Would be good to also print some message to users reminding about 'slower' compiled file being in use.

akinsho commented 3 years ago

Was just about to say something similar maybe if it turns out that it adds some expense (only if it's significant) there could be an option to prevent compiling the profiling logic in, but if it's a NOP then shouldn't cost anything significant so might be a premature optimisation 🤷🏿

wbthomason commented 3 years ago

@cloggier: Yup, that was the second alternative I proposed ("or instead only inserting this if you run a special "PackerCompile profile" command or something (which means more recompilation)")

y9c commented 3 years ago

Hi @wbthomason, I have a similar problem in the startup time.

image

As shown in figure above, Sourcing packer_compiled.vim take a very long time, and this is my packer_compiled.vim file:

https://gist.github.com/yech1990/41db0d1dc516102a5b36079078b8b73d

Could you help me to solve this the problem?

akinsho commented 3 years ago

@yech1990 I think performance issues are very contextual, your load time looks like it's 42ms which is like half mine but it depends heavily on how many plugins you use which you are lazy loading and not? is this time markedly different to other plugin managers you've used? 42ms in and of itself isn't a bad amount of time depends on how it relates to what it used to be for example?

EDIT: Note that with packer a lot of the loading is shifted to the packer_compiled.vim so things get concentrated in that file so it's not as clear what plugins might actually be slowing you down. @wbthomason can correct me if I'm wrong on this point

y9c commented 3 years ago

Thank you @akinsho, 42ms is fine, but when using the same configurations on a remote server. This number will make difference.

image

akinsho commented 3 years ago

@yech1990 sorry I don't think my point was entirely clear. I think it would be easer to debug if this issue is specific to packer if you provide more information on top of just what the startup time is most importantly what startup time do you see with other plugin managers. If the startup time is xms across multiple package managers then the plugins are the problem. If you use try vim-plug for example and the startup time is half or reduced significantly then it could point more to something specific to packer

y9c commented 3 years ago

Thank you @akinsho. Sorry about that, I will test other plugin managers first.

wbthomason commented 3 years ago

@yech1990: I will say that I don't see anything unusual in your packer_compiled.vim, which leads me to suspect this is an issue with the particular plugins you're using/config code you run. I could definitely be wrong about this, but - as @akinsho says - we really need something to compare to (using a different plugin manager but the exact same set of plugins, lazy-loads, and configuration code) to determine if this is a packer problem or not.