initial: snapshot from ~/.config/nvim

This commit is contained in:
QQ 2026-06-10 16:59:38 +08:00
commit a296f56268
28 changed files with 1891 additions and 0 deletions

1
.gitignore vendored Normal file
View File

@ -0,0 +1 @@
lazy-lock.json

46
init.lua Normal file
View File

@ -0,0 +1,46 @@
G = require('G')
if not G.g.vscode then
local lazypath = G.fn.stdpath("data") .. "/lazy/lazy.nvim"
if not G.loop.fs_stat(lazypath) then
G.fn.system({
"git",
"clone",
"--filter=blob:none",
"https://github.com/folke/lazy.nvim.git",
"--branch=stable",
lazypath,
})
G.fn.system({
"git",
"config",
"--global",
"credential.helper",
"store",
})
end
G.opt.rtp:prepend(lazypath)
require("keymap")
if G.g.vscode then
require('vscode')
else
require("options")
local clone_prefix = G.use_ssh and "git@github.com:%s.git" or "https://github.com/%s.git"
require("lazy").setup(
require('plugs'), {
lockfile = G.fn.stdpath("data") .. "/lazy/lazy-lock.json",
git = {
url_format = clone_prefix,
}
}
)
end
end

59
lua/G.lua Normal file
View File

@ -0,0 +1,59 @@
local G = {}
G.use_ssh = false
G.g = vim.g
G.b = vim.b
G.o = vim.o
G.fn = vim.fn
G.api = vim.api
G.opt = vim.opt
G.loop = vim.loop
G.lb = vim.lsp.buf
G.dic = vim.diagnostic
G.cgp = vim.nvim_create_augroup
function G.map(maps)
for _, map in pairs(maps) do
if #map == 3 then
vim.keymap.set(map[1], map[2], map[3], { noremap = true })
elseif #map == 4 then
vim.keymap.set(map[1], map[2], map[3], map[4])
else
print("太多变量了")
end
--G.api.nvim_set_keymap(map[1], map[2], map[3], map[4])
end
end
function G.delmap(maps)
for _, map in pairs(maps) do
if #map == 2 then
vim.keymap.del(map[1], map[2], {})
elseif #map == 3 then
vim.keymap.del(map[1], map[2], map[3])
else
print("太多变量了")
end
end
end
function G.cmd(cmd)
G.api.nvim_command(cmd)
end
function G.exec(c)
G.api.nvim_exec(c)
end
function G.eval(c)
return G.api.nvim_eval(c)
end
function G.au(even, opts)
return G.api.nvim_create_autocmd(even, opts)
end
G.g.mapleader = ' '
return G

46
lua/keymap.lua Normal file
View File

@ -0,0 +1,46 @@
local opt = { noremap = true }
-- base
G.map({
{ 'n', '<leader>nh', ':nohlsearch<CR>', opt },
{ 'n', '<leader>rp', ':%s/', opt },
{ 'v', 'L', '$', opt },
{ 'v', 'H', '^', opt },
{ 'n', 'L', '$', opt },
{ 'n', 'H', '^', opt },
{ 'v', '>', '>gv', opt },
{ 'v', '<', '<gv', opt },
{ 'n', '>', '>>', opt },
{ 'n', '<', '<<', opt },
{ 'n', '?', ':set hlsearch<CR>?', opt },
{ 'n', '/', ':set hlsearch<CR>/', opt },
{ 'n', '<A-l>', ':tabn<CR>', opt },
{ 'n', '<A-h>', ':tabp<CR>', opt },
{ 'n', '<c-j>', '<c-w>j', opt },
{ 'n', '<c-h>', '<c-w>h', opt },
{ 'n', '<c-k>', '<c-w>k', opt },
{ 'n', '<c-l>', '<c-w>l', opt },
{ 'n', '<c-c>', ':q<CR>', opt },
{ 'n', '<c-S>', ':w !sudo tee %<CR>', opt },
{ 'n', '<c-q>', ':q!<CR>', opt },
{ 'v', '<cs-y>', '"+y', opt },
{ 'n', '<leader>y', 'ggyG', opt },
{ 'n', '<leader>p', 'ggpG', opt },
{ 'n', '<leader>v', 'ggVG', opt },
{ 'n', '<up>', ':res -5<CR>', opt },
{ 'n', '<down>', ':res +5<CR>', opt },
{ 'n', '<left>', ':vertical resize -5<CR>', opt },
{ 'n', '<right>', ':vertical resize +5<CR>', opt },
})

22
lua/lsp/basedpyright.lua Normal file
View File

@ -0,0 +1,22 @@
return {
-- capabilities = require("cmp_nvim_lsp").default_capabilities(),
settings = {
basedpyright = {
analysis = {
autoSearchPaths = true,
diagnosticMode = "openFilesOnly",
useLibraryCodeForTypes = true,
typeCheckingMode = "standard"
},
},
},
on_attach = function()
G.api.nvim_create_user_command('R', function()
G.cmd [[set splitbelow]]
G.cmd [[sp]]
G.cmd [[term python3 %]]
G.cmd [[resize 10]]
G.cmd [[startinsert]]
end, {})
end
}

11
lua/lsp/bash.lua Normal file
View File

@ -0,0 +1,11 @@
return{
on_attach = function()
G.api.nvim_create_user_command('R', function()
G.cmd [[set splitbelow]]
G.cmd [[sp]]
G.cmd [[term sh %]]
G.cmd [[resize 10]]
G.cmd [[startinsert]]
end, {})
end
}

11
lua/lsp/c.lua Normal file
View File

@ -0,0 +1,11 @@
return {
on_attach = function()
G.api.nvim_create_user_command('R', function()
G.cmd [[set splitbelow]]
G.cmd [[sp]]
G.cmd [[term g++ "%" -o "%<" && ./"%<" && rm "%<"]]
G.cmd [[resize 10]]
G.cmd [[startinsert]]
end, {})
end
}

18
lua/lsp/go.lua Normal file
View File

@ -0,0 +1,18 @@
return {
on_attach = function()
G.api.nvim_create_user_command('R', function()
G.cmd [[set splitbelow]]
G.cmd [[sp]]
G.cmd [[term go run %]]
G.cmd [[resize 10]]
G.cmd [[startinsert]]
end, {})
G.api.nvim_create_user_command('Rgin', function()
G.cmd [[set splitbelow]]
G.cmd [[sp]]
G.cmd [[term go run ./main.go]]
G.cmd [[resize 10]]
G.cmd [[startinsert]]
end, {})
end
}

4
lua/lsp/json.lua Normal file
View File

@ -0,0 +1,4 @@
return {
on_attach = function()
end
}

32
lua/lsp/lua.lua Normal file
View File

