regular backup
- feat(home-manager): mount Dropbox on startup - feat(nvim): switch to nvim-lsp
This commit is contained in:
parent
88c8e77031
commit
11e10c3292
67
.vimrc
67
.vimrc
|
@ -105,12 +105,12 @@ endif
|
||||||
Plug 'wakatime/vim-wakatime'
|
Plug 'wakatime/vim-wakatime'
|
||||||
Plug 'tpope/vim-surround'
|
Plug 'tpope/vim-surround'
|
||||||
Plug 'tpope/vim-commentary'
|
Plug 'tpope/vim-commentary'
|
||||||
Plug 'arielherself/vim-lsp'
|
" Plug 'arielherself/vim-lsp'
|
||||||
Plug 'prabirshrestha/asyncomplete.vim'
|
" Plug 'prabirshrestha/asyncomplete.vim'
|
||||||
Plug 'prabirshrestha/asyncomplete-lsp.vim'
|
" Plug 'prabirshrestha/asyncomplete-lsp.vim'
|
||||||
" Plug 'Shougo/ddc.vim'
|
" Plug 'Shougo/ddc.vim'
|
||||||
" Plug 'shun/ddc-vim-lsp'
|
" Plug 'shun/ddc-vim-lsp'
|
||||||
Plug 'mattn/vim-lsp-settings'
|
" Plug 'mattn/vim-lsp-settings'
|
||||||
Plug 'jdhao/better-escape.vim'
|
Plug 'jdhao/better-escape.vim'
|
||||||
Plug 'jiangmiao/auto-pairs'
|
Plug 'jiangmiao/auto-pairs'
|
||||||
Plug 'easymotion/vim-easymotion'
|
Plug 'easymotion/vim-easymotion'
|
||||||
|
@ -121,18 +121,45 @@ Plug 'ryanoasis/vim-devicons'
|
||||||
" this plugin slows vim down when dealing
|
" this plugin slows vim down when dealing
|
||||||
" with large files, so I switch to the Nvim version
|
" with large files, so I switch to the Nvim version
|
||||||
" Plug 'airblade/vim-gitgutter'
|
" Plug 'airblade/vim-gitgutter'
|
||||||
if has('nvim')
|
Plug 'lewis6991/gitsigns.nvim'
|
||||||
Plug 'lewis6991/gitsigns.nvim'
|
|
||||||
endif
|
|
||||||
Plug 'tpope/vim-fugitive'
|
Plug 'tpope/vim-fugitive'
|
||||||
Plug 'Yggdroot/indentLine'
|
Plug 'Yggdroot/indentLine'
|
||||||
Plug '907th/vim-auto-save'
|
Plug '907th/vim-auto-save'
|
||||||
Plug 'markonm/traces.vim'
|
Plug 'markonm/traces.vim'
|
||||||
Plug 'stevearc/oil.nvim'
|
Plug 'stevearc/oil.nvim'
|
||||||
Plug 'vim-scripts/LargeFile'
|
Plug 'vim-scripts/LargeFile'
|
||||||
|
Plug 'lambdalisue/vim-fern'
|
||||||
|
Plug 'lambdalisue/vim-fern-git-status'
|
||||||
|
Plug 'lambdalisue/vim-fern-renderer-nerdfont'
|
||||||
|
Plug 'lambdalisue/nerdfont.vim'
|
||||||
|
|
||||||
|
" Use Neovim LSP
|
||||||
|
Plug 'neovim/nvim-lspconfig'
|
||||||
|
Plug 'nvim-treesitter/nvim-treesitter', {'do': ':TSUpdate'}
|
||||||
|
Plug 'hrsh7th/nvim-cmp'
|
||||||
|
Plug 'hrsh7th/cmp-nvim-lsp'
|
||||||
|
Plug 'hrsh7th/cmp-buffer'
|
||||||
|
Plug 'hrsh7th/cmp-path'
|
||||||
|
Plug 'hrsh7th/cmp-cmdline'
|
||||||
|
Plug 'saadparwaiz1/cmp_luasnip'
|
||||||
|
Plug 'L3MON4D3/LuaSnip'
|
||||||
|
Plug 'hrsh7th/cmp-emoji'
|
||||||
|
Plug 'chrisgrieser/cmp-nerdfont'
|
||||||
|
Plug 'hrsh7th/cmp-calc'
|
||||||
|
Plug 'arielherself/lspkind.nvim'
|
||||||
|
Plug 'nvim-tree/nvim-web-devicons'
|
||||||
|
Plug 'folke/trouble.nvim'
|
||||||
|
Plug 'kevinhwang91/nvim-ufo'
|
||||||
|
Plug 'kevinhwang91/promise-async'
|
||||||
|
Plug 'rmagatti/goto-preview'
|
||||||
|
|
||||||
call plug#end()
|
call plug#end()
|
||||||
|
|
||||||
|
" Why?!
|
||||||
|
set noshowmode
|
||||||
|
set showcmd
|
||||||
|
|
||||||
|
|
||||||
" Color scheme
|
" Color scheme
|
||||||
set background=dark
|
set background=dark
|
||||||
let g:embark_terminal_italics = 1
|
let g:embark_terminal_italics = 1
|
||||||
|
@ -209,14 +236,15 @@ nnoremap <leader>w <Plug>(easymotion-bd-w)
|
||||||
vnoremap <leader>w <Plug>(easymotion-bd-w)
|
vnoremap <leader>w <Plug>(easymotion-bd-w)
|
||||||
nnoremap <leader>o <Cmd>Files<CR>
|
nnoremap <leader>o <Cmd>Files<CR>
|
||||||
nnoremap <leader>g <Cmd>Rg<CR>
|
nnoremap <leader>g <Cmd>Rg<CR>
|
||||||
nnoremap gpd <Cmd>LspPeekDefinition<CR>
|
nnoremap <leader>. <Cmd>Fern . -drawer<CR>
|
||||||
nnoremap gd <Cmd>LspDefinition<CR>
|
" nnoremap gpd <Cmd>LspPeekDefinition<CR>
|
||||||
nnoremap <leader>dd <Cmd>LspDocumentDiagnostics<CR>
|
" nnoremap gd <Cmd>LspDefinition<CR>
|
||||||
nnoremap <leader>dn <Cmd>LspNextDiagnostic<CR>
|
" nnoremap <leader>dd <Cmd>LspDocumentDiagnostics<CR>
|
||||||
nnoremap <leader>dp <Cmd>LspPreviousDiagnostic<CR>
|
" nnoremap <leader>dn <Cmd>LspNextDiagnostic<CR>
|
||||||
nnoremap grr <Cmd>LspRename<CR>
|
" nnoremap <leader>dp <Cmd>LspPreviousDiagnostic<CR>
|
||||||
nnoremap <leader>a <Cmd>LspCodeAction<CR>
|
" nnoremap grr <Cmd>LspRename<CR>
|
||||||
nnoremap K <Cmd>LspHover<CR>
|
" nnoremap <leader>a <Cmd>LspCodeAction<CR>
|
||||||
|
" nnoremap K <Cmd>LspHover<CR>
|
||||||
nnoremap Q q
|
nnoremap Q q
|
||||||
nnoremap q <Nop>
|
nnoremap q <Nop>
|
||||||
inoremap <C-e> {<ESC>A}<ESC>%li<CR><ESC>$i<CR><ESC>k^i
|
inoremap <C-e> {<ESC>A}<ESC>%li<CR><ESC>$i<CR><ESC>k^i
|
||||||
|
@ -333,10 +361,17 @@ highlight VertSplit guifg=#585273
|
||||||
|
|
||||||
" airline styling
|
" airline styling
|
||||||
" ref: https://github.com/vim-airline/vim-airline/issues/323#issuecomment-27336312
|
" ref: https://github.com/vim-airline/vim-airline/issues/323#issuecomment-27336312
|
||||||
|
if !exists('g:airline_symbols')
|
||||||
|
let g:airline_symbols = {}
|
||||||
|
endif
|
||||||
let g:airline_left_sep = ''
|
let g:airline_left_sep = ''
|
||||||
let g:airline_left_alt_sep = ''
|
let g:airline_left_alt_sep = ''
|
||||||
let g:airline_right_sep = ''
|
let g:airline_right_sep = ''
|
||||||
let g:airline_right_alt_sep = ''
|
let g:airline_right_alt_sep = ''
|
||||||
|
let g:airline_symbols.notexists = ' '
|
||||||
|
let g:airline_symbols.dirty = ' '
|
||||||
|
|
||||||
|
let g:fern#renderer = "nerdfont"
|
||||||
|
|
||||||
if has('nvim')
|
if has('nvim')
|
||||||
lua require('local-highlight').setup { cw_hlgroup = 'LspReferenceText' }
|
lua require('local-highlight').setup { cw_hlgroup = 'LspReferenceText' }
|
||||||
|
@ -347,5 +382,3 @@ endif
|
||||||
" ref: https://github.com/tpope/vim-commentary/issues/15#issuecomment-23127749
|
" ref: https://github.com/tpope/vim-commentary/issues/15#issuecomment-23127749
|
||||||
autocmd FileType c,cpp,cs,java setlocal commentstring=//\ %s
|
autocmd FileType c,cpp,cs,java setlocal commentstring=//\ %s
|
||||||
|
|
||||||
" Why?!
|
|
||||||
set noshowmode
|
|
||||||
|
|
|
@ -116,13 +116,7 @@ in {
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
"nvim/lua/config.lua" = {
|
"nvim/lua/config.lua" = {
|
||||||
text = ''
|
source = config.lib.file.mkOutOfStoreSymlink ../nvim2/config.lua;
|
||||||
require('oil').setup {
|
|
||||||
view_options = {
|
|
||||||
show_hidden = true,
|
|
||||||
},
|
|
||||||
}
|
|
||||||
'';
|
|
||||||
};
|
};
|
||||||
"nvim/ftplugin/java.lua" = {
|
"nvim/ftplugin/java.lua" = {
|
||||||
text = ''
|
text = ''
|
||||||
|
@ -316,6 +310,7 @@ in {
|
||||||
# pkgs.screenkey
|
# pkgs.screenkey
|
||||||
pkgs.ipatool # Search and download IPAs
|
pkgs.ipatool # Search and download IPAs
|
||||||
unstable.open-webui
|
unstable.open-webui
|
||||||
|
pkgs.web-ext
|
||||||
|
|
||||||
# My version of BerkeleyMono NF is incomplete. Should add some fallback fonts.
|
# My version of BerkeleyMono NF is incomplete. Should add some fallback fonts.
|
||||||
# (pkgs.nerdfonts.override { fonts = [
|
# (pkgs.nerdfonts.override { fonts = [
|
||||||
|
@ -516,6 +511,23 @@ in {
|
||||||
Restart = "always";
|
Restart = "always";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
rclone-dropbox = {
|
||||||
|
Unit = {
|
||||||
|
Description = "mount Dropbox.";
|
||||||
|
After = [ "network-online.target" ];
|
||||||
|
};
|
||||||
|
Install = {
|
||||||
|
WantedBy = [ "default.target" ];
|
||||||
|
};
|
||||||
|
Service = {
|
||||||
|
Type = "forking";
|
||||||
|
Environment = [ "PATH=/run/wrappers/bin/:$PATH" ];
|
||||||
|
ExecStart = "${pkgs.rclone}/bin/rclone mount dropbox: /mnt/dropbox --copy-links --allow-other --allow-non-empty --umask 000 --daemon --vfs-cache-mode writes --buffer-size 10M";
|
||||||
|
ExecStop = "fusermount -u /mnt/dropbox";
|
||||||
|
Restart = "always";
|
||||||
|
RestartSec = 10;
|
||||||
|
};
|
||||||
|
};
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,289 @@
|
||||||
|
# vim:foldmethod=marker:foldmarker={{{,}}}:
|
||||||
|
|
||||||
|
require('oil').setup {
|
||||||
|
columns = {
|
||||||
|
"icon",
|
||||||
|
"permissions",
|
||||||
|
"size",
|
||||||
|
"mtime",
|
||||||
|
},
|
||||||
|
keymaps = {
|
||||||
|
["<C-v>"] = { "actions.select", opts = { vertical = true } },
|
||||||
|
["<C-x>"] = { "actions.select", opts = { horizontal = true } },
|
||||||
|
},
|
||||||
|
view_options = {
|
||||||
|
show_hidden = true,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
-- {{{ LSP Related
|
||||||
|
vim.diagnostic.config({ virtual_text = false })
|
||||||
|
|
||||||
|
--- {{{ nvim-treesitter setup
|
||||||
|
local config = require("nvim-treesitter.configs")
|
||||||
|
config.setup {
|
||||||
|
ensure_installed = {"lua", "cpp", "rust", "javascript", "python", "typescript", "html", "css", "scss"},
|
||||||
|
auto_install = true,
|
||||||
|
highlight = { enable = true},
|
||||||
|
indent = { enable = true},
|
||||||
|
}
|
||||||
|
--- }}}
|
||||||
|
|
||||||
|
--- {{{ nvim-cmp setup
|
||||||
|
local cmp_status, cmp = pcall(require, "cmp")
|
||||||
|
if not cmp_status then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
local luasnip_status, luasnip = pcall(require, "luasnip")
|
||||||
|
if not luasnip_status then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
vim.opt.completeopt = "menu,menuone,noselect"
|
||||||
|
|
||||||
|
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 is_empty_line = function()
|
||||||
|
unpack = unpack or table.unpack
|
||||||
|
local line, _ = unpack(vim.api.nvim_win_get_cursor(0))
|
||||||
|
return vim.api.nvim_buf_get_lines(0, line - 1, line, true)[1]: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 lspkind = require('lspkind')
|
||||||
|
|
||||||
|
cmp.setup {
|
||||||
|
snippet = {
|
||||||
|
expand = function(args)
|
||||||
|
luasnip.lsp_expand(args.body)
|
||||||
|
end,
|
||||||
|
},
|
||||||
|
mapping = {
|
||||||
|
["<Tab>"] = cmp.mapping(function(fallback)
|
||||||
|
if cmp.visible() then
|
||||||
|
if not is_empty_line() then
|
||||||
|
cmp.confirm({ select = true })
|
||||||
|
else
|
||||||
|
fallback()
|
||||||
|
end
|
||||||
|
elseif luasnip_status and 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()
|
||||||
|
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-k>'] = cmp.mapping.select_prev_item(),
|
||||||
|
['<C-j>'] = cmp.mapping.select_next_item(),
|
||||||
|
['<ESC>'] = cmp.mapping.abort(),
|
||||||
|
},
|
||||||
|
-- sources for autocompletion
|
||||||
|
sources = cmp.config.sources({
|
||||||
|
{ name = "cody" },
|
||||||
|
{
|
||||||
|
name = "nvim_lsp",
|
||||||
|
option = {
|
||||||
|
markdown_oxide = { keyword_pattern = [[\(\k\| \|\/\|#\)\+]] }
|
||||||
|
}
|
||||||
|
}, -- LSP
|
||||||
|
{ name = "luasnip" }, -- snippets
|
||||||
|
{ name = "buffer" }, -- text within the current buffer
|
||||||
|
{ name = "path" }, -- file system paths
|
||||||
|
{ name = "emoji" },
|
||||||
|
{ name = "nerdfont" },
|
||||||
|
{ name = "calc" },
|
||||||
|
}),
|
||||||
|
formatting = {
|
||||||
|
fields = { cmp.ItemField.Abbr, cmp.ItemField.Kind, cmp.ItemField.Menu },
|
||||||
|
format = lspkind.cmp_format({
|
||||||
|
mode = 'symbol_text', -- show only symbol annotations
|
||||||
|
maxwidth = 50, -- prevent the popup from showing more than provided characters (e.g 50 will not show more than 50 characters)
|
||||||
|
-- can also be a function to dynamically calculate max width such as
|
||||||
|
-- maxwidth = function() return math.floor(0.45 * vim.o.columns) end,
|
||||||
|
ellipsis_char = '…', -- when popup menu exceed maxwidth, the truncated part would show ellipsis_char instead (must define maxwidth first)
|
||||||
|
show_labelDetails = true, -- show labelDetails in menu. Disabled by default
|
||||||
|
|
||||||
|
-- The function below will be called before any actual modifications from lspkind
|
||||||
|
-- so that you can provide more controls on popup customization. (See [#30](https://github.com/onsails/lspkind-nvim/pull/30))
|
||||||
|
before = function (entry, vim_item)
|
||||||
|
-- local word = entry:get_insert_text()
|
||||||
|
-- if entry.completion_item.insertTextFormat == types.lsp.InsertTextFormat.Snippet then
|
||||||
|
-- word = word
|
||||||
|
-- -- word = vim.lsp.util.parse_snippet(word)
|
||||||
|
-- end
|
||||||
|
-- word = str.oneline(word)
|
||||||
|
-- if entry.completion_item.insertTextFormat == types.lsp.InsertTextFormat.Snippet and string.sub(vim_item.abbr, -1, -1) == "~" then
|
||||||
|
-- word = word .. "~"
|
||||||
|
-- end
|
||||||
|
-- vim_item.abbr = word
|
||||||
|
return vim_item
|
||||||
|
end
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
--- }}}
|
||||||
|
|
||||||
|
--- {{{ Configuration for specific LSPs
|
||||||
|
local lspconfig = require('lspconfig')
|
||||||
|
local capabilities = require('cmp_nvim_lsp').default_capabilities()
|
||||||
|
-- local extended_caps = require('cmp_nvim_lsp').default_capabilities(vim.lsp.protocol.make_client_capabilities)
|
||||||
|
-- lspconfig.svls.setup {
|
||||||
|
-- capabilities = capabilities
|
||||||
|
-- }
|
||||||
|
lspconfig.clangd.setup {
|
||||||
|
capabilities = capabilities,
|
||||||
|
root_dir = function(fname)
|
||||||
|
return lspconfig.util.root_pattern('compile_commands.json')(fname) or lspconfig.util.find_git_ancestor(fname) or vim.fn.getcwd()
|
||||||
|
end,
|
||||||
|
cmd = {
|
||||||
|
"clangd",
|
||||||
|
-- "--header-insertion=never",
|
||||||
|
"--clang-tidy",
|
||||||
|
"--clang-tidy-checks=*",
|
||||||
|
}
|
||||||
|
}
|
||||||
|
lspconfig.pyright.setup {
|
||||||
|
capabilities = capabilities
|
||||||
|
}
|
||||||
|
lspconfig.ts_ls.setup {
|
||||||
|
capabilities = capabilities
|
||||||
|
}
|
||||||
|
lspconfig.rust_analyzer.setup {
|
||||||
|
capabilities = capabilities,
|
||||||
|
-- Server-specific settings. See `:help lspconfig-setup`
|
||||||
|
settings = {
|
||||||
|
['rust-analyzer'] = {
|
||||||
|
checkOnSave = {
|
||||||
|
command = 'clippy',
|
||||||
|
}
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
lspconfig.hls.setup {}
|
||||||
|
lspconfig.lua_ls.setup {
|
||||||
|
capabilities = capabilities
|
||||||
|
}
|
||||||
|
lspconfig.cmake.setup {}
|
||||||
|
lspconfig.asm_lsp.setup {
|
||||||
|
capabilities = capabilities
|
||||||
|
}
|
||||||
|
lspconfig.nil_ls.setup {
|
||||||
|
capabilities = capabilities
|
||||||
|
}
|
||||||
|
lspconfig.mojo.setup {}
|
||||||
|
lspconfig.nushell.setup {}
|
||||||
|
--- }}}
|
||||||
|
|
||||||
|
--- {{{ Smart inlay hints
|
||||||
|
vim.api.nvim_create_autocmd("LspAttach", {
|
||||||
|
callback = function()
|
||||||
|
vim.lsp.inlay_hint.enable(true)
|
||||||
|
end,
|
||||||
|
})
|
||||||
|
|
||||||
|
vim.api.nvim_create_autocmd('InsertEnter', {
|
||||||
|
callback = function()
|
||||||
|
vim.lsp.inlay_hint.enable(false)
|
||||||
|
end
|
||||||
|
})
|
||||||
|
|
||||||
|
vim.api.nvim_create_autocmd('InsertLeave', {
|
||||||
|
callback = function()
|
||||||
|
vim.lsp.inlay_hint.enable(true)
|
||||||
|
end
|
||||||
|
})
|
||||||
|
--- }}}
|
||||||
|
|
||||||
|
--- {{{ trouble.nvim keybinds
|
||||||
|
require('trouble').setup()
|
||||||
|
vim.keymap.set('n', '<leader>dd', '<Cmd>Trouble diagnostics toggle focus=true filter.buf=0<CR>');
|
||||||
|
vim.keymap.set('n', '<leader>dw', '<Cmd>Trouble diagnostics toggle focus=true<CR>');
|
||||||
|
vim.keymap.set('n', '<leader>dq', '<Cmd>Trouble qflist toggle focus=true<CR>');
|
||||||
|
vim.keymap.set('n', '<leader>w', '<Cmd>Trouble lsp toggle focus=true<CR>');
|
||||||
|
--- }}}
|
||||||
|
|
||||||
|
--- {{{ Common diagnostics keybinds
|
||||||
|
vim.keymap.set('n', 'qq', vim.diagnostic.open_float);
|
||||||
|
vim.keymap.set('n', 'qn', vim.diagnostic.goto_next);
|
||||||
|
vim.keymap.set('n', 'qp', vim.diagnostic.goto_prev);
|
||||||
|
--- }}}
|
||||||
|
|
||||||
|
--- {{{ LSP keybinds
|
||||||
|
vim.api.nvim_create_autocmd('LspAttach', {
|
||||||
|
group = vim.api.nvim_create_augroup('UserLspConfig', {}),
|
||||||
|
callback = function(ev)
|
||||||
|
-- Enable completion triggered by <c-x><c-o>
|
||||||
|
-- vim.bo[ev.buf].omnifunc = 'v:lua.vim.lsp.omnifunc'
|
||||||
|
|
||||||
|
-- Buffer local mappings.
|
||||||
|
-- See `:help vim.lsp.*` for documentation on any of the below functions
|
||||||
|
local opts = { buffer = ev.buf }
|
||||||
|
vim.keymap.set('n', 'gD', vim.lsp.buf.declaration, opts)
|
||||||
|
vim.keymap.set('n', 'gd', vim.lsp.buf.definition, opts)
|
||||||
|
vim.keymap.set('n', 'K', vim.lsp.buf.hover, opts)
|
||||||
|
vim.keymap.set('n', 'gi', vim.lsp.buf.implementation, opts)
|
||||||
|
vim.keymap.set('n', '<C-k>', vim.lsp.buf.signature_help, opts)
|
||||||
|
vim.keymap.set('n', '<space>wa', vim.lsp.buf.add_workspace_folder, opts)
|
||||||
|
vim.keymap.set('n', '<space>wr', vim.lsp.buf.remove_workspace_folder, opts)
|
||||||
|
vim.keymap.set('n', '<space>wl', function()
|
||||||
|
print(vim.inspect(vim.lsp.buf.list_workspace_folders()))
|
||||||
|
end, opts)
|
||||||
|
vim.keymap.set('n', '<space>D', vim.lsp.buf.type_definition, opts)
|
||||||
|
vim.keymap.set('n', '<space>rn', vim.lsp.buf.rename, opts)
|
||||||
|
vim.keymap.set({ 'n', 'v' }, '<space>ca', vim.lsp.buf.code_action, opts)
|
||||||
|
vim.keymap.set('n', 'gr', vim.lsp.buf.references, opts)
|
||||||
|
end,
|
||||||
|
})
|
||||||
|
--- }}}
|
||||||
|
|
||||||
|
require('goto-preview').setup {
|
||||||
|
default_mappings = true
|
||||||
|
}
|
||||||
|
-- }}}
|
||||||
|
|
||||||
|
-- {{{ Fold Management
|
||||||
|
vim.o.foldcolumn = '1' -- '0' is not bad
|
||||||
|
vim.o.foldlevel = 99 -- Using ufo provider need a large value, feel free to decrease the value
|
||||||
|
vim.o.foldlevelstart = 99
|
||||||
|
vim.o.foldenable = true
|
||||||
|
|
||||||
|
-- Using ufo provider need remap `zR` and `zM`. If Neovim is 0.6.1, remap yourself
|
||||||
|
vim.keymap.set('n', 'zR', require('ufo').openAllFolds)
|
||||||
|
vim.keymap.set('n', 'zM', require('ufo').closeAllFolds)
|
||||||
|
|
||||||
|
-- Option 2: nvim lsp as LSP client
|
||||||
|
-- Tell the server the capability of foldingRange,
|
||||||
|
-- Neovim hasn't added foldingRange to default capabilities, users must add it manually
|
||||||
|
local capabilities = vim.lsp.protocol.make_client_capabilities()
|
||||||
|
capabilities.textDocument.foldingRange = {
|
||||||
|
dynamicRegistration = false,
|
||||||
|
lineFoldingOnly = true
|
||||||
|
}
|
||||||
|
local language_servers = require("lspconfig").util.available_servers() -- or list servers manually like {'gopls', 'clangd'}
|
||||||
|
for _, ls in ipairs(language_servers) do
|
||||||
|
require('lspconfig')[ls].setup({
|
||||||
|
capabilities = capabilities
|
||||||
|
-- you can add other fields for setting up lsp server in this table
|
||||||
|
})
|
||||||
|
end
|
||||||
|
require('ufo').setup()
|
||||||
|
|
||||||
|
-- }}}
|
Loading…
Reference in New Issue