commit 026413e5c24ee14e724fc1b4aca1f4c50a256532 Author: leafee98 Date: Thu Jan 6 15:52:01 2022 +0800 initial commit diff --git a/init.vim b/init.vim new file mode 100644 index 0000000..13b8c8b --- /dev/null +++ b/init.vim @@ -0,0 +1,36 @@ +"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" +" load plugin config +"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" + +execute 'source' "~/.config/nvim/plugins.vim" + +"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" +" load custom config +"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" + +set hidden + +set list + +" set for "hybrid" line number +set relativenumber +set number + +" tab and auto indent +set expandtab + +set autoindent +set smartindent + +" length of an actual \t character: +set tabstop=4 +" length to use when shifting text (eg. <<, >> and == commands) +" (0 for ‘tabstop’): +set shiftwidth=0 +" length to use when editing text (eg. TAB and BS keys) +" (0 for ‘tabstop’, -1 for ‘shiftwidth’): +set softtabstop=-1 +" round indentation to multiples of 'shiftwidth' when shifting text +" (so that it behaves like Ctrl-D / Ctrl-T): +set shiftround + diff --git a/plugins.vim b/plugins.vim new file mode 100644 index 0000000..0858157 --- /dev/null +++ b/plugins.vim @@ -0,0 +1,22 @@ +"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" +" config of vim-plug +"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" +" Plugins will be downloaded under the specified directory. +call plug#begin(has('nvim') ? stdpath('data') . '/plugged' : '~/.vim/plugged') + +" Declare the list of plugins. +Plug 'neovim/nvim-lspconfig' +Plug 'kyazdani42/nvim-web-devicons' " for file icons +Plug 'kyazdani42/nvim-tree.lua' +Plug 'akinsho/toggleterm.nvim' + +" List ends here. Plugins become visible to Vim after this call. +call plug#end() + + +"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" +" load setup of plugins +"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" +execute 'source' "~/.config/nvim/plugins.vim.d/nvim-lspconfig.vim" +execute 'source' "~/.config/nvim/plugins.vim.d/nvim-tree.vim" +execute 'source' "~/.config/nvim/plugins.vim.d/toggleterm.vim" diff --git a/plugins.vim.d/nvim-lspconfig.vim b/plugins.vim.d/nvim-lspconfig.vim new file mode 100644 index 0000000..d1c0494 --- /dev/null +++ b/plugins.vim.d/nvim-lspconfig.vim @@ -0,0 +1,56 @@ +"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" +" config of LSP +"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" + +" lua << EOF +" require'lspconfig'.pyright.setup{} +" EOF + +lua << EOF +local nvim_lsp = require('lspconfig') + +-- Use an on_attach function to only map the following keys +-- after the language server attaches to the current buffer +local on_attach = function(client, bufnr) + local function buf_set_keymap(...) vim.api.nvim_buf_set_keymap(bufnr, ...) end + local function buf_set_option(...) vim.api.nvim_buf_set_option(bufnr, ...) end + + -- Enable completion triggered by + buf_set_option('omnifunc', 'v:lua.vim.lsp.omnifunc') + + -- Mappings. + local opts = { noremap=true, silent=true } + + -- See `:help vim.lsp.*` for documentation on any of the below functions + buf_set_keymap('n', 'gD', 'lua vim.lsp.buf.declaration()', opts) + buf_set_keymap('n', 'gd', 'lua vim.lsp.buf.definition()', opts) + buf_set_keymap('n', 'K', 'lua vim.lsp.buf.hover()', opts) + buf_set_keymap('n', 'gi', 'lua vim.lsp.buf.implementation()', opts) + buf_set_keymap('n', '', 'lua vim.lsp.buf.signature_help()', opts) + buf_set_keymap('n', 'wa', 'lua vim.lsp.buf.add_workspace_folder()', opts) + buf_set_keymap('n', 'wr', 'lua vim.lsp.buf.remove_workspace_folder()', opts) + buf_set_keymap('n', 'wl', 'lua print(vim.inspect(vim.lsp.buf.list_workspace_folders()))', opts) + buf_set_keymap('n', 'D', 'lua vim.lsp.buf.type_definition()', opts) + buf_set_keymap('n', 'rn', 'lua vim.lsp.buf.rename()', opts) + buf_set_keymap('n', 'ca', 'lua vim.lsp.buf.code_action()', opts) + buf_set_keymap('n', 'gr', 'lua vim.lsp.buf.references()', opts) + buf_set_keymap('n', 'e', 'lua vim.diagnostic.open_float()', opts) + buf_set_keymap('n', '[d', 'lua vim.diagnostic.goto_prev()', opts) + buf_set_keymap('n', ']d', 'lua vim.diagnostic.goto_next()', opts) + buf_set_keymap('n', 'q', 'lua vim.diagnostic.setloclist()', opts) + buf_set_keymap('n', 'f', 'lua vim.lsp.buf.formatting()', opts) + +end + +-- Use a loop to conveniently call 'setup' on multiple servers and +-- map buffer local keybindings when the language server attaches +local servers = { 'pyright', 'rust_analyzer', 'tsserver' } +for _, lsp in ipairs(servers) do + nvim_lsp[lsp].setup { + on_attach = on_attach, + flags = { + debounce_text_changes = 150, + } + } +end +EOF diff --git a/plugins.vim.d/nvim-tree.vim b/plugins.vim.d/nvim-tree.vim new file mode 100644 index 0000000..e13acc5 --- /dev/null +++ b/plugins.vim.d/nvim-tree.vim @@ -0,0 +1,144 @@ +"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" +" config of nvim tree +"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" +let g:nvim_tree_quit_on_open = 1 "0 by default, closes the tree when you open a file +let g:nvim_tree_indent_markers = 1 "0 by default, this option shows indent markers when folders are open +let g:nvim_tree_git_hl = 1 "0 by default, will enable file highlight for git attributes (can be used without the icons). +let g:nvim_tree_highlight_opened_files = 1 "0 by default, will enable folder and file icon highlight for opened files/directories. +let g:nvim_tree_root_folder_modifier = ':~' "This is the default. See :help filename-modifiers for more options +let g:nvim_tree_add_trailing = 1 "0 by default, append a trailing slash to folder names +let g:nvim_tree_group_empty = 1 " 0 by default, compact folders that only contain a single folder into one node in the file tree +let g:nvim_tree_disable_window_picker = 1 "0 by default, will disable the window picker. +let g:nvim_tree_icon_padding = ' ' "one space by default, used for rendering the space between the icon and the filename. Use with caution, it could break rendering if you set an empty string depending on your font. +let g:nvim_tree_symlink_arrow = ' >> ' " defaults to ' ➛ '. used as a separator between symlinks' source and target. +let g:nvim_tree_respect_buf_cwd = 1 "0 by default, will change cwd of nvim-tree to that of new buffer's when opening nvim-tree. +let g:nvim_tree_create_in_closed_folder = 0 "1 by default, When creating files, sets the path of a file when cursor is on a closed folder to the parent folder when 0, and inside the folder when 1. +let g:nvim_tree_refresh_wait = 500 "1000 by default, control how often the tree can be refreshed, 1000 means the tree can be refresh once per 1000ms. +let g:nvim_tree_window_picker_exclude = { + \ 'filetype': [ + \ 'notify', + \ 'packer', + \ 'qf' + \ ], + \ 'buftype': [ + \ 'terminal' + \ ] + \ } +" Dictionary of buffer option names mapped to a list of option values that +" indicates to the window picker that the buffer's window should not be +" selectable. +let g:nvim_tree_special_files = { 'README.md': 1, 'Makefile': 1, 'MAKEFILE': 1 } " List of filenames that gets highlighted with NvimTreeSpecialFile +let g:nvim_tree_show_icons = { + \ 'git': 1, + \ 'folders': 0, + \ 'files': 0, + \ 'folder_arrows': 0, + \ } +"If 0, do not show the icons for one of 'git' 'folder' and 'files' +"1 by default, notice that if 'files' is 1, it will only display +"if nvim-web-devicons is installed and on your runtimepath. +"if folder is 1, you can also tell folder_arrows 1 to show small arrows next to the folder icons. +"but this will not work when you set indent_markers (because of UI conflict) + +" default will show icon by default if no icon is provided +" default shows no icon by default +let g:nvim_tree_icons = { + \ 'default': '', + \ 'symlink': '', + \ 'git': { + \ 'unstaged': "✗", + \ 'staged': "✓", + \ 'unmerged': "", + \ 'renamed': "➜", + \ 'untracked': "★", + \ 'deleted': "", + \ 'ignored': "◌" + \ }, + \ 'folder': { + \ 'arrow_open': "", + \ 'arrow_closed': "", + \ 'default': "", + \ 'open': "", + \ 'empty': "", + \ 'empty_open': "", + \ 'symlink': "", + \ 'symlink_open': "", + \ } + \ } + +nnoremap :NvimTreeToggle +nnoremap r :NvimTreeRefresh +nnoremap n :NvimTreeFindFile +" NvimTreeOpen, NvimTreeClose, NvimTreeFocus, NvimTreeFindFileToggle, and NvimTreeResize are also available if you need them + +set termguicolors " this variable must be enabled for colors to be applied properly + +" a list of groups can be found at `:help nvim_tree_highlight` +highlight NvimTreeFolderIcon guibg=blue + +"""""""""""""""""""""" start of setup + +lua << EOF +-- following options are the default +-- each of these are documented in `:help nvim-tree.OPTION_NAME` +require'nvim-tree'.setup { + disable_netrw = true, + hijack_netrw = true, + open_on_setup = false, + ignore_ft_on_setup = {}, + auto_close = false, + open_on_tab = false, + hijack_cursor = false, + update_cwd = false, + update_to_buf_dir = { + enable = true, + auto_open = true, + }, + diagnostics = { + enable = false, + icons = { + hint = "", + info = "", + warning = "", + error = "", + } + }, + update_focused_file = { + enable = false, + update_cwd = false, + ignore_list = {} + }, + system_open = { + cmd = nil, + args = {} + }, + filters = { + dotfiles = false, + custom = {} + }, + git = { + enable = true, + ignore = true, + timeout = 500, + }, + view = { + width = 30, + height = 30, + hide_root_folder = false, + side = 'left', + auto_resize = false, + mappings = { + custom_only = false, + list = {} + }, + number = false, + relativenumber = false, + signcolumn = "yes" + }, + trash = { + cmd = "trash", + require_confirm = true + } +} +EOF + diff --git a/plugins.vim.d/toggleterm.vim b/plugins.vim.d/toggleterm.vim new file mode 100644 index 0000000..da9d05d --- /dev/null +++ b/plugins.vim.d/toggleterm.vim @@ -0,0 +1,42 @@ +"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" +" config of toggleterm +"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" + +lua << EOF +require("toggleterm").setup{ + -- size can be a number or function which is passed the current terminal + size = function(term) + if term.direction == "horizontal" then + return 15 + elseif term.direction == "vertical" then + return vim.o.columns * 0.4 + end + end, + open_mapping = [[]], + hide_numbers = true, -- hide the number column in toggleterm buffers + shade_filetypes = {}, + shade_terminals = true, + shading_factor = '', -- 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 = 'vertical', -- | 'horizontal' | 'window' | 'float', + close_on_exit = true, -- close the terminal window when the process exits + shell = vim.o.shell, -- change the default shell + -- This field is only relevant if direction is set to 'float' + float_opts = { + -- The border key is *almost* the same as 'nvim_open_win' + -- see :h nvim_open_win for details on borders however + -- the 'curved' border is a custom border type + -- not natively supported but implemented in this plugin. + border = 'single', -- | 'double' | 'shadow' | 'curved' -- | ... other options supported by win open + width = 100, + height = 40, + winblend = 3, + highlights = { + border = "Normal", + background = "Normal", + } + } +} +EOF