@ -0,0 +1,32 @@
local runtime_path = vim.split(package.path, ';')
table.insert(runtime_path, "lua/?.lua")
table.insert(runtime_path, "lua/?/init.lua")
return {
capabilities = require('cmp_nvim_lsp').default_capabilities(),
settings = {
Lua = {
runtime = {
-- Tell the language server which version of Lua you're using (most likely LuaJIT in the case of Neovim)
version = 'LuaJIT',
-- Setup your lua path
path = runtime_path,
},
diagnostics = {
globals = {'vim', 'G', 'yield', 'Candidate'},
},
workspace = {
-- Make the server aware of Neovim runtime files
library = vim.api.nvim_get_runtime_file("", true),
},
-- Do not send telemetry data containing a randomized but unique identifier
telemetry = {
enable = false
},
},
},
}

2
lua/lsp/markdown.lua Normal file
View File

@ -0,0 +1,2 @@
return {
}

11
lua/lsp/pyright.lua Normal file
View File

@ -0,0 +1,11 @@
return {
on_attach = function()
G.api.nvim_create_user_command('R', function()
G.cmd [[set splitbelow]]
G.cmd [[sp]]
G.cmd [[term python3 %]]
G.cmd [[resize 10]]
G.cmd [[startinsert]]
end, {})
end
}

12
lua/lsp/yaml.lua Normal file
View File

@ -0,0 +1,12 @@
return {
capabilities = require('cmp_nvim_lsp').default_capabilities(),
settings = {
yaml = {
schemas = {
["https://json.schemastore.org/github-workflow.json"] = "/.github/workflows/*",
["../path/relative/to/file.yml"] = "/.github/workflows/*",
["/path/from/root/of/project"] = "/.github/workflows/*",
},
},
}
}

91
lua/options.lua Normal file
View File

@ -0,0 +1,91 @@
--
G.opt.ttimeout = true
G.opt.ttimeoutlen = 100
-- 行号
G.opt.nu = true
G.opt.rnu = true
G.opt.scrolloff = 999
-- 自动保存
G.opt.autowrite = true
G.opt.autowriteall = true
-- tab键
G.opt.sw = 2
G.opt.ts = 2
G.opt.softtabstop = 2
G.opt.smarttab = true
G.opt.expandtab = true
G.opt.autoindent = true
-- 光标
G.opt.cursorline = true
-- 分屏
G.opt.splitright = true
G.opt.splitbelow = true
-- 搜索
G.opt.ignorecase = true
G.opt.incsearch = true
-- 不换行
G.opt.textwidth = 999
G.opt.wrap = false
-- 文件判断
G.cmd("filetype plugin indent on")
-- 取消换行注释
G.au({ "BufEnter" }, {
pattern = { "*" },
callback = function()
-- vim.opt.formatoptions = vim.opt.formatoptions - { "c", "r", "o" }
G.opt.formatoptions = G.opt.formatoptions
- "o" -- O and o, don't continue comments
+ "r" -- But do continue when pressing enter.
end,
})
G.au({ "InsertEnter" }, {
pattern = { "*" },
callback = function()
G.opt.hlsearch = false
end,
})
G.au({ "VimEnter", "BufEnter" }, {
pattern = { "*.code-snippets" },
callback = function()
G.cmd("setfiletype json")
end,
})
-- G.au({
-- {"CmdlineEnter"},
-- {
-- if index
-- }
-- })
local function isempty(s)
return s == nil or s == ""
end
local function use_if_defined(val, fallback)
return val ~= nil and val or fallback
end
local conda_prefix = os.getenv("CONDA_PREFIX")
if not isempty(conda_prefix) then
vim.g.python_host_prog = use_if_defined(vim.g.python_host_prog, conda_prefix .. "/bin/python")
vim.g.python3_host_prog = use_if_defined(vim.g.python3_host_prog, conda_prefix .. "/bin/python")
else
vim.g.python_host_prog = use_if_defined(vim.g.python_host_prog, "python")
vim.g.python3_host_prog = use_if_defined(vim.g.python3_host_prog, "python3")
end

32
lua/plugs.lua Normal file
View File

@ -0,0 +1,32 @@
return {
require('plugs.nvim-lspconfig'),
require('plugs.nvimtree'), -- nvimtree
require('plugs.theme'), -- theme
require("plugs.edit-plugs"),
require("plugs.dev"),
-- leetcode刷题
-- {
-- "kawre/leetcode.nvim",
-- build = ":TSUpdate html",
-- dependencies = {
-- "nvim-telescope/telescope.nvim",
-- "nvim-lua/plenary.nvim", -- telescope 所需
-- "MunifTanjim/nui.nvim",
-- -- 可选
-- "nvim-treesitter/nvim-treesitter",
-- "rcarriga/nvim-notify",
-- "nvim-tree/nvim-web-devicons",
-- },
-- opts = {
-- -- 配置放在这里
-- cn = {
-- enabled = true,
-- },
-- },
-- },
}

51
lua/plugs/dev.lua Normal file
View File

@ -0,0 +1,51 @@
return {
'lilydjwg/colorizer', -- 颜色识别
-- "rest-nvim/rest.nvim",
-- dependencies = { { "nvim-lua/plenary.nvim" } },
-- config = function()
-- require("rest-nvim").setup({
-- --- Get the same options from Packer setup
-- })
-- end
-- },
-- {
-- -- go开发
-- "ray-x/go.nvim",
-- dependencies = { -- optional packages
-- "ray-x/guihua.lua",
-- "neovim/nvim-lspconfig",
-- "nvim-treesitter/nvim-treesitter",
-- },
-- config = function()
-- require("go").setup()
-- end,
-- -- event = { "CmdlineEnter" },
-- ft = { "go", 'gomod' },
-- build = ':lua require("go.install").update_all_sync()' -- if you need to install/update all binaries
-- },
{
-- conda 环境
"kmontocam/nvim-conda",
dependencies = { "nvim-lua/plenary.nvim" },
},
{
-- 终端
'akinsho/toggleterm.nvim',
version = "*",
config = function()
require("toggleterm").setup {
-- size can be a number or function which is passed the current terminal
size = 10,
open_mapping = [[<c-t>]],
hide_numbers = true, -- hide the number column in toggleterm buffers
shade_filetypes = {},
shade_terminals = true,
shading_factor = 1, -- the degree by which to darken to terminal colour, default: 1 for dark backgrounds, 3 for light
start_in_insert = true,
insert_mappings = true, -- whether or not the open mapping applies in insert mode
persist_size = true,
direction = 'horizontal',
}
end
}
}

109
lua/plugs/edit-plugs.lua Normal file
View File

