mirror of
https://github.com/jdhao/nvim-config.git
synced 2025-06-08 14:14:33 +02:00
1. For python and lua, rely on LSP for folding 2. show fold signs on the right of the number column
558 lines
13 KiB
Lua
558 lines
13 KiB
Lua
local utils = require("utils")
|
|
|
|
local plugin_dir = vim.fn.stdpath("data") .. "/lazy"
|
|
local lazypath = plugin_dir .. "/lazy.nvim"
|
|
|
|
if not vim.uv.fs_stat(lazypath) then
|
|
vim.fn.system {
|
|
"git",
|
|
"clone",
|
|
"--filter=blob:none",
|
|
"https://github.com/folke/lazy.nvim.git",
|
|
"--branch=stable", -- latest stable release
|
|
lazypath,
|
|
}
|
|
end
|
|
vim.opt.rtp:prepend(lazypath)
|
|
|
|
-- check if firenvim is active
|
|
local firenvim_not_active = function()
|
|
return not vim.g.started_by_firenvim
|
|
end
|
|
|
|
local plugin_specs = {
|
|
-- auto-completion engine
|
|
{
|
|
"hrsh7th/nvim-cmp",
|
|
-- event = 'InsertEnter',
|
|
event = "VeryLazy",
|
|
dependencies = {
|
|
"hrsh7th/cmp-nvim-lsp",
|
|
"onsails/lspkind-nvim",
|
|
"hrsh7th/cmp-path",
|
|
"hrsh7th/cmp-buffer",
|
|
"hrsh7th/cmp-omni",
|
|
"hrsh7th/cmp-emoji",
|
|
"quangnguyen30192/cmp-nvim-ultisnips",
|
|
},
|
|
config = function()
|
|
require("config.nvim-cmp")
|
|
end,
|
|
},
|
|
|
|
{
|
|
"neovim/nvim-lspconfig",
|
|
event = { "BufRead", "BufNewFile" },
|
|
config = function()
|
|
require("config.lsp")
|
|
end,
|
|
},
|
|
|
|
{
|
|
"nvim-treesitter/nvim-treesitter",
|
|
enabled = function()
|
|
if vim.g.is_mac then
|
|
return true
|
|
end
|
|
return false
|
|
end,
|
|
event = "VeryLazy",
|
|
build = ":TSUpdate",
|
|
config = function()
|
|
require("config.treesitter")
|
|
end,
|
|
},
|
|
|
|
-- Python indent (follows the PEP8 style)
|
|
{ "Vimjas/vim-python-pep8-indent", ft = { "python" } },
|
|
|
|
-- Python-related text object
|
|
{ "jeetsukumaran/vim-pythonsense", ft = { "python" } },
|
|
|
|
{ "machakann/vim-swap", event = "VeryLazy" },
|
|
|
|
-- IDE for Lisp
|
|
-- 'kovisoft/slimv'
|
|
{
|
|
"vlime/vlime",
|
|
enabled = function()
|
|
if utils.executable("sbcl") then
|
|
return true
|
|
end
|
|
return false
|
|
end,
|
|
config = function(plugin)
|
|
vim.opt.rtp:append(plugin.dir .. "/vim")
|
|
end,
|
|
ft = { "lisp" },
|
|
},
|
|
|
|
-- Super fast buffer jump
|
|
{
|
|
"smoka7/hop.nvim",
|
|
event = "VeryLazy",
|
|
config = function()
|
|
require("config.nvim_hop")
|
|
end,
|
|
},
|
|
|
|
-- Show match number and index for searching
|
|
{
|
|
"kevinhwang91/nvim-hlslens",
|
|
branch = "main",
|
|
keys = { "*", "#", "n", "N" },
|
|
config = function()
|
|
require("config.hlslens")
|
|
end,
|
|
},
|
|
{
|
|
"Yggdroot/LeaderF",
|
|
cmd = "Leaderf",
|
|
build = function()
|
|
local leaderf_path = plugin_dir .. "/LeaderF"
|
|
vim.opt.runtimepath:append(leaderf_path)
|
|
vim.cmd("runtime! plugin/leaderf.vim")
|
|
|
|
if not vim.g.is_win then
|
|
vim.cmd("LeaderfInstallCExtension")
|
|
end
|
|
end,
|
|
},
|
|
"nvim-lua/plenary.nvim",
|
|
{
|
|
"nvim-telescope/telescope.nvim",
|
|
cmd = "Telescope",
|
|
dependencies = {
|
|
"nvim-telescope/telescope-symbols.nvim",
|
|
},
|
|
},
|
|
{
|
|
"MeanderingProgrammer/markdown.nvim",
|
|
main = "render-markdown",
|
|
opts = {},
|
|
dependencies = { "nvim-treesitter/nvim-treesitter", "nvim-tree/nvim-web-devicons" },
|
|
},
|
|
-- A list of colorscheme plugin you may want to try. Find what suits you.
|
|
{ "navarasu/onedark.nvim", lazy = true },
|
|
{ "sainnhe/edge", lazy = true },
|
|
{ "sainnhe/sonokai", lazy = true },
|
|
{ "sainnhe/gruvbox-material", lazy = true },
|
|
{ "sainnhe/everforest", lazy = true },
|
|
{ "EdenEast/nightfox.nvim", lazy = true },
|
|
{ "catppuccin/nvim", name = "catppuccin", lazy = true },
|
|
{ "olimorris/onedarkpro.nvim", lazy = true },
|
|
{ "marko-cerovac/material.nvim", lazy = true },
|
|
{
|
|
"rockyzhang24/arctic.nvim",
|
|
dependencies = { "rktjmp/lush.nvim" },
|
|
name = "arctic",
|
|
branch = "v2",
|
|
},
|
|
|
|
{ "nvim-tree/nvim-web-devicons", event = "VeryLazy" },
|
|
|
|
{
|
|
"nvim-lualine/lualine.nvim",
|
|
event = "VeryLazy",
|
|
cond = firenvim_not_active,
|
|
config = function()
|
|
require("config.statusline")
|
|
end,
|
|
},
|
|
|
|
{
|
|
"akinsho/bufferline.nvim",
|
|
event = { "BufEnter" },
|
|
cond = firenvim_not_active,
|
|
config = function()
|
|
require("config.bufferline")
|
|
end,
|
|
},
|
|
|
|
-- fancy start screen
|
|
{
|
|
"nvimdev/dashboard-nvim",
|
|
cond = firenvim_not_active,
|
|
config = function()
|
|
require("config.dashboard-nvim")
|
|
end,
|
|
},
|
|
|
|
{
|
|
"lukas-reineke/indent-blankline.nvim",
|
|
event = "VeryLazy",
|
|
main = "ibl",
|
|
config = function()
|
|
require("config.indent-blankline")
|
|
end,
|
|
},
|
|
{
|
|
"luukvbaal/statuscol.nvim",
|
|
opts = {},
|
|
config = function()
|
|
local builtin = require("statuscol.builtin")
|
|
require("statuscol").setup {
|
|
relculright = true,
|
|
segments = {
|
|
{ text = { "%s" }, click = "v:lua.ScSa" },
|
|
{ text = { builtin.lnumfunc, " " }, click = "v:lua.ScLa" },
|
|
{ text = { builtin.foldfunc, " " }, condition = {true, builtin.not_empty}, click = "v:lua.ScFa" },
|
|
},
|
|
}
|
|
end,
|
|
},
|
|
{
|
|
"kevinhwang91/nvim-ufo",
|
|
dependencies = "kevinhwang91/promise-async",
|
|
event = "VeryLazy",
|
|
opts = {},
|
|
init = function()
|
|
vim.o.foldcolumn = "1" -- '0' is not bad
|
|
vim.o.foldlevel = 99 -- Using ufo provider need a large value, feel free to decrease the value
|
|
vim.o.foldlevelstart = 99
|
|
vim.o.foldenable = true
|
|
end,
|
|
config = function()
|
|
require("config.nvim_ufo")
|
|
end,
|
|
},
|
|
-- Highlight URLs inside vim
|
|
{ "itchyny/vim-highlighturl", event = "VeryLazy" },
|
|
|
|
-- notification plugin
|
|
{
|
|
"rcarriga/nvim-notify",
|
|
event = "VeryLazy",
|
|
config = function()
|
|
require("config.nvim-notify")
|
|
end,
|
|
},
|
|
|
|
-- For Windows and Mac, we can open an URL in the browser. For Linux, it may
|
|
-- not be possible since we maybe in a server which disables GUI.
|
|
{
|
|
"tyru/open-browser.vim",
|
|
enabled = function()
|
|
if vim.g.is_win or vim.g.is_mac then
|
|
return true
|
|
else
|
|
return false
|
|
end
|
|
end,
|
|
event = "VeryLazy",
|
|
},
|
|
|
|
-- Only install these plugins if ctags are installed on the system
|
|
-- show file tags in vim window
|
|
{
|
|
"liuchengxu/vista.vim",
|
|
enabled = function()
|
|
if utils.executable("ctags") then
|
|
return true
|
|
else
|
|
return false
|
|
end
|
|
end,
|
|
cmd = "Vista",
|
|
},
|
|
|
|
-- Snippet engine and snippet template
|
|
{ "SirVer/ultisnips", dependencies = {
|
|
"honza/vim-snippets",
|
|
}, event = "InsertEnter" },
|
|
|
|
-- Automatic insertion and deletion of a pair of characters
|
|
{
|
|
"windwp/nvim-autopairs",
|
|
event = "InsertEnter",
|
|
config = true,
|
|
},
|
|
|
|
-- Comment plugin
|
|
{ "tpope/vim-commentary", event = "VeryLazy" },
|
|
|
|
-- Multiple cursor plugin like Sublime Text?
|
|
-- 'mg979/vim-visual-multi'
|
|
|
|
-- Autosave files on certain events
|
|
{ "907th/vim-auto-save", event = "InsertEnter" },
|
|
|
|
-- Show undo history visually
|
|
{ "simnalamburt/vim-mundo", cmd = { "MundoToggle", "MundoShow" } },
|
|
|
|
-- better UI for some nvim actions
|
|
{ "stevearc/dressing.nvim" },
|
|
|
|
-- Manage your yank history
|
|
{
|
|
"gbprod/yanky.nvim",
|
|
cmd = { "YankyRingHistory" },
|
|
config = function()
|
|
require("config.yanky")
|
|
end,
|
|
},
|
|
|
|
-- Handy unix command inside Vim (Rename, Move etc.)
|
|
{ "tpope/vim-eunuch", cmd = { "Rename", "Delete" } },
|
|
|
|
-- Repeat vim motions
|
|
{ "tpope/vim-repeat", event = "VeryLazy" },
|
|
|
|
{ "nvim-zh/better-escape.vim", event = { "InsertEnter" } },
|
|
|
|
{
|
|
"lyokha/vim-xkbswitch",
|
|
enabled = function()
|
|
if vim.g.is_mac and utils.executable("xkbswitch") then
|
|
return true
|
|
end
|
|
return false
|
|
end,
|
|
event = { "InsertEnter" },
|
|
},
|
|
|
|
{
|
|
"Neur1n/neuims",
|
|
enabled = function()
|
|
if vim.g.is_win then
|
|
return true
|
|
end
|
|
return false
|
|
end,
|
|
event = { "InsertEnter" },
|
|
},
|
|
|
|
-- Auto format tools
|
|
{ "sbdchd/neoformat", cmd = { "Neoformat" } },
|
|
|
|
-- Git command inside vim
|
|
{
|
|
"tpope/vim-fugitive",
|
|
event = "User InGitRepo",
|
|
config = function()
|
|
require("config.fugitive")
|
|
end,
|
|
},
|
|
|
|
-- Better git log display
|
|
{ "rbong/vim-flog", cmd = { "Flog" } },
|
|
{ "akinsho/git-conflict.nvim", version = "*", config = true },
|
|
{
|
|
"ruifm/gitlinker.nvim",
|
|
event = "User InGitRepo",
|
|
config = function()
|
|
require("config.git-linker")
|
|
end,
|
|
},
|
|
|
|
-- Show git change (change, delete, add) signs in vim sign column
|
|
{
|
|
"lewis6991/gitsigns.nvim",
|
|
config = function()
|
|
require("config.gitsigns")
|
|
end,
|
|
},
|
|
|
|
-- Better git commit experience
|
|
{ "rhysd/committia.vim", lazy = true },
|
|
|
|
{
|
|
"sindrets/diffview.nvim",
|
|
},
|
|
|
|
{
|
|
"kevinhwang91/nvim-bqf",
|
|
ft = "qf",
|
|
config = function()
|
|
require("config.bqf")
|
|
end,
|
|
},
|
|
|
|
-- Another markdown plugin
|
|
{ "preservim/vim-markdown", ft = { "markdown" } },
|
|
|
|
-- Faster footnote generation
|
|
{ "vim-pandoc/vim-markdownfootnotes", ft = { "markdown" } },
|
|
|
|
-- Vim tabular plugin for manipulate tabular, required by markdown plugins
|
|
{ "godlygeek/tabular", cmd = { "Tabularize" } },
|
|
|
|
-- Markdown previewing (only for Mac and Windows)
|
|
{
|
|
"iamcco/markdown-preview.nvim",
|
|
enabled = function()
|
|
if vim.g.is_win or vim.g.is_mac then
|
|
return true
|
|
end
|
|
return false
|
|
end,
|
|
build = "cd app && npm install",
|
|
ft = { "markdown" },
|
|
},
|
|
|
|
{
|
|
"folke/zen-mode.nvim",
|
|
cmd = "ZenMode",
|
|
config = function()
|
|
require("config.zen-mode")
|
|
end,
|
|
},
|
|
|
|
{
|
|
"rhysd/vim-grammarous",
|
|
enabled = function()
|
|
if vim.g.is_mac then
|
|
return true
|
|
end
|
|
return false
|
|
end,
|
|
ft = { "markdown" },
|
|
},
|
|
|
|
{ "chrisbra/unicode.vim", event = "VeryLazy" },
|
|
|
|
-- Additional powerful text object for vim, this plugin should be studied
|
|
-- carefully to use its full power
|
|
{ "wellle/targets.vim", event = "VeryLazy" },
|
|
|
|
-- Plugin to manipulate character pairs quickly
|
|
{ "machakann/vim-sandwich", event = "VeryLazy" },
|
|
|
|
-- Add indent object for vim (useful for languages like Python)
|
|
{ "michaeljsmith/vim-indent-object", event = "VeryLazy" },
|
|
|
|
-- Only use these plugin on Windows and Mac and when LaTeX is installed
|
|
{
|
|
"lervag/vimtex",
|
|
enabled = function()
|
|
if utils.executable("latex") then
|
|
return true
|
|
end
|
|
return false
|
|
end,
|
|
ft = { "tex" },
|
|
},
|
|
|
|
-- Since tmux is only available on Linux and Mac, we only enable these plugins
|
|
-- for Linux and Mac
|
|
-- .tmux.conf syntax highlighting and setting check
|
|
{
|
|
"tmux-plugins/vim-tmux",
|
|
enabled = function()
|
|
if utils.executable("tmux") then
|
|
return true
|
|
end
|
|
return false
|
|
end,
|
|
ft = { "tmux" },
|
|
},
|
|
|
|
-- Modern matchit implementation
|
|
{ "andymass/vim-matchup", event = "BufRead" },
|
|
{ "tpope/vim-scriptease", cmd = { "Scriptnames", "Message", "Verbose" } },
|
|
|
|
-- Asynchronous command execution
|
|
{ "skywind3000/asyncrun.vim", lazy = true, cmd = { "AsyncRun" } },
|
|
{ "cespare/vim-toml", ft = { "toml" }, branch = "main" },
|
|
|
|
-- Edit text area in browser using nvim
|
|
{
|
|
"glacambre/firenvim",
|
|
enabled = function()
|
|
local result = vim.g.is_win or vim.g.is_mac
|
|
return result
|
|
end,
|
|
-- it seems that we can only call the firenvim function directly.
|
|
-- Using vim.fn or vim.cmd to call this function will fail.
|
|
build = function()
|
|
local firenvim_path = plugin_dir .. "/firenvim"
|
|
vim.opt.runtimepath:append(firenvim_path)
|
|
vim.cmd("runtime! firenvim.vim")
|
|
|
|
-- macOS will reset the PATH when firenvim starts a nvim process, causing the PATH variable to change unexpectedly.
|
|
-- Here we are trying to get the correct PATH and use it for firenvim.
|
|
-- See also https://github.com/glacambre/firenvim/blob/master/TROUBLESHOOTING.md#make-sure-firenvims-path-is-the-same-as-neovims
|
|
local path_env = vim.env.PATH
|
|
local prologue = string.format('export PATH="%s"', path_env)
|
|
-- local prologue = "echo"
|
|
local cmd_str = string.format(":call firenvim#install(0, '%s')", prologue)
|
|
vim.cmd(cmd_str)
|
|
end,
|
|
},
|
|
-- Debugger plugin
|
|
{
|
|
"sakhnik/nvim-gdb",
|
|
enabled = function()
|
|
if vim.g.is_win or vim.g.is_linux then
|
|
return true
|
|
end
|
|
return false
|
|
end,
|
|
build = { "bash install.sh" },
|
|
lazy = true,
|
|
},
|
|
|
|
-- Session management plugin
|
|
{ "tpope/vim-obsession", cmd = "Obsession" },
|
|
|
|
{
|
|
"ojroques/vim-oscyank",
|
|
enabled = function()
|
|
if vim.g.is_linux then
|
|
return true
|
|
end
|
|
return false
|
|
end,
|
|
cmd = { "OSCYank", "OSCYankReg" },
|
|
},
|
|
|
|
-- The missing auto-completion for cmdline!
|
|
{
|
|
"gelguy/wilder.nvim",
|
|
build = ":UpdateRemotePlugins",
|
|
},
|
|
|
|
-- showing keybindings
|
|
{
|
|
"folke/which-key.nvim",
|
|
event = "VeryLazy",
|
|
config = function()
|
|
require("config.which-key")
|
|
end,
|
|
},
|
|
|
|
-- show and trim trailing whitespaces
|
|
{ "jdhao/whitespace.nvim", event = "VeryLazy" },
|
|
|
|
-- file explorer
|
|
{
|
|
"nvim-tree/nvim-tree.lua",
|
|
keys = { "<space>s" },
|
|
dependencies = { "nvim-tree/nvim-web-devicons" },
|
|
config = function()
|
|
require("config.nvim-tree")
|
|
end,
|
|
},
|
|
|
|
{
|
|
"j-hui/fidget.nvim",
|
|
event = "VeryLazy",
|
|
tag = "legacy",
|
|
config = function()
|
|
require("config.fidget-nvim")
|
|
end,
|
|
},
|
|
}
|
|
|
|
require("lazy").setup {
|
|
spec = plugin_specs,
|
|
ui = {
|
|
border = "rounded",
|
|
title = "Plugin Manager",
|
|
title_pos = "center",
|
|
},
|
|
rocks = {
|
|
enabled = false,
|
|
},
|
|
}
|