mirror of https://github.com/LazyVim/starter
init
parent
914c60ae75
commit
85d5e41dfc
|
@ -6,3 +6,4 @@ debug
|
||||||
foo.*
|
foo.*
|
||||||
*.log
|
*.log
|
||||||
data
|
data
|
||||||
|
lazy-lock.json
|
||||||
|
|
|
@ -0,0 +1,9 @@
|
||||||
|
{
|
||||||
|
"extras": [
|
||||||
|
"lazyvim.plugins.extras.formatting.prettier"
|
||||||
|
],
|
||||||
|
"news": {
|
||||||
|
"NEWS.md": "2123"
|
||||||
|
},
|
||||||
|
"version": 3
|
||||||
|
}
|
|
@ -1,3 +1,289 @@
|
||||||
-- Keymaps are automatically loaded on the VeryLazy event
|
-- Keymaps are automatically loaded on the VeryLazy event
|
||||||
-- Default keymaps that are always set: https://github.com/LazyVim/LazyVim/blob/main/lua/lazyvim/config/keymaps.lua
|
-- Default keymaps that are always set: https://github.com/LazyVim/LazyVim/blob/main/lua/lazyvim/config/keymaps.lua
|
||||||
-- Add any additional keymaps here
|
-- Add any additional keymaps here
|
||||||
|
|
||||||
|
function SaveHttpResp()
|
||||||
|
-- 获取当前时间并格式化为时间戳
|
||||||
|
local timestamp = os.date("%Y%m%d%H%M%S")
|
||||||
|
|
||||||
|
-- 获取当前文件的目录路径
|
||||||
|
local current_path = vim.fn.expand('%:p:h')
|
||||||
|
|
||||||
|
-- 定位到 rest.nvim 的响应缓冲区
|
||||||
|
for _, bufnr in ipairs(vim.api.nvim_list_bufs()) do
|
||||||
|
if vim.bo[bufnr].filetype == 'httpResult' then
|
||||||
|
-- 设置保存文件的完整路径,包含时间戳
|
||||||
|
local filename = current_path .. "/log/response_" .. timestamp .. ".txt"
|
||||||
|
vim.api.nvim_buf_call(bufnr, function()
|
||||||
|
vim.cmd('w ' .. filename)
|
||||||
|
end)
|
||||||
|
print("Response saved to " .. filename)
|
||||||
|
break
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
vim.api.nvim_set_keymap('n', '<leader>rr',
|
||||||
|
":lua require('rest-nvim').run()<CR>",
|
||||||
|
{ noremap = true, silent = true })
|
||||||
|
|
||||||
|
vim.api.nvim_set_keymap('n', '<leader>rs',
|
||||||
|
":lua SaveHttpResp()<CR>",
|
||||||
|
{ noremap = true, silent = true })
|
||||||
|
|
||||||
|
|
||||||
|
function GetGoplsRootDir()
|
||||||
|
local clients = vim.lsp.get_active_clients()
|
||||||
|
for _, client in ipairs(clients) do
|
||||||
|
if client.name == "gopls" and client.config.root_dir then
|
||||||
|
return client.config.root_dir
|
||||||
|
end
|
||||||
|
end
|
||||||
|
return nil -- 返回 nil 如果没有找到 gopls 或者 gopls 没有根目录
|
||||||
|
end
|
||||||
|
|
||||||
|
function GoToPathAndLine(input)
|
||||||
|
if input == '' then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
local parts = vim.split(input, ':')
|
||||||
|
local file = parts[1]
|
||||||
|
local line = 1
|
||||||
|
if #parts > 1 then
|
||||||
|
line = parts[2]
|
||||||
|
end
|
||||||
|
-- 如果有工作路径,选第一个,否则选当前路径
|
||||||
|
local pwd = vim.fn.getcwd()
|
||||||
|
-- if vim.g.WorkspaceFolders and #vim.g.WorkspaceFolders > 0 then
|
||||||
|
-- pwd = vim.g.WorkspaceFolders[1]
|
||||||
|
-- end
|
||||||
|
local goplsRootDir = GetGoplsRootDir()
|
||||||
|
if goplsRootDir then
|
||||||
|
pwd = goplsRootDir
|
||||||
|
end
|
||||||
|
vim.cmd('edit +' .. line .. ' ' .. pwd .. '/' .. file)
|
||||||
|
end
|
||||||
|
|
||||||
|
vim.api.nvim_set_keymap('n', 'gto', ':lua GoToPathAndLine(vim.fn.input("Enter path and line: "))<CR>', { noremap = true })
|
||||||
|
|
||||||
|
function ExportExpandToClipboard()
|
||||||
|
local pwd = vim.fn.getcwd()
|
||||||
|
local goplsRootDir = GetGoplsRootDir()
|
||||||
|
if goplsRootDir then
|
||||||
|
pwd = goplsRootDir
|
||||||
|
end
|
||||||
|
local rf = vim.fn.expand('%:p') .. ':' .. vim.fn.line('.')
|
||||||
|
local expanded = string.sub(rf, string.len(pwd .. '/') + 1)
|
||||||
|
vim.fn.setreg('+', expanded)
|
||||||
|
print('Expanded path copied to clipboard: ' .. expanded)
|
||||||
|
end
|
||||||
|
|
||||||
|
vim.api.nvim_set_keymap('n', 'gcr', ':lua ExportExpandToClipboard()<CR>', { noremap = true })
|
||||||
|
|
||||||
|
|
||||||
|
local function check_spelling()
|
||||||
|
-- 保存当前文件
|
||||||
|
vim.cmd('write')
|
||||||
|
|
||||||
|
-- 获取当前文件的路径
|
||||||
|
local current_file = vim.fn.expand('%:p')
|
||||||
|
print('Spell check in: ' .. current_file)
|
||||||
|
|
||||||
|
-- 构建CSpell命令
|
||||||
|
local command = 'cspell --config /Users/onns/.onns/weiyun/code/config/vim/cspell.yaml -r "/Users/onns" ' ..
|
||||||
|
current_file
|
||||||
|
|
||||||
|
-- 在新的终端窗口中执行CSpell
|
||||||
|
vim.cmd('split | terminal ' .. command)
|
||||||
|
end
|
||||||
|
|
||||||
|
-- 将Lua函数绑定到Neovim命令
|
||||||
|
vim.api.nvim_create_user_command('SpellCheck', check_spelling, {})
|
||||||
|
|
||||||
|
vim.api.nvim_set_keymap('n', '<leader>pj',
|
||||||
|
[[:.s/\v(\w+) \= (\d+).*;/\1 = \2 [(gogoproto.jsontag) = '\1', json_name = '\1'];<CR>]],
|
||||||
|
{ noremap = true, silent = true })
|
||||||
|
vim.api.nvim_set_keymap('n', '<leader>pf',
|
||||||
|
[[:.s/\v(\w+) \= (\d+).*;/\1 = \2 [(gogoproto.moretags) = 'form:"\1"',(gogoproto.jsontag) = '\1', json_name = '\1'];<CR>]],
|
||||||
|
{ noremap = true, silent = true })
|
||||||
|
|
||||||
|
function TodoTelescopeWithCWD()
|
||||||
|
local pwd = vim.fn.getcwd()
|
||||||
|
local goplsRootDir = GetGoplsRootDir()
|
||||||
|
if goplsRootDir then
|
||||||
|
pwd = goplsRootDir
|
||||||
|
end
|
||||||
|
print('TodoTelescope at : ' .. pwd)
|
||||||
|
vim.cmd("TodoTelescope cwd=" .. pwd)
|
||||||
|
end
|
||||||
|
|
||||||
|
vim.api.nvim_set_keymap('n', '<leader>fw', ':lua TodoTelescopeWithCWD()<CR>', { noremap = true })
|
||||||
|
|
||||||
|
-- 待定列表
|
||||||
|
local targets = { "cmd", "CHANGELOG.md", "go.mod", ".git" }
|
||||||
|
|
||||||
|
-- 检查文件或目录是否存在
|
||||||
|
local function file_exists(path)
|
||||||
|
local ok, err, code = os.rename(path, path)
|
||||||
|
if not ok then
|
||||||
|
if code == 13 then
|
||||||
|
-- Permission denied, but it exists
|
||||||
|
return true
|
||||||
|
end
|
||||||
|
end
|
||||||
|
return ok, err
|
||||||
|
end
|
||||||
|
|
||||||
|
-- 从当前路径向上查找目标文件或目录
|
||||||
|
local function find_upwards()
|
||||||
|
-- 获取当前文件的路径
|
||||||
|
local path = vim.fn.expand('%:p:h')
|
||||||
|
|
||||||
|
while path and path ~= '' do
|
||||||
|
-- 检查目标文件或目录是否在当前路径
|
||||||
|
for _, target in pairs(targets) do
|
||||||
|
local fullpath = path .. '/' .. target
|
||||||
|
if file_exists(fullpath) then
|
||||||
|
return path
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
-- 移动到上一级目录
|
||||||
|
path = vim.fn.fnamemodify(path, ':h')
|
||||||
|
end
|
||||||
|
return nil
|
||||||
|
end
|
||||||
|
|
||||||
|
function TodoTelescopeWithProject()
|
||||||
|
local pwd = vim.fn.getcwd()
|
||||||
|
local projectDir = find_upwards()
|
||||||
|
if projectDir then
|
||||||
|
pwd = projectDir
|
||||||
|
end
|
||||||
|
print('TodoTelescope at : ' .. pwd)
|
||||||
|
vim.cmd("TodoTelescope cwd=" .. pwd)
|
||||||
|
end
|
||||||
|
|
||||||
|
vim.api.nvim_set_keymap('n', '<leader>fp', ':lua TodoTelescopeWithProject()<CR>', { noremap = true })
|
||||||
|
|
||||||
|
|
||||||
|
function InsertGitBranch()
|
||||||
|
local cwd = vim.fn.getcwd()
|
||||||
|
local git_branch_cmd = "git -C " .. cwd .. " branch --show-current"
|
||||||
|
local handle = io.popen(git_branch_cmd)
|
||||||
|
local git_branch = handle:read("*a")
|
||||||
|
handle:close()
|
||||||
|
git_branch = git_branch:gsub("%s+$", "")
|
||||||
|
if git_branch ~= "" then
|
||||||
|
-- vim.api.nvim_put({ git_branch }, "", false, true)
|
||||||
|
local line_num = vim.api.nvim_win_get_cursor(0)[1]
|
||||||
|
local todo_info = "// TODO: onns " .. git_branch .. " "
|
||||||
|
vim.api.nvim_buf_set_lines(0, line_num - 1, line_num - 1, false, { todo_info })
|
||||||
|
vim.api.nvim_command('startinsert')
|
||||||
|
vim.api.nvim_win_set_cursor(0, { line_num, #todo_info })
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
vim.api.nvim_set_keymap('n', '<leader>ig', ':lua InsertGitBranch()<CR>', { noremap = true })
|
||||||
|
|
||||||
|
|
||||||
|
local ts_utils = require 'nvim-treesitter.ts_utils'
|
||||||
|
|
||||||
|
function JumpToFunctionName()
|
||||||
|
-- vim.api.nvim_feedkeys(vim.api.nvim_replace_termcodes('[f', true, true, true), 'm', true)
|
||||||
|
local node = ts_utils.get_node_at_cursor()
|
||||||
|
|
||||||
|
while node do
|
||||||
|
-- print(node:type())
|
||||||
|
if node:type() == "function_declaration" or node:type() == "method_declaration" then
|
||||||
|
local child_count = node:child_count()
|
||||||
|
for i = 0, child_count - 1 do
|
||||||
|
local child = node:child(i)
|
||||||
|
-- print("Child " .. i .. ": " .. child:type())
|
||||||
|
if child then
|
||||||
|
if node:type() == "function_declaration" and child:type() == "identifier" then
|
||||||
|
local start_row, start_col, _, _ = child:range()
|
||||||
|
vim.api.nvim_win_set_cursor(0, { start_row + 1, start_col })
|
||||||
|
return
|
||||||
|
end
|
||||||
|
if node:type() == "method_declaration" and child:type() == "field_identifier" then
|
||||||
|
local start_row, start_col, _, _ = child:range()
|
||||||
|
vim.api.nvim_win_set_cursor(0, { start_row + 1, start_col })
|
||||||
|
return
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
node = node:parent()
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
vim.api.nvim_set_keymap('n', '[n', '<cmd>lua JumpToFunctionName()<CR>', { noremap = true, silent = true })
|
||||||
|
|
||||||
|
function GetGoImportPath()
|
||||||
|
local current_file = vim.api.nvim_buf_get_name(0)
|
||||||
|
local current_path = vim.fn.fnamemodify(current_file, ":h")
|
||||||
|
local go_mod_path = vim.fn.findfile("go.mod", current_path .. ";")
|
||||||
|
if go_mod_path == "" then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
local go_mod_content = vim.fn.readfile(go_mod_path)
|
||||||
|
local module_name = nil
|
||||||
|
for _, line in ipairs(go_mod_content) do
|
||||||
|
module_name = line:match("^module%s+(%S+)")
|
||||||
|
if module_name then
|
||||||
|
break
|
||||||
|
end
|
||||||
|
end
|
||||||
|
if not module_name then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
local module_root = vim.fn.fnamemodify(go_mod_path, ":h")
|
||||||
|
|
||||||
|
local package_path = string.sub(current_path, string.len(module_root .. '/') + 1)
|
||||||
|
|
||||||
|
local import_package_name = module_name .. "/" .. package_path
|
||||||
|
vim.fn.setreg('+', import_package_name)
|
||||||
|
print("Import path copied to clipboard: " .. import_package_name)
|
||||||
|
end
|
||||||
|
|
||||||
|
vim.api.nvim_set_keymap('n', 'gcp', ':lua GetGoImportPath()<CR>', { noremap = true })
|
||||||
|
|
||||||
|
vim.api.nvim_set_keymap('n', '<leader>fm',
|
||||||
|
":lua require('bookmarks').toggle_bookmarks()<CR>",
|
||||||
|
{ noremap = true, silent = true })
|
||||||
|
|
||||||
|
function LiveGrepUp(n)
|
||||||
|
-- 获取当前工作目录
|
||||||
|
local cwd = vim.fn.getcwd()
|
||||||
|
-- 用系统的路径分隔符分割路径
|
||||||
|
local path_sep = package.config:sub(1, 1)
|
||||||
|
local components = {}
|
||||||
|
|
||||||
|
-- 分割路径到各个组件
|
||||||
|
for component in string.gmatch(cwd, "[^" .. path_sep .. "]+") do
|
||||||
|
table.insert(components, component)
|
||||||
|
end
|
||||||
|
|
||||||
|
-- 计算向上n级的路径
|
||||||
|
local up_n = #components - n
|
||||||
|
if up_n < 1 then up_n = 1 end -- 确保不会超出根目录
|
||||||
|
local new_cwd = path_sep
|
||||||
|
for i = 1, up_n do
|
||||||
|
new_cwd = new_cwd .. components[i] .. (i < up_n and path_sep or "")
|
||||||
|
end
|
||||||
|
|
||||||
|
-- 使用新的目录执行Telescope live_grep
|
||||||
|
require('telescope.builtin').live_grep({ cwd = new_cwd })
|
||||||
|
end
|
||||||
|
|
||||||
|
vim.api.nvim_create_user_command(
|
||||||
|
'Lg',
|
||||||
|
function(opts)
|
||||||
|
local n = tonumber(opts.args) or 0
|
||||||
|
LiveGrepUp(n)
|
||||||
|
end,
|
||||||
|
{ nargs = 1 } -- 命令接受一个参数
|
||||||
|
)
|
||||||
|
|
|
@ -2,7 +2,8 @@ local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim"
|
||||||
if not vim.loop.fs_stat(lazypath) then
|
if not vim.loop.fs_stat(lazypath) then
|
||||||
-- bootstrap lazy.nvim
|
-- bootstrap lazy.nvim
|
||||||
-- stylua: ignore
|
-- stylua: ignore
|
||||||
vim.fn.system({ "git", "clone", "--filter=blob:none", "https://github.com/folke/lazy.nvim.git", "--branch=stable", lazypath })
|
vim.fn.system({ "git", "clone", "--filter=blob:none", "git@github.com:folke/lazy.nvim.git", "--branch=stable",
|
||||||
|
lazypath })
|
||||||
end
|
end
|
||||||
vim.opt.rtp:prepend(vim.env.LAZY or lazypath)
|
vim.opt.rtp:prepend(vim.env.LAZY or lazypath)
|
||||||
|
|
||||||
|
@ -26,7 +27,7 @@ require("lazy").setup({
|
||||||
version = false, -- always use the latest git commit
|
version = false, -- always use the latest git commit
|
||||||
-- version = "*", -- try installing the latest stable version for plugins that support semver
|
-- version = "*", -- try installing the latest stable version for plugins that support semver
|
||||||
},
|
},
|
||||||
install = { colorscheme = { "tokyonight", "habamax" } },
|
install = { colorscheme = { "onedark", "tokyonight", "habamax" } },
|
||||||
checker = { enabled = true }, -- automatically check for plugin updates
|
checker = { enabled = true }, -- automatically check for plugin updates
|
||||||
performance = {
|
performance = {
|
||||||
rtp = {
|
rtp = {
|
||||||
|
@ -44,3 +45,27 @@ require("lazy").setup({
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
|
|
||||||
|
require("gitsigns").setup({
|
||||||
|
current_line_blame = true, -- Toggle with `:Gitsigns toggle_current_line_blame`
|
||||||
|
current_line_blame_opts = {
|
||||||
|
virt_text = true,
|
||||||
|
virt_text_pos = "eol", -- 'eol' | 'overlay' | 'right_align'
|
||||||
|
delay = 100,
|
||||||
|
ignore_whitespace = false,
|
||||||
|
virt_text_priority = 100,
|
||||||
|
},
|
||||||
|
})
|
||||||
|
|
||||||
|
require("lspconfig").gopls.setup({
|
||||||
|
cmd = { "gopls", "-remote=unix;/tmp/gopls-daemon-socket" },
|
||||||
|
})
|
||||||
|
|
||||||
|
require("lspconfig").bufls.setup({})
|
||||||
|
|
||||||
|
-- https://github.com/hrsh7th/nvim-cmp/issues/1809
|
||||||
|
-- gopls 在返回提示词的时候随机选择,理论上应该默认选第一个
|
||||||
|
local cmp = require("cmp")
|
||||||
|
cmp.setup({
|
||||||
|
preselect = cmp.PreselectMode.None
|
||||||
|
})
|
||||||
|
|
|
@ -1,3 +1,39 @@
|
||||||
-- Options are automatically loaded before lazy.nvim startup
|
-- Options are automatically loaded before lazy.nvim startup
|
||||||
-- Default options that are always set: https://github.com/LazyVim/LazyVim/blob/main/lua/lazyvim/config/options.lua
|
-- Default options that are always set: https://github.com/LazyVim/LazyVim/blob/main/lua/lazyvim/config/options.lua
|
||||||
-- Add any additional options here
|
-- Add any additional options here
|
||||||
|
|
||||||
|
-- 拼写检查
|
||||||
|
-- vim.opt.spell = true
|
||||||
|
-- vim.opt.spelllang = "en_us"
|
||||||
|
|
||||||
|
vim.g.go_fmt_command = "gofmt"
|
||||||
|
vim.g.go_fillstruct_mode = "gopls"
|
||||||
|
vim.g.go_autodetect_gopath = 1
|
||||||
|
vim.g.go_highlight_types = 1
|
||||||
|
vim.g.go_highlight_fields = 1
|
||||||
|
vim.g.go_highlight_functions = 1
|
||||||
|
vim.g.go_highlight_function_calls = 1
|
||||||
|
vim.g.go_highlight_extra_types = 1
|
||||||
|
vim.g.go_highlight_generate_tags = 1
|
||||||
|
vim.g.go_gopls_enabled = 1
|
||||||
|
vim.g.go_imports_autosave = 0
|
||||||
|
vim.g.go_gopls_options = { "-remote=unix;/tmp/gopls-daemon-socket" }
|
||||||
|
vim.g.go_def_mode = "gopls"
|
||||||
|
vim.g.go_info_mode = "gopls"
|
||||||
|
vim.g.go_referrers_mode = "gopls"
|
||||||
|
|
||||||
|
-- vim.api.nvim_set_keymap('n', 'gd', ':GoDef<CR>', { noremap = true, silent = true })
|
||||||
|
-- vim.api.nvim_set_keymap('n', 'gr', ':GoReferrers', { noremap = true, silent = true })
|
||||||
|
-- vim.api.nvim_set_keymap('n', 'gm', ':GoImplements', { noremap = true, silent = true })
|
||||||
|
vim.api.nvim_set_keymap("n", "<C-g>", ":GoDeclsDir<CR>", { silent = true })
|
||||||
|
vim.api.nvim_set_keymap("i", "<C-g> <esc>", ":<C-u>GoDeclsDir<CR>", { silent = true })
|
||||||
|
-- vim.api.nvim_set_keymap('n', 'gd', "<Plug>(coc-definition)", { noremap = true, silent = true })
|
||||||
|
-- vim.api.nvim_set_keymap('n', 'gr', "<Plug>(coc-references)", { noremap = true, silent = true })
|
||||||
|
-- vim.api.nvim_set_keymap('n', 'gm', "<Plug>(coc-implementation)", { noremap = true, silent = true })
|
||||||
|
|
||||||
|
-- tagbar 打开后自动聚焦
|
||||||
|
vim.g.tagbar_autofocus = 1
|
||||||
|
|
||||||
|
vim.opt.wrap = true
|
||||||
|
|
||||||
|
vim.g.startify_files_number = 20
|
||||||
|
|
|
@ -0,0 +1,70 @@
|
||||||
|
return {
|
||||||
|
-- {
|
||||||
|
-- 'neoclide/coc.nvim',
|
||||||
|
-- branch = 'master',
|
||||||
|
-- build = "yarn install --frozen-lockfile",
|
||||||
|
-- },
|
||||||
|
{
|
||||||
|
'onns/bookmarks.nvim',
|
||||||
|
keys = {},
|
||||||
|
branch = 'main',
|
||||||
|
dependencies = { 'nvim-web-devicons' },
|
||||||
|
config = function()
|
||||||
|
require("bookmarks").setup()
|
||||||
|
require("telescope").load_extension("bookmarks")
|
||||||
|
end
|
||||||
|
},
|
||||||
|
-- {
|
||||||
|
-- "scrooloose/nerdtree",
|
||||||
|
-- keys = {
|
||||||
|
-- {
|
||||||
|
-- "<leader>e",
|
||||||
|
-- "<cmd>NERDTreeToggle<cr>",
|
||||||
|
-- desc = "NERDTreeToggle"
|
||||||
|
-- },
|
||||||
|
-- {
|
||||||
|
-- "<leader>v",
|
||||||
|
-- "<cmd>NERDTreeFind<cr>",
|
||||||
|
-- desc = "NERDTreeFind"
|
||||||
|
-- }
|
||||||
|
-- },
|
||||||
|
-- config = function()
|
||||||
|
-- require("neo-tree").setup()
|
||||||
|
-- end
|
||||||
|
-- },
|
||||||
|
{
|
||||||
|
"git@github.com:navarasu/onedark.nvim.git",
|
||||||
|
lazy = false,
|
||||||
|
config = function()
|
||||||
|
require('onedark').setup {
|
||||||
|
style = 'darker'
|
||||||
|
}
|
||||||
|
require('onedark').load()
|
||||||
|
end
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'git@github.com:fatih/vim-go.git'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"git@github.com:junegunn/fzf.git"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"git@github.com:majutsushi/tagbar.git",
|
||||||
|
keys = {
|
||||||
|
{
|
||||||
|
"<leader>t",
|
||||||
|
"<cmd>TagbarToggle<cr>",
|
||||||
|
desc = "TagbarToggle"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"git@github.com:mhinz/vim-startify.git", lazy = false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'git@github.com:wakatime/vim-wakatime.git'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'buoto/gotests-vim'
|
||||||
|
},
|
||||||
|
}
|
|
@ -0,0 +1,5 @@
|
||||||
|
return {
|
||||||
|
-- disable trouble
|
||||||
|
-- { "hrsh7th:/nvim-cmp", enabled = false },
|
||||||
|
-- { "hrsh7th/nvim-cmp", enabled = false },
|
||||||
|
}
|
|
@ -1,245 +0,0 @@
|
||||||
-- since this is just an example spec, don't actually load anything here and return an empty spec
|
|
||||||
-- stylua: ignore
|
|
||||||
if true then return {} end
|
|
||||||
|
|
||||||
-- every spec file under the "plugins" directory will be loaded automatically by lazy.nvim
|
|
||||||
--
|
|
||||||
-- In your plugin files, you can:
|
|
||||||
-- * add extra plugins
|
|
||||||
-- * disable/enabled LazyVim plugins
|
|
||||||
-- * override the configuration of LazyVim plugins
|
|
||||||
return {
|
|
||||||
-- add gruvbox
|
|
||||||
{ "ellisonleao/gruvbox.nvim" },
|
|
||||||
|
|
||||||
-- Configure LazyVim to load gruvbox
|
|
||||||
{
|
|
||||||
"LazyVim/LazyVim",
|
|
||||||
opts = {
|
|
||||||
colorscheme = "gruvbox",
|
|
||||||
},
|
|
||||||
},
|
|
||||||
|
|
||||||
-- change trouble config
|
|
||||||
{
|
|
||||||
"folke/trouble.nvim",
|
|
||||||
-- opts will be merged with the parent spec
|
|
||||||
opts = { use_diagnostic_signs = true },
|
|
||||||
},
|
|
||||||
|
|
||||||
-- disable trouble
|
|
||||||
{ "folke/trouble.nvim", enabled = false },
|
|
||||||
|
|
||||||
-- override nvim-cmp and add cmp-emoji
|
|
||||||
{
|
|
||||||
"hrsh7th/nvim-cmp",
|
|
||||||
dependencies = { "hrsh7th/cmp-emoji" },
|
|
||||||
---@param opts cmp.ConfigSchema
|
|
||||||
opts = function(_, opts)
|
|
||||||
table.insert(opts.sources, { name = "emoji" })
|
|
||||||
end,
|
|
||||||
},
|
|
||||||
|
|
||||||
-- change some telescope options and a keymap to browse plugin files
|
|
||||||
{
|
|
||||||
"nvim-telescope/telescope.nvim",
|
|
||||||
keys = {
|
|
||||||
-- add a keymap to browse plugin files
|
|
||||||
-- stylua: ignore
|
|
||||||
{
|
|
||||||
"<leader>fp",
|
|
||||||
function() require("telescope.builtin").find_files({ cwd = require("lazy.core.config").options.root }) end,
|
|
||||||
desc = "Find Plugin File",
|
|
||||||
},
|
|
||||||
},
|
|
||||||
-- change some options
|
|
||||||
opts = {
|
|
||||||
defaults = {
|
|
||||||
layout_strategy = "horizontal",
|
|
||||||
layout_config = { prompt_position = "top" },
|
|
||||||
sorting_strategy = "ascending",
|
|
||||||
winblend = 0,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
|
|
||||||
-- add pyright to lspconfig
|
|
||||||
{
|
|
||||||
"neovim/nvim-lspconfig",
|
|
||||||
---@class PluginLspOpts
|
|
||||||
opts = {
|
|
||||||
---@type lspconfig.options
|
|
||||||
servers = {
|
|
||||||
-- pyright will be automatically installed with mason and loaded with lspconfig
|
|
||||||
pyright = {},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
|
|
||||||
-- add tsserver and setup with typescript.nvim instead of lspconfig
|
|
||||||
{
|
|
||||||
"neovim/nvim-lspconfig",
|
|
||||||
dependencies = {
|
|
||||||
"jose-elias-alvarez/typescript.nvim",
|
|
||||||
init = function()
|
|
||||||
require("lazyvim.util").lsp.on_attach(function(_, buffer)
|
|
||||||
-- stylua: ignore
|
|
||||||
vim.keymap.set( "n", "<leader>co", "TypescriptOrganizeImports", { buffer = buffer, desc = "Organize Imports" })
|
|
||||||
vim.keymap.set("n", "<leader>cR", "TypescriptRenameFile", { desc = "Rename File", buffer = buffer })
|
|
||||||
end)
|
|
||||||
end,
|
|
||||||
},
|
|
||||||
---@class PluginLspOpts
|
|
||||||
opts = {
|
|
||||||
---@type lspconfig.options
|
|
||||||
servers = {
|
|
||||||
-- tsserver will be automatically installed with mason and loaded with lspconfig
|
|
||||||
tsserver = {},
|
|
||||||
},
|
|
||||||
-- you can do any additional lsp server setup here
|
|
||||||
-- return true if you don't want this server to be setup with lspconfig
|
|
||||||
---@type table<string, fun(server:string, opts:_.lspconfig.options):boolean?>
|
|
||||||
setup = {
|
|
||||||
-- example to setup with typescript.nvim
|
|
||||||
tsserver = function(_, opts)
|
|
||||||
require("typescript").setup({ server = opts })
|
|
||||||
return true
|
|
||||||
end,
|
|
||||||
-- Specify * to use this function as a fallback for any server
|
|
||||||
-- ["*"] = function(server, opts) end,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
|
|
||||||
-- for typescript, LazyVim also includes extra specs to properly setup lspconfig,
|
|
||||||
-- treesitter, mason and typescript.nvim. So instead of the above, you can use:
|
|
||||||
{ import = "lazyvim.plugins.extras.lang.typescript" },
|
|
||||||
|
|
||||||
-- add more treesitter parsers
|
|
||||||
{
|
|
||||||
"nvim-treesitter/nvim-treesitter",
|
|
||||||
opts = {
|
|
||||||
ensure_installed = {
|
|
||||||
"bash",
|
|
||||||
"html",
|
|
||||||
"javascript",
|
|
||||||
"json",
|
|
||||||
"lua",
|
|
||||||
"markdown",
|
|
||||||
"markdown_inline",
|
|
||||||
"python",
|
|
||||||
"query",
|
|
||||||
"regex",
|
|
||||||
"tsx",
|
|
||||||
"typescript",
|
|
||||||
"vim",
|
|
||||||
"yaml",
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
|
|
||||||
-- since `vim.tbl_deep_extend`, can only merge tables and not lists, the code above
|
|
||||||
-- would overwrite `ensure_installed` with the new value.
|
|
||||||
-- If you'd rather extend the default config, use the code below instead:
|
|
||||||
{
|
|
||||||
"nvim-treesitter/nvim-treesitter",
|
|
||||||
opts = function(_, opts)
|
|
||||||
-- add tsx and treesitter
|
|
||||||
vim.list_extend(opts.ensure_installed, {
|
|
||||||
"tsx",
|
|
||||||
"typescript",
|
|
||||||
})
|
|
||||||
end,
|
|
||||||
},
|
|
||||||
|
|
||||||
-- the opts function can also be used to change the default opts:
|
|
||||||
{
|
|
||||||
"nvim-lualine/lualine.nvim",
|
|
||||||
event = "VeryLazy",
|
|
||||||
opts = function(_, opts)
|
|
||||||
table.insert(opts.sections.lualine_x, "😄")
|
|
||||||
end,
|
|
||||||
},
|
|
||||||
|
|
||||||
-- or you can return new options to override all the defaults
|
|
||||||
{
|
|
||||||
"nvim-lualine/lualine.nvim",
|
|
||||||
event = "VeryLazy",
|
|
||||||
opts = function()
|
|
||||||
return {
|
|
||||||
--[[add your custom lualine config here]]
|
|
||||||
}
|
|
||||||
end,
|
|
||||||
},
|
|
||||||
|
|
||||||
-- use mini.starter instead of alpha
|
|
||||||
{ import = "lazyvim.plugins.extras.ui.mini-starter" },
|
|
||||||
|
|
||||||
-- add jsonls and schemastore packages, and setup treesitter for json, json5 and jsonc
|
|
||||||
{ import = "lazyvim.plugins.extras.lang.json" },
|
|
||||||
|
|
||||||
-- add any tools you want to have installed below
|
|
||||||
{
|
|
||||||
"williamboman/mason.nvim",
|
|
||||||
opts = {
|
|
||||||
ensure_installed = {
|
|
||||||
"stylua",
|
|
||||||
"shellcheck",
|
|
||||||
"shfmt",
|
|
||||||
"flake8",
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
|
|
||||||
-- Use <tab> for completion and snippets (supertab)
|
|
||||||
-- first: disable default <tab> and <s-tab> behavior in LuaSnip
|
|
||||||
{
|
|
||||||
"L3MON4D3/LuaSnip",
|
|
||||||
keys = function()
|
|
||||||
return {}
|
|
||||||
end,
|
|
||||||
},
|
|
||||||
-- then: setup supertab in cmp
|
|
||||||
{
|
|
||||||
"hrsh7th/nvim-cmp",
|
|
||||||
dependencies = {
|
|
||||||
"hrsh7th/cmp-emoji",
|
|
||||||
},
|
|
||||||
---@param opts cmp.ConfigSchema
|
|
||||||
opts = function(_, opts)
|
|
||||||
local has_words_before = function()
|
|
||||||
unpack = unpack or table.unpack
|
|
||||||
local line, col = unpack(vim.api.nvim_win_get_cursor(0))
|
|
||||||
return col ~= 0 and vim.api.nvim_buf_get_lines(0, line - 1, line, true)[1]:sub(col, col):match("%s") == nil
|
|
||||||
end
|
|
||||||
|
|
||||||
local luasnip = require("luasnip")
|
|
||||||
local cmp = require("cmp")
|
|
||||||
|
|
||||||
opts.mapping = vim.tbl_extend("force", opts.mapping, {
|
|
||||||
["<Tab>"] = cmp.mapping(function(fallback)
|
|
||||||
if cmp.visible() then
|
|
||||||
cmp.select_next_item()
|
|
||||||
-- You could replace the expand_or_jumpable() calls with expand_or_locally_jumpable()
|
|
||||||
-- this way you will only jump inside the snippet region
|
|
||||||
elseif luasnip.expand_or_jumpable() then
|
|
||||||
luasnip.expand_or_jump()
|
|
||||||
elseif has_words_before() then
|
|
||||||
cmp.complete()
|
|
||||||
else
|
|
||||||
fallback()
|
|
||||||
end
|
|
||||||
end, { "i", "s" }),
|
|
||||||
["<S-Tab>"] = cmp.mapping(function(fallback)
|
|
||||||
if cmp.visible() then
|
|
||||||
cmp.select_prev_item()
|
|
||||||
elseif luasnip.jumpable(-1) then
|
|
||||||
luasnip.jump(-1)
|
|
||||||
else
|
|
||||||
fallback()
|
|
||||||
end
|
|
||||||
end, { "i", "s" }),
|
|
||||||
})
|
|
||||||
end,
|
|
||||||
},
|
|
||||||
}
|
|
|
@ -0,0 +1,11 @@
|
||||||
|
return {
|
||||||
|
{
|
||||||
|
"stevearc/conform.nvim",
|
||||||
|
optional = true,
|
||||||
|
opts = {
|
||||||
|
formatters_by_ft = {
|
||||||
|
["sql"] = { "sql_formatter" },
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
|
@ -0,0 +1,43 @@
|
||||||
|
return {
|
||||||
|
"git@github.com:onns/rest.nvim.git",
|
||||||
|
dependencies = { { "git@github.com:nvim-lua/plenary.nvim.git" } },
|
||||||
|
config = function()
|
||||||
|
require("rest-nvim").setup({
|
||||||
|
-- Open request results in a horizontal split
|
||||||
|
result_split_horizontal = false,
|
||||||
|
-- Keep the http file buffer above|left when split horizontal|vertical
|
||||||
|
result_split_in_place = false,
|
||||||
|
-- Skip SSL verification, useful for unknown certificates
|
||||||
|
skip_ssl_verification = false,
|
||||||
|
-- Encode URL before making request
|
||||||
|
encode_url = true,
|
||||||
|
-- Highlight request on run
|
||||||
|
highlight = {
|
||||||
|
enabled = true,
|
||||||
|
timeout = 150,
|
||||||
|
},
|
||||||
|
result = {
|
||||||
|
-- toggle showing URL, HTTP info, headers at top the of result window
|
||||||
|
show_url = true,
|
||||||
|
-- show the generated curl command in case you want to launch
|
||||||
|
-- the same request via the terminal (can be verbose)
|
||||||
|
show_curl_command = true,
|
||||||
|
show_http_info = true,
|
||||||
|
show_headers = true,
|
||||||
|
-- executables or functions for formatting response body [optional]
|
||||||
|
-- set them to false if you want to disable them
|
||||||
|
formatters = {
|
||||||
|
json = "jq",
|
||||||
|
html = function(body)
|
||||||
|
return vim.fn.system({ "tidy", "-i", "-q", "-" }, body)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
},
|
||||||
|
-- Jump to request line on run
|
||||||
|
jump_to_request = false,
|
||||||
|
env_file = '.env',
|
||||||
|
custom_dynamic_variables = {},
|
||||||
|
yank_dry_run = true,
|
||||||
|
})
|
||||||
|
end
|
||||||
|
}
|
|
@ -0,0 +1,149 @@
|
||||||
|
return {
|
||||||
|
-- Treesitter is a new parser generator tool that we can
|
||||||
|
-- use in Neovim to power faster and more accurate
|
||||||
|
-- syntax highlighting.
|
||||||
|
{
|
||||||
|
"nvim-treesitter/nvim-treesitter",
|
||||||
|
version = false, -- last release is way too old and doesn't work on Windows
|
||||||
|
build = ":TSUpdate",
|
||||||
|
event = { "LazyFile", "VeryLazy" },
|
||||||
|
init = function(plugin)
|
||||||
|
-- PERF: add nvim-treesitter queries to the rtp and it's custom query predicates early
|
||||||
|
-- This is needed because a bunch of plugins no longer `require("nvim-treesitter")`, which
|
||||||
|
-- no longer trigger the **nvim-treesitter** module to be loaded in time.
|
||||||
|
-- Luckily, the only things that those plugins need are the custom queries, which we make available
|
||||||
|
-- during startup.
|
||||||
|
require("lazy.core.loader").add_to_rtp(plugin)
|
||||||
|
require("nvim-treesitter.query_predicates")
|
||||||
|
end,
|
||||||
|
dependencies = {
|
||||||
|
{
|
||||||
|
"nvim-treesitter/nvim-treesitter-textobjects",
|
||||||
|
config = function()
|
||||||
|
-- When in diff mode, we want to use the default
|
||||||
|
-- vim text objects c & C instead of the treesitter ones.
|
||||||
|
local move = require("nvim-treesitter.textobjects.move") ---@type table<string,fun(...)>
|
||||||
|
local configs = require("nvim-treesitter.configs")
|
||||||
|
for name, fn in pairs(move) do
|
||||||
|
if name:find("goto") == 1 then
|
||||||
|
move[name] = function(q, ...)
|
||||||
|
if vim.wo.diff then
|
||||||
|
local config = configs.get_module("textobjects.move")[name] ---@type table<string,string>
|
||||||
|
for key, query in pairs(config or {}) do
|
||||||
|
if q == query and key:find("[%]%[][cC]") then
|
||||||
|
vim.cmd("normal! " .. key)
|
||||||
|
return
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
return fn(q, ...)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
cmd = { "TSUpdateSync", "TSUpdate", "TSInstall" },
|
||||||
|
keys = {
|
||||||
|
{ "<c-space>", desc = "Increment selection" },
|
||||||
|
{ "<bs>", desc = "Decrement selection", mode = "x" },
|
||||||
|
},
|
||||||
|
---@type TSConfig
|
||||||
|
---@diagnostic disable-next-line: missing-fields
|
||||||
|
opts = {
|
||||||
|
highlight = { enable = true },
|
||||||
|
indent = { enable = true },
|
||||||
|
ensure_installed = {
|
||||||
|
"bash",
|
||||||
|
"c",
|
||||||
|
"diff",
|
||||||
|
"html",
|
||||||
|
"javascript",
|
||||||
|
"jsdoc",
|
||||||
|
"json",
|
||||||
|
"jsonc",
|
||||||
|
"lua",
|
||||||
|
"luadoc",
|
||||||
|
"luap",
|
||||||
|
"markdown",
|
||||||
|
"markdown_inline",
|
||||||
|
"python",
|
||||||
|
"query",
|
||||||
|
"regex",
|
||||||
|
"toml",
|
||||||
|
"tsx",
|
||||||
|
"typescript",
|
||||||
|
"vim",
|
||||||
|
"vimdoc",
|
||||||
|
"xml",
|
||||||
|
"yaml",
|
||||||
|
"go",
|
||||||
|
"http",
|
||||||
|
"sql",
|
||||||
|
},
|
||||||
|
incremental_selection = {
|
||||||
|
enable = true,
|
||||||
|
keymaps = {
|
||||||
|
init_selection = "<C-space>",
|
||||||
|
node_incremental = "<C-space>",
|
||||||
|
scope_incremental = false,
|
||||||
|
node_decremental = "<bs>",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
textobjects = {
|
||||||
|
move = {
|
||||||
|
enable = true,
|
||||||
|
goto_next_start = { ["]f"] = "@function.outer", ["]c"] = "@class.outer" },
|
||||||
|
goto_next_end = { ["]F"] = "@function.outer", ["]C"] = "@class.outer" },
|
||||||
|
goto_previous_start = { ["[f"] = "@function.outer", ["[c"] = "@class.outer" },
|
||||||
|
goto_previous_end = { ["[F"] = "@function.outer", ["[C"] = "@class.outer" },
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
---@param opts TSConfig
|
||||||
|
config = function(_, opts)
|
||||||
|
if type(opts.ensure_installed) == "table" then
|
||||||
|
---@type table<string, boolean>
|
||||||
|
local added = {}
|
||||||
|
opts.ensure_installed = vim.tbl_filter(function(lang)
|
||||||
|
if added[lang] then
|
||||||
|
return false
|
||||||
|
end
|
||||||
|
added[lang] = true
|
||||||
|
return true
|
||||||
|
end, opts.ensure_installed)
|
||||||
|
end
|
||||||
|
require("nvim-treesitter.configs").setup(opts)
|
||||||
|
end,
|
||||||
|
},
|
||||||
|
|
||||||
|
-- Show context of the current function
|
||||||
|
{
|
||||||
|
"nvim-treesitter/nvim-treesitter-context",
|
||||||
|
event = "LazyFile",
|
||||||
|
enabled = true,
|
||||||
|
opts = { mode = "cursor", max_lines = 3 },
|
||||||
|
keys = {
|
||||||
|
{
|
||||||
|
"<leader>ut",
|
||||||
|
function()
|
||||||
|
local tsc = require("treesitter-context")
|
||||||
|
tsc.toggle()
|
||||||
|
if LazyVim.inject.get_upvalue(tsc.toggle, "enabled") then
|
||||||
|
LazyVim.info("Enabled Treesitter Context", { title = "Option" })
|
||||||
|
else
|
||||||
|
LazyVim.warn("Disabled Treesitter Context", { title = "Option" })
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
desc = "Toggle Treesitter Context",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
|
||||||
|
-- Automatically add closing tags for HTML and JSX
|
||||||
|
{
|
||||||
|
"windwp/nvim-ts-autotag",
|
||||||
|
event = "LazyFile",
|
||||||
|
opts = {},
|
||||||
|
},
|
||||||
|
}
|
Loading…
Reference in New Issue