@ -0,0 +1,109 @@
return {
'vijaymarupudi/nvim-fzf', -- fzf
{
-- surround 和 wildfire 配合有神奇的效果
'tpope/vim-surround',
'gcmt/wildfire.vim',
-- 括号箭头
'yaocccc/nvim-hlchunk',
},
-- 多光标
{
'terryma/vim-multiple-cursors',
},
{
--格式整理
{
'junegunn/vim-easy-align',
config = function()
G.map({
{ "v", "ga", ":EasyAlign<CR>", { noremap = true } },
{ "v", "=", ":EasyAlign<CR>", { noremap = true } },
})
end
},
},
{
-- 注释插件
{
'tpope/vim-commentary',
}
},
{
'github/copilot.vim', -- github copilot
},
{
'windwp/nvim-autopairs',
event = "InsertEnter",
opts = {}, -- this is equalent to setup({}) function
config = function()
require('nvim-autopairs').setup({
disable_filetype = { "vim" },
})
end
},
-- {
-- 'kevinhwang91/nvim-ufo',
-- dependencies = {
-- 'kevinhwang91/promise-async'
-- },
-- config = function ()
-- require("ufo").setup()
-- end
-- },
{
-- hop
"phaazon/hop.nvim",
branch = "v2",
keys = {
"f", "F", "t", "T",
"<c-f>"
},
lazy = true,
config = function()
require("hop").setup { keys = 'asdfghjkl;' }
local hop = require('hop')
local directions = require('hop.hint').HintDirection
G.map({
{ "n", "<c-f>", ":HopChar2MW<CR>", { noremap = true } },
{ "n", "f",
function()
hop.hint_char1({
direction = directions.AFTER_CURSOR,
current_line_only = true
})
end, { noremap = true }
},
{ "n", "F",
function()
hop.hint_char1({
direction = directions.BEFORE_CURSOR,
current_line_only = true
})
end, { noremap = true }
},
{ "n", "t",
function()
hop.hint_char1({
direction = directions.AFTER_CURSOR,
current_line_only = true,
hint_offset = -1
})
end, { noremap = true }
},
{ "n", "T",
function()
hop.hint_char1({
direction = directions.BEFORE_CURSOR,
current_line_only = true,
hint_offset = -1
})
end, { noremap = true }
},
})
end
}
}

View File

