diff --git a/init.vim b/init.vim index c7d950e..c1142ad 100644 --- a/init.vim +++ b/init.vim @@ -1,39 +1,77 @@ """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" -" load plugin config +" my custom settings """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" -execute 'source' "~/.config/nvim/plugins.vim" +" tabstop: length of an actual \t character: +" shiftwidth: length to use when shifting text (eg. <<, >> and == commands), (0 for ‘tabstop’): +" softtabstop: length to use when editing text (eg. TAB and BS keys), (0 for ‘tabstop’, -1 for ‘shiftwidth’): +" shiftround: round indentation to multiples of 'shiftwidth' when shifting text (so that it behaves like Ctrl-D / Ctrl-T): +set tabstop=4 +set shiftwidth=0 +set softtabstop=-1 +set shiftround -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" -" load custom config -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -" plugin 'toogleterm' need this or it will initialze a new terminal each time -" foucus on terminal -set hidden - -" show some whitespaces 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 +let mapleader="\" +let maplocalleader="\" + + +" set statusline=%n\ %<%f\ %LL\ %{&modified?'[+]':&modifiable\|\|&ft=~'^\\vhelp\|qf$'?'':'[-]'}%h%r%{&fenc=='utf-8'\|\|&fenc==''?'':'['.&fenc.']'}%{'['.&ff.']'}%{&bomb?'[BOM]':''}%{&eol?'':'[noeol]'}%{&diff?'[diff]':''}%=\ 0x%-4.8B\ \ \ \ %-14.(%l,%c%V%)\ %p%% + + +" plugin 'toogleterm' need this or it will initialze a new terminal each time foucus on terminal +set hidden + + +"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" +" config of vim-plug +"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" + +let s:plugs = [] +call add(s:plugs, 'neovim/nvim-lspconfig') + +" call add(s:plugs, 'kyazdani42/nvim-web-devicons') " for file icons +call add(s:plugs, 'kyazdani42/nvim-tree.lua') + +call add(s:plugs, 'nvim-lualine/lualine.nvim') + +call add(s:plugs, 'akinsho/toggleterm.nvim') + +call add(s:plugs, 'lukas-reineke/indent-blankline.nvim') + +" call add(s:plugs, 'bling/vim-bufferline') +call add(s:plugs, 'ap/vim-buftabline') + +call add(s:plugs, 'jupyter-vim/jupyter-vim') + +call add(s:plugs, 'projekt0n/github-nvim-theme') + + +function! s:setup_file(plug_name) + let l:pos_dot = strridx(a:plug_name, '.') + let l:pos_slash = strridx(a:plug_name, '/') + + let l:pos_dot = l:pos_dot > 0 ? l:pos_dot - 1 : -1 + let l:pos_slash = l:pos_slash > 0 ? l:pos_slash + 1 : 0 + return a:plug_name[l:pos_slash : l:pos_dot] .. '.vim' +endfunction + + +call plug#begin(has('nvim') ? stdpath('data') .. '/plugged' : '~/.vim/plugged') +for p in s:plugs + Plug p +endfor +call plug#end() + +for p in s:plugs + execute 'source' stdpath('config') .. '/plugins.d/' .. s:setup_file(p) +endfor diff --git a/plugins.vim.d/github-nvim-theme.vim b/plugins.d/github-nvim-theme.vim similarity index 100% rename from plugins.vim.d/github-nvim-theme.vim rename to plugins.d/github-nvim-theme.vim diff --git a/plugins.vim.d/indent-blankline.vim b/plugins.d/indent-blankline.vim similarity index 100% rename from plugins.vim.d/indent-blankline.vim rename to plugins.d/indent-blankline.vim diff --git a/plugins.d/jupyter-vim.vim b/plugins.d/jupyter-vim.vim new file mode 100644 index 0000000..5c650b8 --- /dev/null +++ b/plugins.d/jupyter-vim.vim @@ -0,0 +1,37 @@ +if has('nvim') + "let g:python3_host_prog = '~/miniconda3/envs/torch/bin/python3' + let g:python3_host_prog = '/usr/bin/python3' +else + set pyxversion=3 +endif + +" Always use the same virtualenv for vim, regardless of what Python +" environment is loaded in the shell from which vim is launched +" +" let g:vim_virtualenv_path = '~/miniconda3/envs/torch' +" if exists('g:vim_virtualenv_path') +" pythonx import os; import vim +" pythonx activate_this = os.path.join(vim.eval('g:vim_virtualenv_path'), 'bin/activate_this.py') +" pythonx with open(activate_this) as f: exec(f.read(), {'__file__': activate_this}) +" endif + + +""""""""""""""""""""""""" +" Key mapping +""""""""""""""""""""""""" + +" Run current file +nnoremap R :JupyterRunFile +nnoremap I :PythonImportThisFile + +" Change to directory of current file +nnoremap d :JupyterCd %:p:h + +" Send a selection of lines +nnoremap X :JupyterSendCell +nnoremap E :JupyterSendRange +nmap e JupyterRunTextObj +vmap e JupyterRunVisual + +" Debugging maps +nnoremap b :PythonSetBreak diff --git a/plugins.d/lualine.vim b/plugins.d/lualine.vim new file mode 100644 index 0000000..93d98ff --- /dev/null +++ b/plugins.d/lualine.vim @@ -0,0 +1,3 @@ +lua << END +require('lualine').setup() +END diff --git a/plugins.vim.d/nvim-lspconfig.vim b/plugins.d/nvim-lspconfig.vim similarity index 95% rename from plugins.vim.d/nvim-lspconfig.vim rename to plugins.d/nvim-lspconfig.vim index 66dc5ac..05d67c4 100644 --- a/plugins.vim.d/nvim-lspconfig.vim +++ b/plugins.d/nvim-lspconfig.vim @@ -5,6 +5,7 @@ lua << EOF local nvim_lsp = require('lspconfig') +-- local util = require('lsputil') -- Use an on_attach function to only map the following keys -- after the language server attaches to the current buffer @@ -41,13 +42,14 @@ 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', 'html' } +local servers = { 'pyright', 'html' } for _, lsp in ipairs(servers) do nvim_lsp[lsp].setup { on_attach = on_attach, flags = { debounce_text_changes = 150, - } + }, + root_dir = nvim_lsp.util.find_git_ancestor } end diff --git a/plugins.d/nvim-tree.vim b/plugins.d/nvim-tree.vim new file mode 100644 index 0000000..7ea840b --- /dev/null +++ b/plugins.d/nvim-tree.vim @@ -0,0 +1,27 @@ +lua << EOF +-- following options are the default +-- each of these are documented in `:help nvim-tree.OPTION_NAME` +vim.g.loaded_netrw = 1 +vim.g.loaded_netrwPlugin = 1 + +require("nvim-tree").setup({ + sort_by = "case_sensitive", + view = { + adaptive_size = true, + mappings = { + list = { + { key = "u", action = "dir_up" }, + }, + }, + }, + renderer = { + group_empty = true, + }, + filters = { + dotfiles = true, + }, +}) +EOF + + +nnoremap t :NvimTreeFocus diff --git a/plugins.vim.d/toggleterm.vim b/plugins.d/toggleterm.vim similarity index 100% rename from plugins.vim.d/toggleterm.vim rename to plugins.d/toggleterm.vim diff --git a/plugins.d/vim-buftabline.vim b/plugins.d/vim-buftabline.vim new file mode 100644 index 0000000..54f26da --- /dev/null +++ b/plugins.d/vim-buftabline.vim @@ -0,0 +1,3 @@ +let g:buftabline_numbers = 1 +let g:buftabline_indicators = 1 +let g:buftabline_separators = 1 diff --git a/plugins.vim b/plugins.vim deleted file mode 100644 index 68dfa80..0000000 --- a/plugins.vim +++ /dev/null @@ -1,31 +0,0 @@ -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" -" 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' - -Plug 'lukas-reineke/indent-blankline.nvim' - -" Declare the theme -Plug 'projekt0n/github-nvim-theme' - -" 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" -execute 'source' "~/.config/nvim/plugins.vim.d/github-nvim-theme.vim" -execute 'source' "~/.config/nvim/plugins.vim.d/indent-blankline.vim" diff --git a/plugins.vim.d/nvim-tree.vim b/plugins.vim.d/nvim-tree.vim deleted file mode 100644 index e13acc5..0000000 --- a/plugins.vim.d/nvim-tree.vim +++ /dev/null @@ -1,144 +0,0 @@ -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" -" 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 -