438 lines
14 KiB
Lua
438 lines
14 KiB
Lua
vim.g.loaded_netrw = 1
|
|
vim.g.loaded_netrwPlugin = 1
|
|
vim.g.mapleader = " "
|
|
|
|
local wo = vim.wo
|
|
local bo = vim.bo
|
|
local op = vim.opt
|
|
|
|
op.termguicolors = true
|
|
op.tabstop = 4
|
|
op.shiftwidth = 4
|
|
op.expandtab = true
|
|
bo.autoindent = true
|
|
bo.expandtab = true
|
|
wo.number = true
|
|
wo.relativenumber = true
|
|
--vim.opt.clipboard:append { 'unnamed', 'unnamedplus' }
|
|
vim.opt.clipboard = 'unnamedplus'
|
|
|
|
|
|
print('nya~')
|
|
|
|
local ensure_packer = function()
|
|
local fn = vim.fn
|
|
local install_path = fn.stdpath('data')..'/site/pack/packer/start/packer.nvim'
|
|
if fn.empty(fn.glob(install_path)) > 0 then
|
|
fn.system({'git', 'clone', '--depth', '1', 'https://github.com/wbthomason/packer.nvim', install_path})
|
|
vim.cmd [[packadd packer.nvim]]
|
|
return true
|
|
end
|
|
return false
|
|
end
|
|
|
|
|
|
local packer_bootstrap = ensure_packer()
|
|
|
|
local packer = require('packer')
|
|
packer.startup(function(use)
|
|
use 'wbthomason/packer.nvim'
|
|
use 'nvim-lua/plenary.nvim'
|
|
use 'nvim-treesitter/nvim-treesitter'
|
|
use 'neovim/nvim-lspconfig'
|
|
use 'mfussenegger/nvim-dap'
|
|
use 'jose-elias-alvarez/null-ls.nvim'
|
|
use {
|
|
'nvim-telescope/telescope.nvim',
|
|
requires = { {'nvim-lua/plenary.nvim'} }
|
|
}
|
|
use 'lewis6991/gitsigns.nvim'
|
|
use 'williamboman/mason.nvim'
|
|
use 'williamboman/mason-lspconfig.nvim'
|
|
use 'hrsh7th/cmp-nvim-lsp'
|
|
use 'hrsh7th/cmp-buffer'
|
|
use 'hrsh7th/nvim-cmp'
|
|
use 'hrsh7th/vim-vsnip'
|
|
use 'onsails/lspkind.nvim'
|
|
use 'antoinemadec/FixCursorHold.nvim'
|
|
use 'olimorris/onedarkpro.nvim'
|
|
use {
|
|
'weilbith/nvim-code-action-menu',
|
|
cmd = 'CodeActionMenu'
|
|
}
|
|
use {
|
|
"folke/trouble.nvim",
|
|
requires = "kyazdani42/nvim-web-devicons",
|
|
config = function()
|
|
require("trouble").setup {
|
|
position = "bottom", -- position of the list can be: bottom, top, left, right
|
|
height = 10, -- height of the trouble list when position is top or bottom
|
|
width = 50, -- width of the list when position is left or right
|
|
icons = true, -- use devicons for filenames
|
|
mode = "workspace_diagnostics", -- "workspace_diagnostics", "document_diagnostics", "quickfix", "lsp_references", "loclist"
|
|
fold_open = "", -- icon used for open folds
|
|
fold_closed = "", -- icon used for closed folds
|
|
group = true, -- group results by file
|
|
padding = true, -- add an extra new line on top of the list
|
|
action_keys = { -- key mappings for actions in the trouble list
|
|
-- map to {} to remove a mapping, for example:
|
|
-- close = {},
|
|
close = "q", -- close the list
|
|
cancel = "<esc>", -- cancel the preview and get back to your last window / buffer / cursor
|
|
refresh = "r", -- manually refresh
|
|
jump = {"<cr>", "<tab>"}, -- jump to the diagnostic or open / close folds
|
|
open_split = { "<c-x>" }, -- open buffer in new split
|
|
open_vsplit = { "<c-v>" }, -- open buffer in new vsplit
|
|
open_tab = { "<c-t>" }, -- open buffer in new tab
|
|
jump_close = {"o"}, -- jump to the diagnostic and close the list
|
|
toggle_mode = "m", -- toggle between "workspace" and "document" diagnostics mode
|
|
toggle_preview = "P", -- toggle auto_preview
|
|
hover = "K", -- opens a small popup with the full multiline message
|
|
preview = "p", -- preview the diagnostic location
|
|
close_folds = {"zM", "zm"}, -- close all folds
|
|
open_folds = {"zR", "zr"}, -- open all folds
|
|
toggle_fold = {"zA", "za"}, -- toggle fold of current file
|
|
previous = "k", -- previous item
|
|
next = "j" -- next item
|
|
},
|
|
indent_lines = true, -- add an indent guide below the fold icons
|
|
auto_open = true, -- automatically open the list when you have diagnostics
|
|
auto_close = true, -- automatically close the list when you have no diagnostics
|
|
auto_preview = true, -- automatically preview the location of the diagnostic. <esc> to close preview and go back to last window
|
|
auto_fold = false, -- automatically fold a file trouble list at creation
|
|
auto_jump = {"lsp_definitions"}, -- for the given modes, automatically jump if there is only a single result
|
|
signs = {
|
|
-- icons / text used for a diagnostic
|
|
error = "",
|
|
warning = "",
|
|
hint = "",
|
|
information = "",
|
|
other = ""
|
|
},
|
|
use_diagnostic_signs = true
|
|
}
|
|
end
|
|
}
|
|
use {
|
|
'nvim-tree/nvim-tree.lua',
|
|
requires = {
|
|
'nvim-tree/nvim-web-devicons', -- optional, for file icons
|
|
}
|
|
}
|
|
use 'nvim-tree/nvim-web-devicons'
|
|
use 'lukas-reineke/indent-blankline.nvim'
|
|
use 'norcalli/nvim-colorizer.lua'
|
|
use {
|
|
'goolord/alpha-nvim',
|
|
requires = { 'nvim-tree/nvim-web-devicons' },
|
|
config = function ()
|
|
require('alpha').setup(require('alpha.themes.startify').config)
|
|
end
|
|
}
|
|
use {
|
|
'numToStr/Comment.nvim',
|
|
config = function()
|
|
require('Comment').setup()
|
|
end
|
|
}
|
|
use {
|
|
'akinsho/bufferline.nvim', tag = "v3.*",
|
|
config = function()
|
|
require("bufferline").setup()
|
|
end,
|
|
requires = 'nvim-tree/nvim-web-devicons'
|
|
}
|
|
use {
|
|
'nvim-lualine/lualine.nvim',
|
|
requires = { 'kyazdani42/nvim-web-devicons', opt = true }
|
|
}
|
|
|
|
-- Automatically set up your configuration after cloning packer.nvim
|
|
-- Put this at the end after all plugins
|
|
if packer_bootstrap then
|
|
require('packer').sync()
|
|
end
|
|
end)
|
|
|
|
packer.install()
|
|
|
|
vim.cmd("colorscheme onedark")
|
|
|
|
|
|
vim.g.code_action_menu_window_border = 'single'
|
|
vim.g.code_action_menu_show_details = true
|
|
vim.g.code_action_menu_show_diff = true
|
|
|
|
require'nvim-treesitter.configs'.setup {
|
|
highlight = {
|
|
enable = true,
|
|
-- Setting this to true will run `:h syntax` and tree-sitter at the same time.
|
|
-- Set this to `true` if you depend on 'syntax' being enabled (like for indentation).
|
|
-- Using this option may slow down your editor, and you may see some duplicate highlights.
|
|
-- Instead of true it can also be a list of languages
|
|
additional_vim_regex_highlighting = false,
|
|
},
|
|
}
|
|
|
|
|
|
require("mason").setup()
|
|
require('lspconfig')['tsserver'].setup{
|
|
on_attach = on_attach,
|
|
flags = lsp_flags,
|
|
}
|
|
require('lspconfig')['rust_analyzer'].setup{
|
|
on_attach = on_attach,
|
|
flags = lsp_flags,
|
|
-- Server-specific settings...
|
|
settings = {
|
|
["rust-analyzer"] = {}
|
|
}
|
|
}
|
|
require'lspconfig'.lua_ls.setup {
|
|
settings = {
|
|
Lua = {
|
|
runtime = {
|
|
-- Tell the language server which version of Lua you're using (most likely LuaJIT in the case of Neovim)
|
|
version = 'LuaJIT',
|
|
},
|
|
diagnostics = {
|
|
-- Get the language server to recognize the `vim` global
|
|
globals = {'vim'},
|
|
},
|
|
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,
|
|
},
|
|
},
|
|
},
|
|
}
|
|
|
|
require'lspconfig'.omnisharp.setup {
|
|
capabilities = require('cmp_nvim_lsp').default_capabilities(vim.lsp.protocol.make_client_capabilities()),
|
|
cmd = { "/home/nya/.local/share/nvim/mason/bin/omnisharp" },
|
|
|
|
-- Enables support for reading code style, naming convention and analyzer
|
|
-- settings from .editorconfig.
|
|
enable_editorconfig_support = true,
|
|
|
|
-- If true, MSBuild project system will only load projects for files that
|
|
-- were opened in the editor. This setting is useful for big C# codebases
|
|
-- and allows for faster initialization of code navigation features only
|
|
-- for projects that are relevant to code that is being edited. With this
|
|
-- setting enabled OmniSharp may load fewer projects and may thus display
|
|
-- incomplete reference lists for symbols.
|
|
enable_ms_build_load_projects_on_demand = false,
|
|
|
|
-- Enables support for roslyn analyzers, code fixes and rulesets.
|
|
enable_roslyn_analyzers = true,
|
|
|
|
-- Specifies whether 'using' directives should be grouped and sorted during
|
|
-- document formatting.
|
|
organize_imports_on_format = true,
|
|
|
|
-- Enables support for showing unimported types and unimported extension
|
|
-- methods in completion lists. When committed, the appropriate using
|
|
-- directive will be added at the top of the current file. This option can
|
|
-- have a negative impact on initial completion responsiveness,
|
|
-- particularly for the first few completion sessions after opening a
|
|
-- solution.
|
|
enable_import_completion = true,
|
|
|
|
-- Specifies whether to include preview versions of the .NET SDK when
|
|
-- determining which version to use for project loading.
|
|
sdk_include_prereleases = true,
|
|
|
|
-- Only run analyzers against open files when 'enableRoslynAnalyzers' is
|
|
-- true
|
|
analyze_open_documents_only = false,
|
|
}
|
|
|
|
require("mason-lspconfig").setup({
|
|
ensure_installed = { "lua_ls", "rust_analyzer" }
|
|
})
|
|
|
|
local cmp = require('cmp')
|
|
|
|
local has_words_before = function()
|
|
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 feedkey = function(key, mode)
|
|
vim.api.nvim_feedkeys(vim.api.nvim_replace_termcodes(key, true, true, true), mode, true)
|
|
end
|
|
|
|
cmp.setup {
|
|
snippet = {
|
|
-- REQUIRED - you must specify a snippet engine
|
|
expand = function(args)
|
|
vim.fn["vsnip#anonymous"](args.body) -- For `vsnip` users.
|
|
-- require('luasnip').lsp_expand(args.body) -- For `luasnip` users.
|
|
-- require('snippy').expand_snippet(args.body) -- For `snippy` users.
|
|
-- vim.fn["UltiSnips#Anon"](args.body) -- For `ultisnips` users.
|
|
end,
|
|
},
|
|
window = {
|
|
completion = cmp.config.window.bordered(),
|
|
documentation = cmp.config.window.bordered(),
|
|
},
|
|
mapping = {
|
|
["<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() -- The fallback function sends a already mapped key. In this case, it's probably `<Tab>`.
|
|
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" }),
|
|
['<C-b>'] = cmp.mapping.scroll_docs(-4),
|
|
['<C-f>'] = cmp.mapping.scroll_docs(4),
|
|
['<C-Space>'] = cmp.mapping.complete(),
|
|
['<C-e>'] = cmp.mapping.abort(),
|
|
['<CR>'] = cmp.mapping.confirm({ select = true }), -- Accept currently selected item. Set `select` to `false` to only confirm explicitly selected items.
|
|
},
|
|
formatting = {
|
|
format = require('lspkind').cmp_format {
|
|
with_text = true,
|
|
menu = {
|
|
buffer = "[buf]",
|
|
nvim_lsp = "[LSP]",
|
|
path = "[path]",
|
|
},
|
|
},
|
|
},
|
|
|
|
sources = {
|
|
{ name = "nvim_lsp"},
|
|
{ name = "path" },
|
|
{ name = "buffer" , keyword_length = 5},
|
|
},
|
|
experimental = {
|
|
ghost_text = true
|
|
}
|
|
}
|
|
|
|
require("nvim-tree").setup({
|
|
sort_by = "case_sensitive",
|
|
view = {
|
|
adaptive_size = true,
|
|
},
|
|
renderer = {
|
|
group_empty = true,
|
|
},
|
|
filters = {
|
|
dotfiles = false,
|
|
},
|
|
})
|
|
|
|
local hooks = require "ibl.hooks"
|
|
-- create the highlight groups in the highlight setup hook, so they are reset
|
|
-- every time the colorscheme changes
|
|
hooks.register(hooks.type.HIGHLIGHT_SETUP, function()
|
|
vim.api.nvim_set_hl(0, "RainbowRed", { fg = "#E06C75" })
|
|
vim.api.nvim_set_hl(0, "RainbowYellow", { fg = "#E5C07B" })
|
|
vim.api.nvim_set_hl(0, "RainbowBlue", { fg = "#61AFEF" })
|
|
vim.api.nvim_set_hl(0, "RainbowOrange", { fg = "#D19A66" })
|
|
vim.api.nvim_set_hl(0, "RainbowGreen", { fg = "#98C379" })
|
|
vim.api.nvim_set_hl(0, "RainbowViolet", { fg = "#C678DD" })
|
|
vim.api.nvim_set_hl(0, "RainbowCyan", { fg = "#56B6C2" })
|
|
end)
|
|
|
|
require("ibl").setup { indent = { highlight = {
|
|
"RainbowRed",
|
|
"RainbowYellow",
|
|
"RainbowBlue",
|
|
"RainbowOrange",
|
|
"RainbowGreen",
|
|
"RainbowViolet",
|
|
"RainbowCyan",
|
|
} } }
|
|
|
|
require('colorizer').setup()
|
|
require("bufferline").setup {
|
|
options = {
|
|
show_buffer_icons = true,
|
|
indicator = {
|
|
style = 'underline',
|
|
},
|
|
diagnostics = "nvim_lsp",
|
|
diagnostics_update_in_insert = true,
|
|
color_icons = true,
|
|
show_buffer_close_icons = true,
|
|
show_buffer_icons = true,
|
|
hover = {
|
|
enabled = true,
|
|
delay = 200,
|
|
reveal = {'close'}
|
|
}
|
|
}
|
|
}
|
|
|
|
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'},
|
|
lualine_x = {'encoding', 'fileformat', 'filetype'},
|
|
lualine_y = {'progress'},
|
|
lualine_z = {'location'}
|
|
},
|
|
inactive_sections = {
|
|
lualine_a = {},
|
|
lualine_b = {},
|
|
lualine_c = {'filename'},
|
|
lualine_x = {'location'},
|
|
lualine_y = {},
|
|
lualine_z = {}
|
|
},
|
|
tabline = {},
|
|
winbar = {},
|
|
inactive_winbar = {},
|
|
extensions = {}
|
|
}
|
|
|
|
local builtin = require('telescope.builtin')
|
|
vim.keymap.set('n', '<leader>ff', builtin.find_files, {})
|
|
vim.keymap.set('n', '<leader>fg', builtin.live_grep, {})
|
|
vim.keymap.set('n', '<leader>fb', builtin.buffers, {})
|
|
vim.keymap.set('n', '<leader>fh', builtin.help_tags, {})
|
|
|
|
--vim.api.nvim_set_keymap('n', '<C-Tab>', ':BufferLineCyclePrev<CR>', { noremap = true })--
|
|
vim.api.nvim_set_keymap('n', '<S-Tab>', ':BufferLineCycleNext<CR>', { noremap = true })
|
|
|
|
vim.api.nvim_set_keymap('n', '<C-`>', ':NvimTreeToggle<CR>', { noremap = true })
|
|
vim.api.nvim_set_keymap('n', '<A-t>', ':TroubleToggle<CR>', { noremap = true })
|
|
vim.api.nvim_set_keymap('n', '<A-CR>', ':CodeActionMenu<CR>', { noremap = true })
|