@ -0,0 +1,352 @@
return {
{
-- lsp的config
"neovim/nvim-lspconfig",
dependencies = {
"folke/neodev.nvim",
},
config = function()
require 'neodev'.setup {}
-- 定义需要启用的服务器列表及其对应的配置
local servers = {
lua_ls = require('lsp.lua'),
clangd = require('lsp.c'),
bashls = require('lsp.bash'),
basedpyright = require('lsp.basedpyright'),
yamlls = require('lsp.yaml'),
gopls = require('lsp.go'),
jsonls = require('lsp.json'),
}
-- 使用 Neovim 0.11+ 的新 API 进行配置和启用
for server, config in pairs(servers) do
vim.lsp.config(server, config)
vim.lsp.enable(server)
end
-- require 'lspconfig'.lua_ls.setup(require('lsp.lua'))
-- require 'lspconfig'.clangd.setup(require('lsp.c'))
-- require 'lspconfig'.bashls.setup(require('lsp.bash'))
-- require 'lspconfig'.basedpyright.setup(require('lsp.basedpyright'))
-- require 'lspconfig'.yamlls.setup(require('lsp.yaml'))
-- require 'lspconfig'.gopls.setup(require('lsp.go'))
-- require 'lspconfig'.jsonls.setup(require('lsp.json'))
G.map({
{ 'n', '<leader>rn', '<cmd>lua vim.lsp.buf.rename()<CR>' },
{ 'n', 'gd', '<cmd>lua vim.lsp.buf.definition()<CR>' },
{ 'n', 'gh', '<cmd>lua vim.lsp.buf.hover()<CR>' },
{ 'n', 'gD', '<cmd>lua vim.lsp.buf.declaration()<CR>' },
{ 'n', 'gi', '<cmd>lua vim.lsp.buf.implementation()<CR>' },
{ 'n', 'gr', '<cmd>lua vim.lsp.buf.references()<CR>' },
{ 'n', '<cs-i>', '<cmd>lua vim.lsp.buf.format()<CR>' },
})
end
},
{
-- lsp
"williamboman/mason-lspconfig.nvim",
dependencies = {
"williamboman/mason.nvim", -- lsp 下载器
},
config = function()
require "mason".setup {
ui = {
icons = {
package_installed = "",
package_pending = "",
package_uninstalled = ""
}
}
}
require("mason-lspconfig").setup({
ensure_installed = {
"bashls",
-- "basedpyright",
"lua_ls",
"jsonls",
"yamlls",
}
})
end
},
{ --
'simrat39/symbols-outline.nvim',
config = function()
local opts = {
highlight_hovered_item = true,
show_guides = true,
auto_preview = false,
position = 'right',
relative_width = true,
width = 25,
auto_close = false,
show_numbers = false,
show_relative_numbers = false,
show_symbol_details = true,
preview_bg_highlight = 'Pmenu',
autofold_depth = nil,
auto_unfold_hover = true,
fold_markers = { '', '' },
wrap = false,
keymaps = { -- These keymaps can be a string or a table for multiple keys
close = { "<Esc>", "q" },
goto_location = "<Cr>",
focus_location = "h",
hover_symbol = "<C-space>",
toggle_preview = "K",
rename_symbol = "r",
code_actions = "a",
fold = "o",
unfold = "l",
fold_all = "W",
unfold_all = "E",
fold_reset = "R",
},
lsp_blacklist = {},
symbol_blacklist = {},
symbols = {
File = { icon = "", hl = "@text.uri" },
Module = { icon = "", hl = "@namespace" },
Namespace = { icon = "", hl = "@namespace" },
Package = { icon = "", hl = "@namespace" },
Class = { icon = "𝓒", hl = "@type" },
Method = { icon = "ƒ", hl = "@method" },
Property = { icon = "", hl = "@method" },
Field = { icon = "", hl = "@field" },
Constructor = { icon = "", hl = "@constructor" },
Enum = { icon = "", hl = "@type" },
Interface = { icon = "", hl = "@type" },
Function = { icon = "", hl = "@function" },
Variable = { icon = "", hl = "@constant" },
Constant = { icon = "", hl = "@constant" },
String = { icon = "𝓐", hl = "@string" },
Number = { icon = "#", hl = "@number" },
Boolean = { icon = "", hl = "@boolean" },
Array = { icon = "", hl = "@constant" },
Object = { icon = "⦿", hl = "@type" },
Key = { icon = "🔐", hl = "@type" },
Null = { icon = "NULL", hl = "@type" },
EnumMember = { icon = "", hl = "@field" },
Struct = { icon = "𝓢", hl = "@type" },
Event = { icon = "🗲", hl = "@type" },
Operator = { icon = "+", hl = "@operator" },
TypeParameter = { icon = "𝙏", hl = "@parameter" },
Component = { icon = "", hl = "@function" },
Fragment = { icon = "", hl = "@constant" },
},
}
require("symbols-outline").setup(opts)
G.map({
{ "n", "<cs-o>", "<cmd>SymbolsOutline<cr>", { noremap = true } },
})
end
},
{
-- lsp补全
{
"hrsh7th/nvim-cmp",
dependencies = {
'hrsh7th/cmp-nvim-lsp', -- { name = 'nvim_lua' }
'hrsh7th/cmp-buffer', -- { name = 'buffer' },
'hrsh7th/cmp-path', -- { name = 'path' }
'hrsh7th/cmp-cmdline', -- { name = 'cmdline' }
{
'hrsh7th/vim-vsnip',
config = function()
G.g.vsnip_snippet_dir = G.fn.stdpath("config") .. "/snippets"
end
},
'hrsh7th/cmp-vsnip',
'onsails/lspkind-nvim',
},
config = function()
local has_words_before = function()
unpack = unpack or table.unpack
local line, col = unpack(G.api.nvim_win_get_cursor(0))
return col ~= 0 and G.api.nvim_buf_get_lines(0, line - 1, line, true)[1]:sub(col, col):match('%s') == nil
end
local feedkey = function(key, mode)
vim.api.nvim_feedkeys(vim.api.nvim_replace_termcodes(key, true, true, true), mode, true)
end
local cmp = require('cmp')
local cmp_opt = {
snippet = {
expand = function(args)
vim.fn["vsnip#anonymous"](args.body) -- For `vsnip` users.
end,
},
sources = cmp.config.sources({
{ name = 'nvim_lsp' },
{ name = 'vsnip' },
},
{ name = 'buffer' },
{ name = 'path' }
),
mapping = cmp.mapping.preset.insert({
["<CR>"] = cmp.mapping({
i = cmp.mapping.confirm({ behavior = cmp.ConfirmBehavior.Replace, select = true }),
c = function(fallback)
if cmp.visible() then
cmp.confirm({ behavior = cmp.ConfirmBehavior.Replace, select = true })
else
fallback()
end
end,
}),
["<Tab>"] = cmp.mapping(function(fallback)
if cmp.visible() then
cmp.select_next_item()
elseif vim.fn["vsnip#available"](1) == 1 then
feedkey("<Plug>(vsnip-expand-or-jump)", "")
elseif has_words_before() then
cmp.complete()
else
fallback()
end
end, { "i", "s" }),
["<S-Tab>"] = cmp.mapping(function()
if cmp.visible() then
cmp.select_prev_item()
elseif vim.fn["vsnip#jumpable"](-1) == 1 then
feedkey("<Plug>(vsnip-jump-prev)", "")
end
end, { "i", "s" }),
}),
window = {
completion = {
winhighlight = "Normal:Pmenu,FloatBorder:Pmenu,Search:None",
col_offset = -3,
side_padding = 0,
border = "rounded",
scrollbar = false,
},
documentation = {
winhighlight = "Normal:Pmenu,FloatBorder:Pmenu,Search:None",
border = "rounded",
scrollbar = false,
},
},
formatting = {
fields = { "kind", "abbr", "menu" },
format = function(entry, vim_item)
local kind = require("lspkind").cmp_format({ mode = "symbol_text", maxwidth = 50, })(entry, vim_item)
local strings = vim.split(kind.kind, "%s", { trimempty = true })
kind.kind = " " .. (strings[1] or "") .. " "
kind.menu = " (" .. (strings[2] or "") .. ")"
return kind
end,
},
}
require('cmp').setup(cmp_opt)
end,
},
{
-- 语法高亮 --
'nvim-treesitter/nvim-treesitter',
config = function()
local treesitter_opt = {
ensure_installed = {
-- "c",
-- "cpp",
-- "python",
-- "java",
-- "lua",
-- "bash",
-- "vimdoc",
},
indent = { enable = true },
ignore_install = {
"txt",
"go"
},
sync_install = false,
auto_install = true,
highlight = {
enable = true,
disable = function(_, buf)
local max_filesize = 100 * 1024 -- 100 KB
local ok, stats = pcall(G.loop.fs_stat, G.api.nvim_buf_get_name(buf))
if ok and stats and stats.size > max_filesize then
return true
end
end,
additional_vim_regex_highlighting = false,
},
parsers = {
html = {
install_info = {
url = "https://github.com/ikatyang/tree-sitter-vue",
files = { "src/parser.c" },
branch = "main"
}
}
}
}
require 'nvim-treesitter'.setup(treesitter_opt)
require 'nvim-treesitter.install'.prefer_git = true
if G.use_ssh then
local parsers = require 'nvim-treesitter.parsers'.get_parser_configs()
for _, p in pairs(parsers) do
p.install_info.url = p.install_info.url:gsub("https://github/com/", "git@github.com:")
end
end
end
},
},
{
'fgheng/winbar.nvim',
config = function()
require('winbar').setup({
enabled = true, -- 是否启动winbar
-- show_file_path = true, -- 是否显示文件路径
show_symbols = true, -- 是否显示函数标签
-- 颜色配置,为空,将使用默认配色
colors = {
path = '#aaffff', -- 路径的颜色,比如#ababab
file_name = '#bbbbff', -- 文件名称的颜色,比如#acacac
symbols = '#aaffaa', -- 函数颜色
},
-- 图标配置
icons = {
seperator = '>', -- 路径分割符号
editor_state = '',
lock_icon = '',
},
-- 关闭winbar的窗口
exclude_filetype = {
'help',
'startify',
'dashboard',
'packer',
'neogitstatus',
'NvimTree',
'Trouble',
'alpha',
'lir',
'Outline',
'spectre_panel',
'toggleterm',
'qf',
}
})
end
},
}

40
lua/plugs/nvimtree.lua Normal file
View File

@ -0,0 +1,40 @@
return {
"nvim-tree/nvim-tree.lua",
dependencies = {
'kyazdani42/nvim-web-devicons'
},
keys = {
"<c-e>"
},
config = function()
require 'nvim-web-devicons'.setup {}
require 'nvim-tree'.setup {
sort_by = "case_sensitive",
view = {
width = 30,
},
filters = { dotfiles = true, },
git = { enable = true },
on_attach = function(bufnr)
local api = require 'nvim-tree.api'
api.config.mappings.default_on_attach(bufnr)
-- override a default
G.map({
{ 'n', 'v', api.node.open.vertical, { buffer = bufnr } },
{ 'n', 's', api.node.open.horizontal, { buffer = bufnr } },
})
G.delmap({
{ 'n', '<C-e>', { buffer = bufnr } },
{ 'n', '<C-v>', { buffer = bufnr } },
{ 'n', '<C-x>', { buffer = bufnr } },
})
end
}
G.map({
{ "n", "<C-e>", ":NvimTreeToggle<CR>", { noremap = true } },
})
end
}

