feat: c lang support

This commit is contained in:
Young Xu 2023-03-15 01:42:19 +08:00
parent 18a5441638
commit fb370b302b
Signed by: xuthus5
GPG Key ID: A23CF9620CBB55F9
18 changed files with 413 additions and 173 deletions

19
ftplugin/go.vim Normal file
View File

@ -0,0 +1,19 @@
augroup golang
au!
autocmd BufWritePre *.go :silent call CocAction('runCommand', 'editor.action.organizeImport')
autocmd BufWritePre *.go :call CocAction('format')
augroup END
vnoremap <silent><buffer> F :<c-u>call <SID>gfor()<cr>jo
vnoremap <silent><buffer> D :<c-u>call SurroundVaddPairs("/** ", " */")<cr>
func s:gfor()
let tag = getline(line("."))[col("'<") - 1 : col("'>") - 2 + (&selection != 'exclusive' ? 1 : 0)]
let l = line('.')
let space = substitute(getline(l), '\v(^\s*).*', '\1', '')
call appendbufline('%', line('.'), printf(space . 'for idx := range %s {', tag))
call appendbufline('%', line('.') + 1, printf(space . ' %s := %s[idx]', tag[:-2], tag))
call appendbufline('%', line('.') + 2, space . '}')
execute 'norm! j'
endf

1
ftplugin/javascript.vim Normal file
View File

@ -0,0 +1 @@
vnoremap <silent><buffer> D :<c-u>call SurroundVaddPairs("/** ", " */")<cr>

51
ftplugin/markdown.vim Normal file
View File

