coffebar / neovim-project

Neovim project plugin simplifies project management by maintaining project history and providing quick access to projects via Telescope or fzf-lua..
https://www.buymeacoffee.com/coffebar
Apache License 2.0
203 stars 10 forks source link

Takes 0.1s to load for 41 history items #35

Open xzbdmw opened 6 months ago

xzbdmw commented 6 months ago

image remove that function speed back

coffebar commented 6 months ago

Have no idea how to reproduce

xzbdmw commented 6 months ago

This is my file structure that takes 100ms

local projects = {
  "~/Project/lua/lua/fzf-lua",
  "~/Project/lua/fork/arrow.nvim",
  "~/Project/lua/color/nvim-cmp",
  "~/Project/lua/origin/nvim-cmp",
  "~/Documents/xzbdmw的副本",
  "~/Project/rust/2022-06-15-blogpost",
  "~/Project/rust/addr_test",
  "~/Project/rust/advent-of-code",
  "~/Project/rust/aoc-2018",
  "~/Project/rust/async-chat",
  "~/Project/rust/async_await",
  "~/Project/rust/bicask",
  "~/Project/rust/black-hat-rust",
  "~/Project/rust/blog-rs",
  "~/Project/rust/blog_os",
  "~/Project/rust/cell",
  "~/Project/rust/closure_study",
  "~/Project/rust/codecrafters-bittorrent-rust",
  "~/Project/rust/command-line-rust",
  "~/Project/rust/csv",
  "~/Project/rust/csv 2",
  "~/Project/rust/enum_learning",
  "~/Project/rust/eventful",
  "~/Project/rust/executor",
  "~/Project/rust/flurry",
  "~/Project/rust/git-toy",
  "~/Project/rust/gossip",
  "~/Project/rust/Hands-On-Concurrency-with-Rust",
  "~/Project/rust/inferno",
  "~/Project/rust/io_study",
  "~/Project/rust/iterators",
  "~/Project/rust/iterators_study",
  "~/Project/rust/jlox-rs",
  "~/Project/rust/lifetimekata",
  "~/Project/rust/lists",
  "~/Project/rust/lox",
  "~/Project/rust/lox-bytecode",
  "~/Project/rust/loxcraft",
  "~/Project/rust/markdown-oxide",
  "~/Project/rust/mini-redis",
  "~/Project/rust/myneovide",
  "~/Project/rust/neovide",
  "~/Project/rust/news-letter",
  "~/Project/rust/operation_overload",
  "~/Project/rust/panama",
  "~/Project/rust/pdf_writer",
  "~/Project/rust/pyt",
  "~/Project/rust/rcore-ch2",
  "~/Project/rust/rcore-ch3",
  "~/Project/rust/rcore-ch4",
  "~/Project/rust/rcore-ch5",
  "~/Project/rust/rCore-Tutorial-v3",
  "~/Project/rust/rust-magic-function-params",
  "~/Project/rust/rust-skia-variable-fonts-bug",
  "~/Project/rust/rusty_llama",
  "~/Project/rust/rust_atomics",
  "~/Project/rust/rust_leetcode",
  "~/Project/rust/serde-whatnow",
  "~/Project/rust/spwan-blocking",
  "~/Project/rust/stroke",
  "~/Project/rust/str_split",
  "~/Project/rust/swash_demo",
  "~/Project/rust/tcp",
  "~/Project/rust/trait_learning",
  "~/Project/rust/trust",
  "~/Project/rust/ttt",
  "~/Project/rust/utility_trait",
  "~/Project/rust/wechat-spider",
  "~/Project/rust/what-is-pin",
  "~/Project/rust/what-is-tower",
  "~/Project/rust/wordle-solver",
  "~/Project/rust/wx_spider_xzb",
  "~/Project/rust/xdiff",
  "~/Project/rust/xzbdmw",
  "~/Project/rust/zed",
  "~/Project/rust/zero-to-production",
  "~/Project/vim/practical-vim",
  "~/Project/lua/arrow.nvim",
  "~/Project/lua/autoload",
  "~/Project/lua/bookmarktest",
  "~/Project/lua/color",
  "~/Project/lua/context",
  "~/Project/lua/context1",
  "~/Project/lua/context2",
  "~/Project/lua/doc",
  "~/Project/lua/fork",
  "~/Project/lua/glance.nvim",
  "~/Project/lua/lua",
  "~/Project/lua/nvim-cmp",
  "~/Project/lua/nvim-treesitter-context",
  "~/Project/lua/origin",
  "~/Project/lua/plugin",
  "~/Project/lua/portal.nvim",
  "~/Project/lua/scripts",
  "~/Project/lua/tests",
  "~/Project/lua/tts",
  "~/Project/Typescript/my-vue-project",
  "~/Project/Typescript/type-challenges",
  "~/Project/Go/6.824_last_year",
  "~/Project/Go/6.824_myself_not_finish",
  "~/Project/Go/6.824_others",
  "~/Project/Go/bicask",
  "~/Project/Go/concurrency-in-go",
  "~/Project/Go/Effective-Concurrency-in-Go",
  "~/Project/Go/github",
  "~/Project/Go/gopl.io",
  "~/Project/Go/GoProgrammingFromBeginnerToMaster",
  "~/Project/Go/leetcode",
  "~/Project/Go/proglog",
  "~/Project/C/clox",
  "~/Project/C/craftinginterpreters",
  "~/Project/C/Hands-On-Network-Programming-with-C",
  "~/Project/C/Hands-on-System-Programming-with-Linux",
  "~/Project/C/linux",
  "~/Project/C/Linux-Kernel-Programming",
  "~/Project/C/neovim",
  "~/Project/C/os_code",
  "~/Project/C/pvtrace_test",
  "~/Project/C/redis_book_code",
  "~/Project/C/text_editor",
  "~/Project/C/tlpi-dist",
  "~/Project/C/tlpi_wrapper",
  "~/.local/share/nvim/lazy/aerial.nvim",
  "~/.local/share/nvim/lazy/arrow.nvim",
  "~/.local/share/nvim/lazy/bigfile.nvim",
  "~/.local/share/nvim/lazy/blame.nvim",
  "~/.local/share/nvim/lazy/bufferline.nvim",
  "~/.local/share/nvim/lazy/catppuccin",
  "~/.local/share/nvim/lazy/cmp-buffer",
  "~/.local/share/nvim/lazy/cmp-cmdline",
  "~/.local/share/nvim/lazy/cmp-nvim-lsp",
  "~/.local/share/nvim/lazy/cmp-path",
  "~/.local/share/nvim/lazy/cmp_luasnip",
  "~/.local/share/nvim/lazy/coc.nvim",
  "~/.local/share/nvim/lazy/code_runner.nvim",
  "~/.local/share/nvim/lazy/Comment.nvim",
  "~/.local/share/nvim/lazy/conform.nvim",
  "~/.local/share/nvim/lazy/copilot-cmp",
  "~/.local/share/nvim/lazy/copilot.lua",
  "~/.local/share/nvim/lazy/dashboard-nvim",
  "~/.local/share/nvim/lazy/diffview.nvim",
  "~/.local/share/nvim/lazy/dressing.nvim",
  "~/.local/share/nvim/lazy/dropbar.nvim",
  "~/.local/share/nvim/lazy/flash.nvim",
  "~/.local/share/nvim/lazy/flit.nvim",
  "~/.local/share/nvim/lazy/friendly-snippets",
  "~/.local/share/nvim/lazy/fzf-lua",
  "~/.local/share/nvim/lazy/gitsigns.nvim",
  "~/.local/share/nvim/lazy/glance.nvim",
  "~/.local/share/nvim/lazy/guess-indent.nvim",
  "~/.local/share/nvim/lazy/highlight-undo.nvim",
  "~/.local/share/nvim/lazy/hlchunk.nvim",
  "~/.local/share/nvim/lazy/hydra.nvim",
  "~/.local/share/nvim/lazy/inc-rename.nvim",
  "~/.local/share/nvim/lazy/incline.nvim",
  "~/.local/share/nvim/lazy/indent-blankline.nvim",
  "~/.local/share/nvim/lazy/lazy.nvim",
  "~/.local/share/nvim/lazy/LazyVim",
  "~/.local/share/nvim/lazy/leap.nvim",
  "~/.local/share/nvim/lazy/legendary.nvim",
  "~/.local/share/nvim/lazy/lspkind.nvim",
  "~/.local/share/nvim/lazy/lspsaga.nvim",
  "~/.local/share/nvim/lazy/lualine.nvim",
  "~/.local/share/nvim/lazy/LuaSnip",
  "~/.local/share/nvim/lazy/lush.nvim",
  "~/.local/share/nvim/lazy/mason-lspconfig.nvim",
  "~/.local/share/nvim/lazy/mason.nvim",
  "~/.local/share/nvim/lazy/mini.ai",
  "~/.local/share/nvim/lazy/mini.bufremove",
  "~/.local/share/nvim/lazy/mini.comment",
  "~/.local/share/nvim/lazy/mini.completion",
  "~/.local/share/nvim/lazy/mini.diff",
  "~/.local/share/nvim/lazy/mini.indentscope",
  "~/.local/share/nvim/lazy/mini.jump",
  "~/.local/share/nvim/lazy/mini.map",
  "~/.local/share/nvim/lazy/mini.nvim",
  "~/.local/share/nvim/lazy/mini.pairs",
  "~/.local/share/nvim/lazy/mini.surround",
  "~/.local/share/nvim/lazy/multicursors.nvim",
  "~/.local/share/nvim/lazy/neo-tree.nvim",
  "~/.local/share/nvim/lazy/neoconf.nvim",
  "~/.local/share/nvim/lazy/neodev.nvim",
  "~/.local/share/nvim/lazy/neovim-project",
  "~/.local/share/nvim/lazy/neovim-session-manager",
  "~/.local/share/nvim/lazy/nightfox.nvim",
  "~/.local/share/nvim/lazy/no-neck-pain.nvim",
  "~/.local/share/nvim/lazy/noice.nvim",
  "~/.local/share/nvim/lazy/nui-components.nvim",
  "~/.local/share/nvim/lazy/nui.nvim",
  "~/.local/share/nvim/lazy/nvim-autopairs",
  "~/.local/share/nvim/lazy/nvim-bufdel",
  "~/.local/share/nvim/lazy/nvim-cmp",
  "~/.local/share/nvim/lazy/nvim-colorizer.lua",
  "~/.local/share/nvim/lazy/nvim-fundo",
  "~/.local/share/nvim/lazy/nvim-lint",
  "~/.local/share/nvim/lazy/nvim-lspconfig",
  "~/.local/share/nvim/lazy/nvim-notify",
  "~/.local/share/nvim/lazy/nvim-spectre",
  "~/.local/share/nvim/lazy/nvim-spider",
  "~/.local/share/nvim/lazy/nvim-tree.lua",
  "~/.local/share/nvim/lazy/nvim-treesitter",
  "~/.local/share/nvim/lazy/nvim-treesitter-context",
  "~/.local/share/nvim/lazy/nvim-treesitter-textobjects",
  "~/.local/share/nvim/lazy/nvim-ts-autotag",
  "~/.local/share/nvim/lazy/nvim-ts-context-commentstring",
  "~/.local/share/nvim/lazy/nvim-ufo",
  "~/.local/share/nvim/lazy/nvim-web-devicons",
  "~/.local/share/nvim/lazy/oil.nvim",
  "~/.local/share/nvim/lazy/persistence.nvim",
  "~/.local/share/nvim/lazy/plenary.nvim",
  "~/.local/share/nvim/lazy/profile.nvim",
  "~/.local/share/nvim/lazy/project.nvim",
  "~/.local/share/nvim/lazy/promise-async",
  "~/.local/share/nvim/lazy/rainbow-delimiters.nvim",
  "~/.local/share/nvim/lazy/refactoring.nvim",
  "~/.local/share/nvim/lazy/rustaceanvim",
  "~/.local/share/nvim/lazy/satellite.nvim",
  "~/.local/share/nvim/lazy/scrollEOF.nvim",
  "~/.local/share/nvim/lazy/sentiment.nvim",
  "~/.local/share/nvim/lazy/smart-open.nvim",
  "~/.local/share/nvim/lazy/smart-splits.nvim",
  "~/.local/share/nvim/lazy/sqlite.lua",
  "~/.local/share/nvim/lazy/telescope-file-browser.nvim",
  "~/.local/share/nvim/lazy/telescope-fzf-native.nvim",
  "~/.local/share/nvim/lazy/telescope-undo.nvim",
  "~/.local/share/nvim/lazy/telescope-zf-native.nvim",
  "~/.local/share/nvim/lazy/telescope.nvim",
  "~/.local/share/nvim/lazy/todo-comments.nvim",
  "~/.local/share/nvim/lazy/toggleterm.nvim",
  "~/.local/share/nvim/lazy/tokyonight.nvim",
  "~/.local/share/nvim/lazy/trouble.nvim",
  "~/.local/share/nvim/lazy/undotree",
  "~/.local/share/nvim/lazy/venv-selector.nvim",
  "~/.local/share/nvim/lazy/vim-fugitive",
  "~/.local/share/nvim/lazy/vim-illuminate",
  "~/.local/share/nvim/lazy/vim-sneak",
  "~/.local/share/nvim/lazy/vim-startuptime",
  "~/.local/share/nvim/lazy/vim-visual-multi",
  "~/.local/share/nvim/lazy/which-key.nvim",
  "~/.local/share/nvim/lazy/yanky.nvim",
  "~/Project/java/effective-java-3e-source-code",
  "~/Project/java/effectivejava",
  "~/Project/java/GenerateAst",
  "~/Project/java/ggg",
  "~/Project/java/intellij-indent-rainbow",
  "~/Project/java/libSeat",
  "~/Project/java/libSeat的副本",
  "~/Project/java/Lox",
  "~/Project/java/scrm",
  "~/Project/java/suanfa",
  "~/Project/java/test",
  "~/Project/Typescript/my-vue-project",
  "~/Project/Typescript/type-challenges",
  "~/Project/Python/AudioClassification-Pytorch",
  "~/Project/Python/clrs",
  "~/Project/Python/example-code-2e",
  "~/Project/Python/handson-ml3",
  "~/Project/Python/nn-from-scratch",
  "~/Project/Python/pythonProject",
  "~/Project/Python/string_sum",
  "~/Project/Python/wechat_articles_spider",
  "~/Documents/xzbdmw的副本/000 Inbox",
  "~/Documents/xzbdmw的副本/001 Linux",
  "~/Documents/xzbdmw的副本/002 Algorithm",
  "~/Documents/xzbdmw的副本/003 Attachment",
  "~/Documents/xzbdmw的副本/004 Machine learning",
  "~/Documents/xzbdmw的副本/005 Distribution System",
  "~/Documents/xzbdmw的副本/006 DataBase",
  "~/Documents/xzbdmw的副本/007 Swift",
  "~/Documents/xzbdmw的副本/008 Rust",
  "~/.config/clash",
  "~/.config/coc",
  "~/.config/configstore",
  "~/.config/fish",
  "~/.config/flutter",
  "~/.config/fontforge",
  "~/.config/ghc",
  "~/.config/github-copilot",
  "~/.config/GNS3",
  "~/.config/helix",
  "~/.config/htop",
  "~/.config/iterm2",
  "~/.config/jgit",
  "~/.config/karabiner",
  "~/.config/kitty",
  "~/.config/lvim",
  "~/.config/neovide",
  "~/.config/nnn",
  "~/.config/node_modules",
  "~/.config/nvim",
  "~/.config/nvim-empty",
  "~/.config/nvim.back",
  "~/.config/nvim.backk",
  "~/.config/nvim.bak",
  "~/.config/nvimff",
  "~/.config/nvimlazy",
  "~/.config/nvimlazy2",
  "~/.config/nvimtest",
  "~/.config/nvim_focus",
  "~/.config/nvim_new",
  "~/.config/nvim_rust",
  "~/.config/omf",
  "~/.config/pgcli",
  "~/.config/raycast",
  "~/.config/rustfmt",
  "~/.config/wezterm",
  "~/.config/wireshark",
  "~/.config/zed",
}
local dirs = {
  "~/.local/share/nvim/lazy/oil.nvim",
  "~/.local/share/nvim/lazy/noice.nvim",
  "~/.local/share/nvim/lazy/neovim-session-manager",
  "~/Project/lua/fork/arrow.nvim",
  "~/.local/share/nvim/lazy/gitsigns.nvim",
  "~/.local/share/nvim/lazy/nvim-tree.lua",
  "~/Project/rust/neovide",
  "~/Project/rust/myneovide",
  "~/Project/rust/zed",
  "~/.local/share/nvim/lazy/nvim-treesitter",
  "~/Project/C/clox",
  "~/Project/C/neovim",
  "~/.local/share/nvim/lazy/LuaSnip",
  "~/.local/share/nvim/lazy/mini.completion",
  "~/Project/rust/bicask",
  "~/.local/share/nvim/lazy/cmp-nvim-lsp",
  "~/Project/lua/nvim-cmp",
  "~/Project/lua/origin/nvim-cmp",
  "~/Project/lua/color/nvim-cmp",
  "~/.local/share/nvim/lazy/incline.nvim",
  "~/.config/nvimlazy",
  "~/.local/share/nvim/lazy/lazy.nvim",
  "~/.local/share/nvim/lazy/LazyVim",
  "~/.local/share/nvim/lazy/mini.indentscope",
  "~/Project/lua/nvim-treesitter-context",
  "~/.local/share/nvim/lazy/nvim-cmp",
  "~/.local/share/nvim/lazy/telescope-zf-native.nvim",
  "~/.local/share/nvim/lazy/telescope-fzf-native.nvim",
  "~/.local/share/nvim/lazy/smart-open.nvim",
  "~/.local/share/nvim/lazy/hlchunk.nvim",
  "~/Project/lua/arrow.nvim",
  "~/.local/share/nvim/lazy/satellite.nvim",
  "~/.local/share/nvim/lazy/arrow.nvim",
  "~/Project/lua/glance.nvim",
  "~/Project/Go/leetcode",
  "~/.config/nvim_rust",
  "~/Project/rust/rust_leetcode",
  "~/.local/share/nvim/lazy/vim-illuminate",
  "~/.local/share/nvim/lazy/telescope.nvim",
  "~/.config/nvim",
  "~/.local/share/nvim/lazy/neovim-project",
}

vim.keymap.set("n", "<leader>sj", function()
  local start_time = vim.loop.hrtime()
  for i, dir in ipairs(dirs) do
    for _, path in ipairs(projects) do
      if M.resolve(path) == M.resolve(dir) then
        dirs[i] = path
        break
      end
    end
  end
  local duration = 0.000001 * (vim.loop.hrtime() - start_time)
  -- __AUTO_GENERATED_PRINT_VAR_START__
  print([==[function duration:]==], vim.inspect(duration)) -- __AUTO_GENERATED_PRINT_VAR_END__
end)

To reproduce it you can just set projects to lazy's folder something like

    opts = {
        filetype_autocmd_timeout = 0,
        last_session_on_startup = true,
        projects = { -- define project roots
            "/Users/xzb/.local/share/nvim/lazy/*",
        },

and add several plugin to history file My test is I have 100 plugin folder and 40 history file, it takes 60-80ms.

xzbdmw commented 6 months ago

vimscript is crazy here. But I don't find lua alternative

coffebar commented 6 months ago

It was 40ms with my projects, a have added "~/.local/share/nvim/lazy/*", and it is 20ms more, anyway I don't see any delay visually. I have added a little optimization, now it's around 25ms for me