82
lua/plugs/theme.lua Normal file
View File

@ -0,0 +1,82 @@
return {
{
'folke/tokyonight.nvim',
config = function()
G.cmd("colorscheme tokyonight") -- 主题
G.opt.background = 'dark' -- 背景
end
},
{
-- line插件
'kdheepak/tabline.nvim',
'nvim-lualine/lualine.nvim',
config = function()
require('lualine').setup {
options = {
icons_enabled = true,
theme = 'auto',
component_separators = { left = '', right = '' },
section_separators = { left = '', right = '' },
disabled_filetypes = {
statusline = {},
winbar = {},
},
ignore_focus = {},
always_divide_middle = true,
globalstatus = false,
refresh = {
statusline = 1000,
tabline = 1000,
winbar = 1000,
}
},
sections = {
lualine_a = { 'mode' },
lualine_b = { 'branch', 'diff', 'diagnostics' },
lualine_c = { {
'filename',
file_status = false,
path = 1
} },
lualine_x = { 'encoding', 'fileformat', 'filetype' },
lualine_y = { 'progress' },
lualine_z = {}
},
inactive_sections = {
lualine_a = {},
lualine_b = {},
lualine_c = { 'filename' },
lualine_x = { 'location' },
lualine_y = {},
lualine_z = {}
},
tabline = {},
winbar = {},
inactive_winbar = {},
extensions = {}
}
require('tabline').setup {
-- Defaults configuration options
enable = true,
options = {
-- If lualine is installed tabline will use separators configured in lualine by default.
-- These options can be used to override those settings.
section_separators = { ' ', ' ' },
component_separators = { '', '' },
max_bufferline_percent = 66, -- set to nil by default, and it uses vim.o.columns * 2/3
show_tabs_always = false, -- this shows tabs only when there are more than one tab or if the first tab is named
show_devicons = true, -- this shows devicons in buffer section
show_bufnr = false, -- this appends [bufnr] to buffer section,
show_filename_only = true, -- shows base filename only instead of relative path in filename
modified_icon = "+ ", -- change the default modified icon
modified_italic = false, -- set to true by default; this determines whether the filename turns italic if modified
show_tabs_only = false, -- this shows only tabs instead of tabs + buffers
},
G.cmd [[
set guioptions-=e " Use showtabline in gui vim
set sessionoptions+=tabpages,globals " store tabpages and globals in session
]]
}
end,
},
}

4
lua/vsc.lua Normal file
View File

@ -0,0 +1,4 @@
require 'lazy'.setup({
require('plugs.edit-plugs'),
-- 'vijaymarupudi/nvim-fzf', -- fzf
})

26
snippets/c.json Normal file
View File

@ -0,0 +1,26 @@
{
"for": {
"prefix": "for",
"body": [
" for(int $1 = $2; $1 < $3; $1+=$4) {",
" $5",
" }"
]
},
"for1": {
"prefix": "for1",
"body": [
" for(int $1 = $2; $1 < $3; $1++) {",
" $4",
" }"
]
},
"fori": {
"prefix": "fori",
"body": [
" for(int i = $1; i < $2; i++) {",
" $3",
" }"
]
}
}

View File