@ -0,0 +1,51 @@
hi MDTask ctermfg=1
hi MDDoneText ctermfg=37 cterm=italic,strikethrough
hi MDTodoText cterm=NONE
hi MDDoneDate cterm=strikethrough ctermfg=71
hi MDTodoDate ctermfg=71
hi Deadline ctermfg=162 cterm=bold,underline
hi NearDeadline ctermfg=178 cterm=bold
au FileType markdown syn match markdownError "\w\@<=\w\@="
au FileType markdown syn match MDDoneDate /[SD]:\d\{4\}\([\/-]\d\d\)\{2\}/ contained
au FileType markdown syn match MDTodoDate /[SD]:\d\{4\}\([\/-]\d\d\)\{2\}/ contained
au FileType markdown syn match MDDoneText /- \[x\] \zs.*/ contains=MDDoneDate contained
au FileType markdown syn match MDTodoText /- \[ \] \zs.*/ contains=MDTodoDate contained
au FileType markdown syn match MDTask /- \[\(x\| \)\] .*/ contains=MDDoneText,MDTodoText
au FileType markdown call matchadd('Deadline', 'D:'.strftime("%Y-%m-%d"))
au FileType markdown call matchadd('NearDeadline', 'D:'.strftime("%Y-%m-%d", localtime() + 3600 * 24))
au FileType markdown call matchadd('NearDeadline', 'D:'.strftime("%Y-%m-%d", localtime() + 3600 * 48))
let b:md_block = '```'
setlocal shiftwidth=2
setlocal softtabstop=2
setlocal tabstop=2
nnoremap <silent><buffer> <CR> :call <SID>toggleTodoStatus()<CR><CR>
nnoremap <silent><buffer> <2-LeftMouse> :call <SID>toggleTodoStatus()<CR>:w<CR><2-LeftMouse>
vnoremap <silent><buffer> B :<c-u>call SurroundVaddPairs("**", "**")<cr>
vnoremap <silent><buffer> I :<c-u>call SurroundVaddPairs("*", "*")<cr>
vnoremap <silent><buffer> T :<c-u>call SurroundVaddPairs("- [ ] ", "")<cr>
vnoremap <silent><buffer> ` :<c-u>call SurroundVaddPairs("`", "`")<cr>
vnoremap <silent><buffer> C :<c-u>call SurroundVaddPairs("```plaintext", "```")<cr>
fun! s:toggleTodoStatus()
let line = getline('.')
if line =~ glob2regpat('*- \[ \]*')
call setline('.', substitute(line, '\[ \]', '[x]', ''))
elseif line =~ glob2regpat('*- \[x\]*')
call setline('.', substitute(line, '\[x\]', '[ ]', ''))
endif
endf
nnoremap <silent><buffer> <F6> :call <SID>toggleMPTheme()<CR>
inoremap <silent><buffer> <F6> <ESC>:call <SID>toggleMPTheme()<CR>
fun! s:toggleMPTheme()
if g:mkdp_theme == 'dark'
let g:mkdp_theme = 'light'
else
let g:mkdp_theme = 'dark'
endif
exec 'MarkdownPreviewStop'
sleep 1
exec 'MarkdownPreview'
endf

1
ftplugin/mysql.vim Normal file
View File

@ -0,0 +1 @@
let g:omni_sql_no_default_maps = 1

1
ftplugin/python.vim Normal file
View File

@ -0,0 +1 @@
vnoremap <silent><buffer> D :<c-u>call SurroundVaddPairs("/** ", " */")<cr>

1
ftplugin/sql.vim Normal file
View File

@ -0,0 +1 @@
let g:omni_sql_no_default_maps = 1

1
ftplugin/typescript.vim Normal file
View File

@ -0,0 +1 @@
vnoremap <silent><buffer> D :<c-u>call SurroundVaddPairs("/** ", " */")<cr>

4
ftplugin/vue.vim Normal file
View File

@ -0,0 +1,4 @@
augroup vue
au!
autocmd BufWritePre *.vue :call CocAction('format')
augroup END

View File

@ -1,5 +1,9 @@
require("impatient") -- start quickly
local exist, _ = pcall(require, "impatient") -- start quickly)
if not exist then
vim.notify("没找到impatient")
end
require("setup")
require("core.g")
require("core.option")
-- 加载插件配置文件
@ -29,6 +33,8 @@ require("plugins.gitsigns")
require("plugins.leap")
-- 代码高亮配置
require("plugins.treesitter")
-- wilder配置
require("plugins.wilder")
-- lsp 配置
require("lsp.init")
require("lsp.bash")
@ -38,6 +44,7 @@ require("lsp.go")
require("lsp.lua")
require("lsp.protocol")
require("lsp.volar")
require("lsp.clang")
-- lspsaga
require("plugins.lspsaga")
-- golang lsp

52
lua/core/g.lua Normal file
View File

@ -0,0 +1,52 @@
local G = {}
G.g = vim.g
G.b = vim.b
G.o = vim.o
G.v = vim.v
G.fn = vim.fn
G.api = vim.api
G.opt = vim.opt
function G.map(maps)
for _, map in pairs(maps) do
G.api.nvim_set_keymap(map[1], map[2], map[3], map[4])
end
end
function G.hi(hls)
local colormode = G.o.termguicolors and "" or "cterm"
for group, color in pairs(hls) do
local opt = {}
if color.fg then
opt[colormode .. "fg"] = color.fg
end
if color.bg then
opt[colormode .. "bg"] = color.bg
end
if color.italic then
opt.italic = true
end
if color.bold then
opt.bold = true
end
if color.underline then
opt.underline = true
end
G.api.nvim_set_hl(0, group, opt)
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
return G

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

@ -0,0 +1,18 @@
local lsp_status = require("lsp-status")
lsp_status.register_progress()
lsp_status.config({
indicator_errors = "",
indicator_warnings = "⚠️ ",
indicator_info = " ",
-- https://emojipedia.org/tips/
indicator_hint = "💡",
indicator_ok = "",
})
require("lspconfig").clangd.setup({
handlers = lsp_status.extensions.clangd.setup(),
init_options = {
clangdFileStatus = true,
},
capabilities = lsp_status.capabilities,
})

View File

@ -4,3 +4,4 @@ require("auto-save").setup({
require("nvim-autopairs").setup({})
require("nvim-ts-autotag").setup({})
require('unimpaired').setup({})
require("luasnip.loaders.from_vscode").lazy_load()

View File

@ -1,13 +1,15 @@
require("lspsaga").setup({
ui = {
colors = require("catppuccin.groups.integrations.lsp_saga").custom_colors(),
kind = require("catppuccin.groups.integrations.lsp_saga").custom_kind(),
},
ui = {
colors = require("catppuccin.groups.integrations.lsp_saga").custom_colors(),
kind = require("catppuccin.groups.integrations.lsp_saga").custom_kind(),
},
})
require("lsp-colors").setup({
Error = "#db4b4b",
Warning = "#e0af68",
Information = "#0db9d7",
Hint = "#10B981"
Error = "#db4b4b",
Warning = "#e0af68",
Information = "#0db9d7",
Hint = "#10B981",
})

View File

@ -10,6 +10,11 @@ require("mason").setup({
require("mason-lspconfig").setup({
ensure_installed = {
"clangd",
"emmet_ls",
"cmake",
"gradle_ls",
"kotlin_language_server",
"lua_ls",
"rust_analyzer",
"gopls",

View File

@ -10,3 +10,4 @@ require("trouble").setup({})
require("telescope").setup({})
-- 快捷键提示
require("which-key").setup({})
-- 屏幕保护

View File

@ -39,15 +39,15 @@ require("nvim-treesitter.configs").setup({
---- If you need to change the installation directory of the parsers (see -> Advanced Setup)
-- parser_install_dir = "/some/path/to/store/parsers", -- Remember to run vim.opt.runtimepath:append("/some/path/to/store/parsers")!
incremental_selection = {
enable = true,
keymaps = {
init_selection = "<CR>",
node_incremental = "<CR>",
node_decremental = "<BS>",
scope_incremental = "<TAB>",
},
},
incremental_selection = {
enable = true,
keymaps = {
init_selection = "<CR>",
node_incremental = "<CR>",
node_decremental = "<BS>",
scope_incremental = "<TAB>",
},
},
indent = {
enable = true,
},

52
lua/plugins/wilder.lua Normal file
View File

@ -0,0 +1,52 @@
local G = require("core.g")
local wilder = require("wilder")
wilder.setup({
modes = { ":", "/", "?" },
next_key = 0,
previous_key = 0,
reject_key = 0,
accept_key = 0,
})
wilder.set_option("pipeline", {
wilder.branch(
{
wilder.check(function(_, x)
return G.fn.empty(x)
end),
wilder.history(15),
},
wilder.cmdline_pipeline({
fuzzy = 1,
fuzzy_filter = wilder.vim_fuzzy_filter(),
}),
wilder.search_pipeline()
),
wilder.debounce(10),
})
wilder.set_option(
"renderer",
wilder.popupmenu_renderer(wilder.popupmenu_border_theme({
highlights = {
accent = "WilderAccent",
selected_accent = "WilderSelectedAccent",
},
highlighter = wilder.basic_highlighter(),
left = { " ", wilder.popupmenu_devicons() },
right = { " ", wilder.popupmenu_scrollbar() },
border = "rounded",
max_height = 17, -- 最大高度限制 因为要计算上下 所以17支持最多15个选项
}))
)
G.cmd("silent! UpdateRemotePlugins")
G.hi({
WilderAccent = { fg = 12 },
WilderSelectedAccent = { fg = 12, bg = 239 },
})
G.map({
{ "c", "<tab>", [[wilder#in_context() ? wilder#next() : '<tab>']], { noremap = true, expr = true } },
{ "c", "<Down>", [[wilder#in_context() ? wilder#next() : '<down>']], { noremap = true, expr = true } },
{ "c", "<up>", [[wilder#in_context() ? wilder#previous() : '<up>']], { noremap = true, expr = true } },
{ "c", "0", "0", {} }, -- 不清楚原因导致0无法使用 强制覆盖
})

View File

@ -12,161 +12,184 @@ end
local packer_bootstrap = ensure_packer()
return require("packer").startup(function(use)
use({ "wbthomason/packer.nvim" })
use({ "folke/tokyonight.nvim" })
use({ "catppuccin/nvim", as = "catppuccin" })
use({ "wbthomason/packer.nvim" })
use({ "folke/tokyonight.nvim" })
use({ "catppuccin/nvim", as = "catppuccin" })
-- bufferline
use({ "akinsho/bufferline.nvim", tag = "v3.*", requires = "nvim-tree/nvim-web-devicons" })
-- 行号模式自动切换
use({ "nkakouros-original/numbers.nvim" })
-- 模糊搜索
use({
"nvim-telescope/telescope.nvim",
tag = "0.1.1",
requires = {
{ "nvim-lua/plenary.nvim" },
{ "nvim-treesitter/nvim-treesitter" },
{ "kdheepak/lazygit.nvim" },
},
})
-- 文件树
use({
"nvim-tree/nvim-tree.lua",
requires = {
"nvim-tree/nvim-web-devicons", -- optional, for file icons
},
tag = "nightly", -- optional, updated every week. (see issue #1193)
})
-- 终端管理
use({ "akinsho/toggleterm.nvim", tag = "*" })
-- LSP管理器
use({
"williamboman/mason.nvim",
"williamboman/mason-lspconfig.nvim",
"neovim/nvim-lspconfig",
"jose-elias-alvarez/null-ls.nvim",
})
-- 命令行
use({
"VonHeikemen/fine-cmdline.nvim",
requires = {
{ "MunifTanjim/nui.nvim" },
},
})
-- 通知
use({ "rcarriga/nvim-notify" })
-- 缩进线
use({ "lukas-reineke/indent-blankline.nvim" })
-- 注释管理
use({
"numToStr/Comment.nvim",
config = function()
require("Comment").setup({})
end,
})
-- git管理
use({ "lewis6991/gitsigns.nvim" })
use({
"nvim-lualine/lualine.nvim",
requires = { "kyazdani42/nvim-web-devicons", opt = true },
})
-- 自动修复部分按键
use({ "tummetott/unimpaired.nvim" })
-- 标签补全
use({ "windwp/nvim-autopairs" })
use({ "windwp/nvim-ts-autotag" })
-- 自动保存
use({
"Pocco81/auto-save.nvim",
})
-- lspsaga
use({
"glepnir/lspsaga.nvim",
branch = "main",
requires = {
"nvim-tree/nvim-web-devicons",
--Please make sure you install markdown and markdown_inline parser
"nvim-treesitter/nvim-treesitter",
"folke/lsp-colors.nvim",
},
})
-- 错误列表
use({
"folke/trouble.nvim",
requires = "nvim-tree/nvim-web-devicons",
})
-- 上下高亮跳动
use({ "danilamihailov/beacon.nvim" })
-- markdown lsp
use({
"iamcco/markdown-preview.nvim",
run = "cd app && npm install",
setup = function()
vim.g.mkdp_filetypes = { "markdown" }
end,
ft = { "markdown" },
})
-- 跳转
use({ "ggandor/leap.nvim" })
use({ "ggandor/flit.nvim" })
-- 项目管理
use({ "ahmedkhalf/project.nvim" })
-- 优化启动速度
use({ "lewis6991/impatient.nvim" })
-- TODO 管理
use({
"folke/todo-comments.nvim",
requires = "nvim-lua/plenary.nvim",
})
-- 代码高亮
use({
-- bufferline
use({ "akinsho/bufferline.nvim", tag = "v3.*", requires = "nvim-tree/nvim-web-devicons" })
-- 行号模式自动切换
use({ "nkakouros-original/numbers.nvim" })
-- 模糊搜索
use({
"nvim-telescope/telescope.nvim",
tag = "0.1.1",
requires = {
{ "nvim-lua/plenary.nvim" },
{ "nvim-treesitter/nvim-treesitter" },
{ "kdheepak/lazygit.nvim" },
},
})
-- 文件树
use({
"nvim-tree/nvim-tree.lua",
requires = {
"nvim-tree/nvim-web-devicons", -- optional, for file icons
},
tag = "nightly", -- optional, updated every week. (see issue #1193)
})
-- 终端管理
use({ "akinsho/toggleterm.nvim", tag = "*" })
-- LSP管理器
use({
"williamboman/mason.nvim",
"williamboman/mason-lspconfig.nvim",
"neovim/nvim-lspconfig",
"jose-elias-alvarez/null-ls.nvim",
})
-- 命令行
use({
"VonHeikemen/fine-cmdline.nvim",
requires = {
{ "MunifTanjim/nui.nvim" },
},
})
-- 通知
use({ "rcarriga/nvim-notify" })
-- 缩进线
use({ "lukas-reineke/indent-blankline.nvim" })
-- 注释管理
use({
"numToStr/Comment.nvim",
config = function()
require("Comment").setup({})
end,
})
-- git管理
use({ "lewis6991/gitsigns.nvim" })
use({
"nvim-lualine/lualine.nvim",
requires = { "kyazdani42/nvim-web-devicons", opt = true },
})
-- 自动修复部分按键
use({ "tummetott/unimpaired.nvim" })
-- 标签补全
use({ "windwp/nvim-autopairs" })
use({ "windwp/nvim-ts-autotag" })
-- 自动保存
use({
"Pocco81/auto-save.nvim",
})
-- lspsaga
use({
"glepnir/lspsaga.nvim",
branch = "main",
requires = {
"nvim-tree/nvim-web-devicons",
--Please make sure you install markdown and markdown_inline parser
"nvim-treesitter/nvim-treesitter",
run = ":TSUpdate",
})
-- 自动完成相关
use({
"folke/lsp-colors.nvim",
},
})
-- 错误列表
use({
"folke/trouble.nvim",
requires = "nvim-tree/nvim-web-devicons",
})
-- 上下高亮跳动
use({ "danilamihailov/beacon.nvim" })
-- markdown lsp
use({ "mzlogin/vim-markdown-toc", ft = "markdown" })
use({
"iamcco/markdown-preview.nvim",
run = "cd app && npm install",
setup = function()
vim.g.mkdp_filetypes = { "markdown" }
end,
ft = { "markdown" },
})
-- 跳转
use({ "ggandor/leap.nvim" })
use({ "ggandor/flit.nvim" })
-- 项目管理
use({ "ahmedkhalf/project.nvim" })
-- 优化启动速度
use({ "lewis6991/impatient.nvim" })
-- TODO 管理
use({
"folke/todo-comments.nvim",
requires = "nvim-lua/plenary.nvim",
})
-- 代码高亮
use({
"nvim-treesitter/nvim-treesitter",
run = ":TSUpdate",
})
use({ "nvim-treesitter/playground", after = "nvim-treesitter" })
-- 自动完成相关
use({
"hrsh7th/nvim-cmp",
requires = {
"onsails/lspkind-nvim",
"octaltree/cmp-look",
"hrsh7th/cmp-nvim-lsp",
"hrsh7th/cmp-buffer",
"hrsh7th/cmp-path",
"hrsh7th/cmp-calc",
"hrsh7th/cmp-cmdline",
"hrsh7th/nvim-cmp",
requires = {
"onsails/lspkind-nvim",
"octaltree/cmp-look",
"hrsh7th/cmp-nvim-lsp",
"hrsh7th/cmp-buffer",
"hrsh7th/cmp-path",
"hrsh7th/cmp-calc",
"hrsh7th/cmp-cmdline",
"hrsh7th/nvim-cmp",
"hrsh7th/cmp-vsnip",
"hrsh7th/vim-vsnip",
"hrsh7th/cmp-emoji",
},
})
-- golang ide
use({
"ray-x/go.nvim",
"ray-x/guihua.lua", -- recommended if need floating window support
})
-- 高亮当前关键词
use({ "RRethy/vim-illuminate" })
-- 罗列文件中的所有url
use("axieax/urlview.nvim")
-- 快捷键提示
use({
"folke/which-key.nvim",
config = function()
vim.o.timeout = true
vim.o.timeoutlen = 300
end,
})
-- debug
use({
"theHamsta/nvim-dap-virtual-text",
"rcarriga/nvim-dap-ui",
"mfussenegger/nvim-dap",
"folke/neodev.nvim",
})
-- 自动保存
if packer_bootstrap then
require("packer").sync()
end
end)
"hrsh7th/cmp-vsnip",
"hrsh7th/vim-vsnip",
"hrsh7th/cmp-emoji",
},
})
use({
"L3MON4D3/LuaSnip",
requires = {
"rafamadriz/friendly-snippets",
},
-- follow latest release.
tag = "v<CurrentMajor>.*",
-- install jsregexp (optional!:).
run = "make install_jsregexp",
})
-- golang ide
use({
"ray-x/go.nvim",
"ray-x/guihua.lua", -- recommended if need floating window support
})
-- 高亮当前关键词
use({ "RRethy/vim-illuminate" })
-- 罗列文件中的所有url
use("axieax/urlview.nvim")
-- 快捷键提示
use({
"folke/which-key.nvim",
config = function()
vim.o.timeout = true
vim.o.timeoutlen = 300
end,
})
-- debug
use({
"theHamsta/nvim-dap-virtual-text",
"rcarriga/nvim-dap-ui",
"mfussenegger/nvim-dap",
"folke/neodev.nvim",
})
-- 命令模式增强
use({
"gelguy/wilder.nvim",
config = function()
-- config goes here
end,
})
-- lsp 状态
use("nvim-lua/lsp-status.nvim")
-- 屏幕保护
use("eandrju/cellular-automaton.nvim")
-- 自动保存
if packer_bootstrap then
require("packer").sync()
end
end)