@ -0,0 +1,303 @@
{
"Class_Array_tree": {
"prefix": "Class_Array_tree",
"body": [
"",
"template <class T>",
"class Array_tree {",
" public:",
" Array_tree() {}",
" Array_tree(int n) { this->n = n, tree = vector<T>(n + 1); }",
" void add(int id, T key) {",
" for (int i = id; i <= n; i += lowbit(i)) tree[i] += key;",
" }",
"",
" T get_sum(int id) {",
" T sum = 0;",
" for (int i = id; i; i -= lowbit(i)) sum += tree[i];",
" return sum;",
" }",
"",
" T get_sum(int l, int r) { return get_sum(r) - get_sum(l - 1); }",
"",
" private:",
" int n;",
" vector<T> tree;",
" int lowbit(int x) { return x & -x; }",
"};",
""
]
},
"Class_SGM_Tree": {
"prefix": "Class_SGM_Tree",
"body": [
"",
"class SGM_Tree {",
" public:",
" class point {",
" public:",
" ll sum, maxi, mini;",
" };",
"",
" vll a, lazy;",
" int n;",
" ll sum, maxi, mini;",
" vector<point> tree;",
"",
" SGM_Tree() {}",
" SGM_Tree(int n, vi v) {",
" // a下标默认从1开始,只需开n个点不需要n + 1",
" this->n = n;",
" lazy = vll(n * 4 + 1);",
" a.push_back(0);",
" for (int i = 1; i <= n; i++) a.push_back(v[i]);",
" tree = vector<point>(4 * n + 1), build(1, n, 1);",
" }",
" SGM_Tree(int n, vll v) {",
" // a下标默认从1开始,只需开n个点不需要n + 1",
" this->n = n;",
" lazy = vll(n * 4 + 1);",
" a.push_back(0);",
" for (int i = 1; i <= n; i++) a.push_back(v[i]);",
" tree = vector<point>(4 * n + 1), build(1, n, 1);",
" }",
" SGM_Tree(int n, int* v) {",
" // a下标默认从1开始,只需开n个点不需要n + 1",
" this->n = n;",
" lazy = vll(n * 4 + 1);",
" a.push_back(0);",
" for (int i = 1; i <= n; i++) a.push_back(v[i]);",
" tree = vector<point>(4 * n + 1), build(1, n, 1);",
" }",
"",
" void push_up(int k) {",
" int l = k * 2, r = k * 2 + 1;",
" tree[k].sum = tree[l].sum + tree[r].sum;",
" tree[k].maxi = max(tree[l].maxi, tree[r].maxi);",
" tree[k].mini = min(tree[l].mini, tree[r].mini);",
" }",
"",
" void push_down(int l, int r, int k) {",
" if (lazy[k]) {",
" int mid = l + r >> 1;",
" lazy[k * 2] += lazy[k];",
" lazy[k * 2 + 1] += lazy[k];",
" tree[k * 2].sum += lazy[k] * (mid - l + 1);",
" tree[k * 2 + 1].sum += lazy[k] * (r - mid);",
" tree[k * 2].maxi += lazy[k];",
" tree[k * 2 + 1].maxi += lazy[k];",
" tree[k * 2].mini += lazy[k];",
" tree[k * 2 + 1].mini += lazy[k];",
" lazy[k] = 0;",
" }",
" }",
"",
" void get_updata(int l, int r, int k, ll value) {",
" tree[k].sum += value * (r - l + 1);",
" tree[k].maxi += value;",
" tree[k].mini += value;",
" lazy[k] += value;",
" }",
"",
" void get(int k) {",
" sum += tree[k].sum;",
" maxi = max(maxi, tree[k].maxi);",
" mini = min(mini, tree[k].mini);",
" }",
"",
" void build(int l, int r, int k) {",
" if (l == r) {",
" tree[k].maxi = tree[k].mini = tree[k].sum = a[l];",
" return;",
" }",
" int mid = l + r >> 1;",
" build(l, mid, k * 2);",
" build(mid + 1, r, k * 2 + 1);",
" push_up(k);",
" }",
"",
" void updata(int l, int r, int L, int R, int k, ll value) {",
" if (L <= l && r <= R) {",
" get_updata(l, r, k, value);",
" return;",
" }",
" push_down(l, r, k);",
" int mid = l + r >> 1;",
" if (L <= mid) updata(l, mid, L, R, k * 2, value);",
" if (R > mid) updata(mid + 1, r, L, R, k * 2 + 1, value);",
" push_up(k);",
" }",
"",
" void query(int l, int r, int L, int R, int k) {",
" if (L <= l && r <= R) {",
" get(k);",
" return;",
" }",
" push_down(l, r, k);",
" int mid = l + r >> 1;",
" if (mid >= L) query(l, mid, L, R, 2 * k);",
" if (mid < R) query(mid + 1, r, L, R, 2 * k + 1);",
" }",
"",
" ll get_sum(int L, int R) {",
" sum = 0;",
" query(1, n, L, R, 1);",
" return sum;",
" }",
"",
" ll get_max(int L, int R) {",
" maxi = -inf;",
" query(1, n, L, R, 1);",
" return maxi;",
" }",
"",
" ll get_min(int L, int R) {",
" mini = inf;",
" query(1, n, L, R, 1);",
" return mini;",
" }",
"};",
""
]
},
"Class_Dsu": {
"prefix": "Class_Dsu",
"body": [
"",
"class Dsu {",
" public:",
"",
" vll fa, num;",
"",
" Dsu(int n) { fa = vll(n + 1), num = vll(n + 1); }",
" int find(int x) {",
" if (!fa[x]) return x;",
" return fa[x] = find(fa[x]);",
" }",
"",
" bool Dunion(int p, int q) {",
" int v = find(p), u = find(q);",
" if (v == u) return 0;",
" fa[u] = v;",
" num[v] += num[u];",
" num[u] = num[v];",
" return 1;",
" }",
" ",
"};",
"",
"ll num(int x) { return num[find(x)]; }",
""
]
},
"class_Stmap": {
"prefix": "Class_StMap",
"body": [
"",
"class st_map {",
" public:",
" st_map() {}",
" st_map(vll v) {",
" this->n = v.size(), this->a = v;",
" this->st = vector<array<ll, 31>>(n + 1);",
" st_init();",
" }",
" int query(int l, int r) {",
" int len = r - l + 1;",
" int k = log(len) / log(2);",
" return max(st[l][k], st[r - (1 << k) + 1][k]);",
" }",
"",
" private:",
" int n;",
" vll a;",
" vector<array<ll, 31>> st;",
" void st_init() {",
" for (int j = 0; j <= 17; j++) {",
" for (int i = 1; i + (1 << j) - 1 <= n; i++) {",
" if (j == 0)",
" st[i][j] = a[i];",
" else",
" st[i][j] = max(st[i][j - 1], st[i + (1 << j - 1)][j - 1]);",
" }",
" }",
" }",
"};",
""
]
},
"Class_HJT_tree": {
"prefix": "Class_HJT_tree",
"body": [
"",
"template <class T>",
"class HJT_tree {",
" //处理数据默认下标从1开始",
" public:",
" //构造函数",
" HJT_tree() {}",
" HJT_tree(vector<T> v) {",
" base = v, this->n = base.size() - 1;",
" tree = vector<node>(n * 32), root.push_back(build(1, n));",
" }",
"",
" void updata(int v, int x, T value) {",
" //插入函数(版本,修改位置,修改值)",
" root.push_back(insert(root[v], 1, n, x, value));",
" }",
"",
" T query(int v, int x) {",
" //查询函数(版本,查询位置)",
" return get_se(root[v], 1, n, x, x);",
" }",
"",
" T query(int v, int l, int r) {",
" //查询函数(版本,查询区间)",
" return get_se(root[v], 1, n, l, r);",
" }",
"",
" private:",
" vi root;",
" vector<T> base;",
" int n, idx = 0;",
" struct node {",
" int l, r;",
" T data;",
" };",
" vector<node> tree;",
" void pushup(int q) { tree[q].data = op(tree[q].l, tree[q].r); }",
" T op(int l, int r) { return max(tree[l].data, tree[r].data); }",
" T e() { return -inf; }",
" int build(int l, int r) {",
" int now = ++idx, mid = l + r >> 1;",
" if (l != r)",
" tree[now].l = build(l, mid), tree[now].r = build(mid + 1, r), pushup(now);",
" return now;",
" }",
" int insert(int old, int l, int r, int x, int value) {",
" int now = ++idx, mid = l + r >> 1;",
" tree[now] = tree[old];",
" if (l == r)",
" tree[now].data = value;",
" else {",
" if (x <= mid)",
" tree[now].l = insert(tree[old].l, l, mid, x, value);",
" else",
" tree[now].r = insert(tree[old].r, mid + 1, r, x, value);",
" pushup(now);",
" }",
" return now;",
" }",
" T get_se(int v, int l, int r, int L, int R) {",
" if (L <= l && r <= R) return tree[v].data;",
" ll mid = l + r >> 1;",
" T res = e();",
" if (L <= mid) res = max(res, get_se(tree[v].l, l, mid, L, R));",
" if (R > mid) res = max(res, get_se(tree[v].r, mid + 1, r, L, R));",
" return res;",
" }",
"};",
""
]
}
}

View File

@ -0,0 +1,359 @@
{
"Graph": {
"prefix": "Class_Graph",
"body": [
"",
"template <class T>",
"class Graph {",
" public:",
" struct edge {",
" int next, to;",
" T w;",
" };",
" int n;",
" vector<vector<T>> maps;",
" vector<T> dis;",
" vector<edge> e;",
" vi head, bj;",
" Graph() {}",
"",
" Graph(int n) {",
" this->n = n, this->m = n * (n - 1);",
" head = vi(n + 1, -1), e = vector<edge>(m * 2 + 1);",
" }",
"",
" Graph(int n, int m) {",
" this->n = n, this->m = m, head = vi(n + 1, -1), e = vector<edge>(m * 2 + 1);",
" }",
"",
" void add(int u, int v, T w) {",
" e[cnt].to = v, e[cnt].next = head[u], e[cnt].w = w, head[u] = cnt++;",
" }",
"",
" void add(int u, int v) {",
" e[cnt].to = v, e[cnt].next = head[u], head[u] = cnt++;",
" }",
"",
" private:",
" int m, cnt = 0;",
"};",
"#define e g.e",
"#define head g.head",
"#define maps g.maps",
"#define add g.add",
""
]
},
"Class_Graph_Dijkstra": {
"prefix": "Class_Graph_Dijkstra",
"body": [
"",
"#define dis g.dis",
"#define bj g.bj",
"ll dijkstra(Graph<ll> g, int st, int en) {",
" dis = vll(g.n + 1, inf),",
" bj = vi(g.n + 1);",
" priority_queue<pll, vector<pll>, greater<pll>> q;",
" dis[st] = 0;",
" q.push({0, st});",
" while (!q.empty()) {",
" int u = q.top().y;",
" q.pop();",
" if (bj[u]) continue;",
" bj[u] = 1;",
" for (int i = head[u]; ~i; i = e[i].next) {",
" int v = e[i].to;",
" if (dis[v] > dis[u] + e[i].w) {",
" dis[v] = dis[u] + e[i].w;",
" q.push({dis[v], v});",
" }",
" }",
" }",
" if (dis[en] != inf)",
" return dis[en];",
" else",
" return -1;",
"}",
""
]
},
"Class_Graph_SPFA": {
"prefix": "Class_Graph_SPFA",
"body": [
"",
"ll spfa(Graph<ll> g, int st, int en) {",
" vll bj(g.n + 1), dis(g.n + 1, inf), num(g.n + 1);",
" queue<int> q;",
" dis[st] = 0;",
" bj[st] = 1;",
" q.push(st);",
" while (q.size()) {",
" int u = q.front();",
" if (!bj[u]) continue;",
" if (num[u] > g.n + 1) return inf;//判断是否产生负环",
" bj[u] = 0, num[u]++;",
" for (int i = head[u]; ~i; i = e[i].next) {",
" int w = e[i].w, v = e[i].to;",
" if (dis[v] > dis[u] + w) {",
" dis[v] = dis[u] + w;",
" if (!bj[v]) q.push(v);",
" }",
" }",
" }",
" if(dis[en] == inf) return -1;",
" return dis[en];",
"}",
""
]
},
"Class_Graph_Kurskal": {
"prefix": "Class_Graph_Kurskal",
"body": [
"",
"ll kruskal(Graph<ll> g, Dsu d) {",
" ll res = 0, cnt = 0;",
" sort(e.begin(), e.end());",
" for (auto i : e) {",
" int u = i.u, v = i.v, w = i.w;",
" int q = d.find(i.u), p = d.find(i.v);",
" if (d.Dunion(q, p)) cnt++, res += w;",
" if (cnt == n - 1) break;",
" }",
" return res;",
"}",
""
]
},
"Class_Graph_Prim": {
"prefix": "Class_Graph_Prim",
"body": []
},
"Class_Graph_TreeDiam": {
"prefix": "Class_Graph_TreeDiam",
"description": "树的直径",
"body": [
"ll TreeDiam(Graph<ll> g) {",
" vll dis1(n + 1), dis2(n + 1), p(n + 1), up(n + 1);",
" function<ll(ll, ll)> dfs = [&](ll u, ll fa) {",
" for (int i = head[u]; ~i; i = e[i].next) {",
" int v = e[i].to, w = 1;",
" if (v == fa) continue;",
" ll x = dfs(v, u) + 1;",
" if (x >= dis1[u])",
" dis2[u] = dis1[u], dis1[u] = x, p[u] = v;",
" else if (x >= dis2[u])",
" dis2[u] = x;",
" }",
" return dis1[u];",
" };",
" function<void(ll, ll)> dfs0 = [&](ll u, ll fa) {",
" for (int i = head[u]; ~i; i = e[i].next) {",
" int v = e[i].to, w = 1;",
" if (v == fa) continue;",
" if (p[u] == v)",
" up[v] = max(dis2[u], up[u]) + w;",
" else",
" up[v] = max(dis1[u], up[u]) + w;",
" dfs0(v, u);",
" }",
" };",
" dfs(1, -1), dfs0(1, -1);",
" ll ans = -1;",
" for (int i = 1; i <= n + m; i++) {",
" if (dis1[i] == dis2[i] && dis1[i] == 0)",
" ans = max(ans, up[i]);",
" else",
" ans = max(ans, max(up[i], dis1[i]));",
" }",
" return ans;",
"}"
]
},
"Class_Graph_SCC": {
"prefix": "Class_Graph_SCC",
"body": [
"",
"class SCC {",
" public:",
" stack<ll> stk;",
" int timestamp = 0, scc_cnt = 0, n, m;",
" vll dfn, low, in_stk, Size, id;",
" Graph<ll> g;",
"",
" SCC() {}",
"",
" SCC(Graph<ll> g) {",
" this->n = g.n, this->m = g.m, this->g = g;",
" dfn = vll(n + 1, 0);",
" low = vll(n + 1, 0);",
" in_stk = vll(n + 1, 0);",
" Size = vll(n + 1, 0);",
" id = vll(n + 1, 0);",
" for (int i = 1; i <= n; i++)",
" if (!dfn[i]) tarjan(i);",
" }",
"",
" void tarjan(int u) {",
" dfn[u] = low[u] = ++timestamp;",
" stk.push(u), in_stk[u] = 1;",
" for (int i = head[u]; ~i; i = e[i].next) {",
" int v = e[i].to;",
" if (!dfn[v]) {",
" tarjan(v);",
" low[u] = min(low[u], low[v]);",
" } else if (in_stk[v])",
" low[u] = min(low[u], dfn[v]);",
" }",
" if (low[u] == dfn[u]) {",
" ++scc_cnt;",
" int v;",
" do {",
" v = stk.top();",
" stk.pop();",
" in_stk[v] = 0;",
" id[v] = scc_cnt;",
" Size[scc_cnt]++;",
" } while (v != u);",
" }",
" return;",
" }",
"};",
""
]
},
"Class_Graph_Euler": {
"prefix": "Class_Graph_Euler",
"body": [
"",
"vll din, dout;",
"",
"class Euler {",
" public:",
" int n, m;",
" Graph<ll> g;",
" vector<bool> used;",
" vll path;",
" Euler() {}",
" Euler(Graph<ll> g) {",
" this->n = g.n, this->m = g.m, this->g = g;",
" used = vector<bool>(n + 1);",
" }",
"",
" void dfs_u(int u) {",
" //无向图",
" for (long long &i = head[u]; i; i = e[i].next) {",
" long long j = i & 1 ? i + 1 : i - 1;",
" if(used[i]) {",
" i = e[i].next;",
" continue;",
" }",
" used[j] = used[i] = true;",
" int t = i / 2 + 1;",
" dfs_u(e[i].to);",
" path.push_back(t);",
" }",
" }",
"",
" void dfs_o(int u) {",
" // 有向图",
" for (long long &i = head[u]; i; i = e[i].next) {",
" if(used[i]) {",
" i = e[i].next;",
" continue;",
" }",
" used[i] = true;",
" int t = i + 1;",
" dfs_o(e[i].to);",
" path.push_back(t);",
" }",
" }",
"",
"};",
"#define path eu.path",
""
]
},
"Class_Graph_LCA": {
"prefix": "Class_Graph_LCA",
"body": [
"",
"class LCA {",
" public:",
" int n;",
" vll depth, fa[33];",
"",
" LCA() {}",
" LCA(Graph<ll> g, int root) {",
" n = g.n, depth = vll(n + 1, inf);",
" for (int i = 0; i <= 32; i++) fa[i] = vll(n + 1);",
" bfs(g, root);",
" }",
"",
" void bfs(Graph<ll> g, int root) {",
" depth[0] = 0, depth[root] = 1;",
" queue<int> q;",
" q.push(root);",
" while (q.size()) {",
" auto u = q.front();",
" q.pop();",
" for (int i = head[u]; ~i; i = e[i].next) {",
" int v = e[i].to;",
" if (depth[v] > depth[u] + 1) {",
" depth[v] = depth[u] + 1;",
" q.push(v);",
" fa[0][v] = u;",
" for (int k = 1; k <= 32; k++) fa[k][v] = fa[k - 1][fa[k - 1][v]];",
" }",
" }",
" }",
" }",
"",
" int query(int a, int b) {",
" if (depth[a] < depth[b]) swap(a, b);",
" for (int i = 32; i >= 0; i--)",
" if (depth[fa[i][a]] >= depth[b]) a = fa[i][a];",
" if (a == b) return a;",
" for (int i = 32; i >= 0; i--)",
" if (fa[i][a] != fa[i][b]) a = fa[i][a], b = fa[i][b];",
" return fa[0][a];",
" }",
"};",
""
]
},
"Class_Graph_erfen": {
"prefix": "Class_Graph_erfen",
"body": [
"",
"class erfen_graph {",
" public:",
" ll res, n;",
" vi match, st;",
" Graph<ll> g;",
" erfen_graph(Graph<ll> g) {",
" this->g = g, this->n = g.n;",
" st = vector<int>(n + 1), match = vector<int>(n + 1);",
" res = 0;",
" for (int i = 1; i <= n; i++) {",
" st = vector<int>(n + 1);",
" if (find(i)) res++;",
" }",
" }",
"",
" bool find(int u) {",
" for (int i = head[u]; ~i; i = e[i].next) {",
" if (!st[e[i].to]) {",
" st[e[i].to] = true;",
" if (!match[e[i].to] || find(match[e[i].to])) {",
" match[e[i].to] = u;",
" return true;",
" }",
" }",
" }",
" return false;",
" }",
"};",
""
]
}
}

View File

@ -0,0 +1,108 @@
{
"Math_QuickPow": {
"prefix": "Math_QuickPow",
"body": [
"",
"ll quick_Pow(ll a, ll b, ll mod) {",
" // a的b次方模mod",
" ll res = 1, t = a;",
" while (b) {",
" if (b & 1) res = (res * t) % mod;",
" t = t * t % mod;",
" b >>= 1;",
" }",
" return res;",
"}",
"",
],
},
"Math_Fm": {
"prefix": "Math_Fm",
"body": [
"",
"ll quick_Pow(ll a, ll b, ll mod) {",
" // a的b次方模mod",
" ll res = 1, t = a;",
" while (b) {",
" if (b & 1) res = (res * t) % mod;",
" t = t * t % mod;",
" b >>= 1;",
" }",
" return res;",
"}",
"",
"ll Fm(ll a, ll mod) {",
" //费马小定理求逆元",
" return quick_Pow(a, mod - 2, mod);",
"}",
"",
],
},
"Math_C": {
"prefix": "Math_C",
"body": [
"",
"ll quick_Pow(ll a, ll b, ll mod) {",
" // a的b次方模mod",
" ll res = 1, t = a;",
" while (b) {",
" if (b & 1) res = (res * t) % mod;",
" t = t * t % mod;",
" b >>= 1;",
" }",
" return res;",
"}",
"",
"ll Fm(ll a, ll mod) {",
" //费马小定理求逆元",
" return quick_Pow(a, mod - 2, mod);",
"}",
"",
"ll C(ll n, ll m, ll mod) {",
" ll fz = 1, fm = 1;",
" for (ll i = n; i >= n - m + 1; i--) fz = fz * i % mod;",
" for (ll i = 1; i <= m; i++) fm = fm * i % mod;",
" return (fz * Fm(fm, mod)) % mod;",
"}",
"",
],
},
"Class_Math_Bignum": {
"prefix": "Class_Math_Bignum",
"body": [
"",
"class Math_Bignum {",
" public:",
" string Bignum;",
"",
" vll num;",
"",
" Math_Bignum(string s) {",
" Bignum = s;",
" for (auto i : s) num.push_back(i - '0');",
" }",
"",
" Math_Bignum(vll v) {",
" string s;",
" num = v;",
" for (auto i : v) s.push_back(i + '0');",
" }",
"",
" Math_Bignum(ll l) {",
" string s;",
" while (l) s.push_back(l % 10 + '0'), num.push_back(l % 10), l /= 10;",
" reverse(num.begin(), num.end());",
" reverse(s.begin(), s.end());",
" Bignum = s;",
" }",
"",
" ll get(ll l, ll r) {",
" ll res = 0;",
" for (int i = l - 1; i <= r - 1; i++) res = res * 10 + num[i];",
" return res;",
" }",
"};",
"",
],
},
}

43
snippets/go.json Normal file
View File

@ -0,0 +1,43 @@
{
"class": {
"prefix": "class",
"body": "type $1 struct{$2}\n$0"
},
"errnil": {
"prefix": "errnil",
"body": [
"if err != nil {",
" $1",
"}"
]
},
"init": {
"prefix": "init",
"body": [
"func init() {",
" $1",
"}"
]
},
"ctx": {
"prefix": "ctx",
"body": [
"ctx := context.Background()"
]
},
"cok": {
"prefix": "cok",
"body": [
"c.JSON(http.StatusOK, vo.Success($1))"
]
},
"cbad": {
"prefix": "cbad",
"body": [
"if err != nil {",
" c.JSON(http.StatusBadRequest, vo.Fail(err))",
" return",
"}"
]
}
}

13
snippets/json.json Normal file
View File

@ -0,0 +1,13 @@
{
"mod": {
"prefix": "mod",
"body": [
" \"$1\": {",
" \"prefix\": \"$1\",",
" \"body\": [",
" $2",
" ]",
" }"
]
}
}

3
snippets/lua.json Normal file
View File

@ -0,0 +1,3 @@
{
}