aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.vim/vimrc421
1 files changed, 421 insertions, 0 deletions
diff --git a/.vim/vimrc b/.vim/vimrc
index e69de29..4142fe2 100644
--- a/.vim/vimrc
+++ b/.vim/vimrc
@@ -0,0 +1,421 @@
+
+"===============================================================================
+" Mappings/Keybindings/Commands
+"===============================================================================
+
+let mapleader = ";" " map leader to Semi colon
+" Use <jk> to escape
+inoremap jk <Esc>
+" Easier split navigations, just ctrl-j instead of ctrl-w then j
+nnoremap <C-J> <C-W><C-J>
+nnoremap <C-K> <C-W><C-K>
+nnoremap <C-L> <C-W><C-L>
+nnoremap <C-H> <C-W><C-H>
+" Combine buffers list with buffer name
+nnoremap <Leader>b :buffers<CR>:buffer<Space>
+" Map buffer next, prev and delete to <leader+(n/p/d)>
+map <leader>n :bn<cr>
+map <leader>p :bp<cr>
+map <leader>d :bd<cr>
+" Set alt + j/k to switch lines of texts or simply move them
+:nnoremap <silent><A-k> :let save_a=@a<Cr><Up>"add"ap<Up>:let @a=save_a<Cr>
+:nnoremap <silent><A-j> :let save_a=@a<Cr>"add"ap:let @a=save_a<Cr>
+" Swap two pieces of text, use x to cut in visual mode, then use Ctrl-x in
+" visual mode to select text to swap with
+:vnoremap <C-X> <Esc>`.``gvP``P
+" To resize in different steps, you can create maps that will adjust the window
+" size differently. For example to increase the window size by a factor of 1.5
+" and decrease the window size by 0.67, you can map this:
+"nnoremap <silent> <Leader>+ :exe "resize " . (winheight(0) * 3/2)<CR>
+"nnoremap <silent> <Leader>- :exe "resize " . (winheight(0) * 2/3)<CR>
+nnoremap <Leader>+ :resize +5<CR>
+nnoremap <Leader>- :resize -5<CR>
+nnoremap <Leader>> :vertical resize +5<CR>
+nnoremap <Leader>< :vertical resize -5<CR>
+" Toggle set number
+nnoremap <leader>$ :NumbersToggle<CR>
+"nnoremap <leader>% :NumbersOnOff<CR>
+" Copy and Paste with <C-c> and <C-v>
+"vmap <C-c> y:call system("xclip -i -selection clipboard", getreg("\""))<CR>:call system("xclip -i", getreg("\""))<CR>
+"nmap <C-v> :call setreg("\"",system("xclip -o -selection clipboard"))<CR>p
+nnoremap <expr> p (v:register == '"' && &clipboard =~ 'unnamed' ? '"*p' : '"' . v:register . 'p')
+" Use command :Vb for Visual Block or <C-q> since <C-v> is used for Copy
+command! Vb normal! <C-v>
+" Map <w!!> to save/edit a root permission/read-only file, only works in
+" traditional vim and not neovim
+cmap w!! %!sudo tee > /dev/null
+nnoremap <leader>x :silent !chmod +x %<CR>
+"nnoremap <[-p> m`o<ESC>p``
+"nnoremap <]-p> m`O<ESC>p``
+" Paste on next line
+"inoremap <C-CR> <C-R>"
+set keywordprg=:help
+runtime ftplugin/man.vim
+
+
+"===============================================================================
+" Settings
+"===============================================================================
+
+"let g:nvim_system_wide = 1 " let whole system use nvim config
+set shell=zsh
+set termguicolors
+set guicursor=
+let &t_SI = "\e[6 q"
+let &t_EI = "\e[2 q"
+
+" reset the cursor on start (for older versions of vim, usually not required)
+augroup myCmds
+au!
+autocmd VimEnter * silent !echo -ne "\e[2 q"
+augroup END
+" Neovim requires xclip, check if normal vim has +clipboard by
+" <:echo has('clipboard')> from within Vim (if the output is 1, good to
+" go otherwise 0 then need a build that has it
+" Next two commands make vim use X11 clipboard
+set clipboard+=unnamedplus
+let g:clipbrdDefaultReg = '+'
+"let g:loaded_clipboard_provider = 1
+" <:e %:h/filename> will create a new file named filename in the same
+" directory as the currently open file, and write it.
+set autochdir " or use this to use <:e> to create a file in current directory
+set splitright " make vsplit put the new buffer on the right of the current buffer
+set splitbelow " make split put the new buffer below the current buffer
+" :Bclose script (delete a buffer without closing the window) sourced as a
+" plugin in ~/.config/nvim/plugin/bclose.vim | keymap: <leader>bd
+let bclose_multiple = 1
+"set syntax
+" Compute syntax highlighting from beginning of file. (By default, vim only
+" looks 200 lines back, which can make it highlight code incorrectly in some
+" long files.)
+autocmd BufEnter * :syntax sync fromstart
+" Don't syntax highlight markdown because it's often wrong
+autocmd! FileType mkd setlocal syn=off
+"set ttyfast
+"set lazyredraw
+set timeout timeoutlen=1000 ttimeoutlen=100 " fix slow O inserts
+set scrolloff=8 sidescrolloff=8
+set tabstop=4 softtabstop=4 shiftwidth=4 expandtab
+set autoindent
+set smartindent
+" Also load indent files, to automatically do language-dependent indenting.
+filetype plugin indent on
+set exrc
+set number
+set hidden
+set noerrorbells
+set nowrap
+set ignorecase
+set smartcase
+set noswapfile
+set nobackup
+set incsearch
+set cursorline
+set showmatch
+set showcmd
+set incsearch
+set hlsearch
+set laststatus=2
+let g:python3_host_prog = '/usr/bin/python3'
+"let g:loaded_python3_provider = 1
+let g:sh_noisk=1
+set modeline
+set modelines=3 " modelines (comments that set vim options on a per-file basis)
+set foldmethod=manual
+set nofoldenable " turn folding off
+" Insert only one space when joining lines that contain sentence-terminating
+" punctuation like `.`.
+set nojoinspaces
+set autoread " if a file is changed outside of vim, automatically reload it without asking
+set diffopt=vertical " diffs are shown side-by-side not above/below
+set signcolumn=no " always show the sign column
+set textwidth=80
+"-------------------------------------------------------------------------------
+
+
+"===============================================================================
+" Plugins
+"===============================================================================
+
+" Auto-Install vim-plug
+if empty(glob('~/.vim/autoload/plug.vim'))
+ silent !curl -fLo ~/.vim/autoload/plug.vim --create-dirs
+ \ https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim
+ "autocmd VimEnter * PlugInstall
+ "autocmd VimEnter * PlugInstall | source $MYVIMRC
+endif
+
+" :so % :PlugInstall
+call plug#begin('~/.vim/autoload/plugged')
+"Plug 'glepnir/dashboard-nvim'
+Plug 'christoomey/vim-tmux-navigator'
+Plug 'preservim/vimux'
+Plug 'myusuf3/numbers.vim'
+Plug 'romainl/vim-cool'
+"Plug 'ervandew/supertab'
+"Plug 'neoclide/coc.nvim', {'branch': 'release'}
+Plug 'sheerun/vim-polyglot'
+Plug 'vim-airline/vim-airline'
+Plug 'ryanoasis/vim-devicons'
+Plug 'rbgrouleff/bclose.vim'
+"Plug 'ms-jpq/chadtree', {'branch': 'chad', 'do': 'python3 -m chadtree deps'}
+Plug 'lambdalisue/fern.vim'
+Plug 'junegunn/fzf', { 'do': { -> fzf#install() } }
+Plug 'junegunn/fzf.vim'
+Plug 'airblade/vim-rooter'
+"Plug 'SirVer/ultisnips'
+"Plug 'honza/vim-snippets'
+Plug 'airblade/vim-gitgutter'
+Plug 'tpope/vim-eunuch'
+Plug 'tpope/vim-fugitive'
+Plug 'tpope/vim-surround'
+Plug 'tpope/vim-obsession'
+Plug 'tpope/vim-unimpaired'
+Plug 'scrooloose/syntastic'
+Plug 'w0rp/ale'
+Plug 'davidhalter/jedi-vim'
+"Plug 'valloric/youcompleteme' " vim needs to be compiled with python/ compiled with install.py in plugin directory
+Plug 'Lenovsky/nuake'
+Plug 'voldikss/vim-floaterm'
+Plug 'gruvbox-community/gruvbox'
+Plug 'srcery-colors/srcery-vim'
+Plug 'tomasr/molokai'
+Plug 'ayu-theme/ayu-vim'
+Plug 'sjl/badwolf'
+Plug 'joshdick/onedark.vim'
+call plug#end()
+
+"source $HOME/.vim/plug-config/coc.vim
+
+"-------------------------------------------------------------------------------
+
+
+"===============================================================================
+" Plugin Settings
+"===============================================================================
+
+" Fugitive statusline
+"---------------------------------------
+"set statusline=%{fugitive#statusline()}%F%m%r%h%w\ (%{&ff}){%Y}\ [%l,%v][%p%%]
+"-------------------------------------------------------------------------------
+"" Show the buffer number in the status line.
+"set statusline=%02n:%<%f\ %h%m%r%=%-14.(%l,%c%V%)\ %P
+"set statusline=%{fugitive#statusline()}02n:%<%f\ %h%m%r%=%-14.(%l,%c%V%)\ %P
+"-------------------------------------------------------------------------------
+
+" Airline
+"---------------------------------------
+let g:airline#extensions#tabline#enabled = 1
+let g:airline#extensions#tabline#show_buffers = 1
+let g:airline_powerline_fonts = 1
+let g:airline#extensions#tabline#buffer_nr_show = 1
+let g:airline_theme='onedark'
+"-------------------------------------------------------------------------------
+
+" Float Term
+"---------------------------------------
+" Configuration example
+let g:floaterm_keymap_new = '<Leader>t'
+let g:floaterm_keymap_prev = '<Leader>tn'
+let g:floaterm_keymap_next = '<Leader>tp'
+let g:floaterm_keymap_toggle = '<Leader>tt'
+"-------------------------------------------------------------------------------
+
+" Nuake
+"---------------------------------------
+" Toggle Nuake terminal panel
+nnoremap <A-t> :Nuake<CR>
+inoremap <A-t> <C-\><C-n>:Nuake<CR>
+tnoremap <A-t> <C-\><C-n>:Nuake<CR>
+let g:nuake_per_tab = 1 " Enable the Nuake instance per tab page. (default 1)
+let g:close_if_last_standing = 1 " Close the editor if the Nuake window is the last one. (default 1)
+let g:nuake_position = 'right'
+"let g:nuake_size = 0.2
+"-------------------------------------------------------------------------------
+
+" Vimux
+"---------------------------------------
+" Prompt for a command to run
+map <Leader>vp :VimuxPromptCommand<CR>
+" Run last command executed by VimuxRunCommand
+map <Leader>vl :VimuxRunLastCommand<CR>
+" Inspect runner pane
+map <Leader>vi :VimuxInspectRunner<CR>
+" Zoom the tmux runner pane
+map<leader>vz :VimuxZoomRunner<CR>
+"-------------------------------------------------------------------------------
+
+" Snippets
+"---------------------------------------
+" Snippets — code snippets allow you to quickly write some boilerplate code
+" that is often repetitive. To add code snippets support, you will have to add
+" UltiSnips.
+let g:UltiSnipsExpandTrigger = "<c-tab>"
+"let g:UltiSnipsJumpForwardTrigger = "<tab>"
+"let g:UltiSnipsJumpBackwardTrigger = "<s-tab>"
+"-------------------------------------------------------------------------------
+
+" Youcompleteme
+"---------------------------------------
+"let g:ycm_global_ycm_extra_conf = '~/.config/nvim/autoload/plugged/youcompleteme/.ycm_extra_conf.py'
+" ---> compatibility with another plugin (ultisnips) <---
+"let g:ycm_key_list_select_completion = [ '<C-n>', '<Down>' ]
+"let g:ycm_key_list_previous_completion = [ '<C-p>', '<Up>' ]
+"let g:SuperTabDefaultCompletionType = '<C-n>'
+" ---> disable preview window <---
+"set completeopt-=preview
+" ---> navigating to the definition of a a symbol <---
+"map <leader>g :YcmCompleter GoToDefinitionElseDeclaration<CR>
+"-------------------------------------------------------------------------------
+
+
+"===============================================================================
+" File Manager & FZF
+"===============================================================================
+
+" CHADTree Filemanager/project drawer (NerdTree killer)
+"---------------------------------------
+"" to toggle CHADTree run command :CHADopen or use hotkey <leader>v :
+"nnoremap <leader>f <cmd>CHADopen<cr>
+""nnoremap <leader>v <cmd>CHADopen<cr> " Default Behaviour
+"nnoremap <A-f> <cmd>CHADopen<cr>
+"" :CHADhelp to view documentation
+"" Add a hotkey to clear quickfix list:
+""nnoremap <leader>qk <cmd>call setqflist([])<cr>
+"let g:chadtree_settings = { 'view.width': 25 }
+"-------------------------------------------------------------------------------
+
+" FZF fuzzy finder
+"---------------------------------------
+" Enable per-command history.
+" CTRL-N and CTRL-P will be automatically bound to next-history and
+" previous-history instead of down and up. If you don't like the change,
+" explicitly bind the keys to down and up in your $FZF_DEFAULT_OPTS.
+let g:fzf_history_dir = '~/.local/share/fzf-history'
+map <leader>z :FZF<CR>
+map <leader>a :Files<CR>
+map <leader>l :Lines<CR>
+map <leader>L :BLines<CR>
+map <leader>B :Buffers<CR>
+map <leader>h :History:<CR>
+nnoremap <leader>g :Rg<CR>
+"nnoremap <leader>t :Tags<CR>
+nnoremap <leader>m :Marks<CR>
+" This is the default extra key bindings
+let g:fzf_action = {
+ \ 'ctrl-t': 'tab split',
+ \ 'ctrl-x': 'split',
+ \ 'ctrl-y': 'vsplit' }
+let g:fzf_tags_command = 'ctags -R'
+" Border color
+let g:fzf_layout = {'up':'~90%', 'window': { 'width': 0.8, 'height': 0.8,'yoffset':0.5,'xoffset': 0.5, 'highlight': 'Todo', 'border': 'sharp' } }
+let $FZF_DEFAULT_OPTS = '--layout=reverse --info=inline'
+let $FZF_DEFAULT_COMMAND="rg --files --hidden"
+" Customize fzf colors to match your color scheme
+let g:fzf_colors =
+ \ { 'fg': ['fg', 'Normal'],
+ \ 'bg': ['bg', 'Normal'],
+ \ 'hl': ['fg', 'Comment'],
+ \ 'fg+': ['fg', 'CursorLine', 'CursorColumn', 'Normal'],
+ \ 'bg+': ['bg', 'CursorLine', 'CursorColumn'],
+ \ 'hl+': ['fg', 'Statement'],
+ \ 'info': ['fg', 'PreProc'],
+ \ 'border': ['fg', 'Ignore'],
+ \ 'prompt': ['fg', 'Conditional'],
+ \ 'pointer': ['fg', 'Exception'],
+ \ 'marker': ['fg', 'Keyword'],
+ \ 'spinner': ['fg', 'Label'],
+ \ 'header': ['fg', 'Comment'] }
+" Get Files
+command! -bang -nargs=? -complete=dir Files
+ \ call fzf#vim#files(<q-args>, fzf#vim#with_preview({'options': ['--layout=reverse', '--info=inline']}), <bang>0)
+" Get text in files with Rg
+command! -bang -nargs=* Rg
+ \ call fzf#vim#grep(
+ \ 'rg --column --line-number --no-heading --color=always --smart-case '.shellescape(<q-args>), 1,
+ \ fzf#vim#with_preview(), <bang>0)
+" Ripgrep advanced
+function! RipgrepFzf(query, fullscreen)
+ let command_fmt = 'rg --column --line-number --no-heading --color=always --smart-case %s || true'
+ let initial_command = printf(command_fmt, shellescape(a:query))
+ let reload_command = printf(command_fmt, '{q}')
+ let spec = {'options': ['--phony', '--query', a:query, '--bind', 'change:reload:'.reload_command]}
+ call fzf#vim#grep(initial_command, 1, fzf#vim#with_preview(spec), a:fullscreen)
+endfunction
+command! -nargs=* -bang RG call RipgrepFzf(<q-args>, <bang>0)
+" Git grep
+command! -bang -nargs=* GGrep
+ \ call fzf#vim#grep(
+ \ 'git grep --line-number '.shellescape(<q-args>), 0,
+ \ fzf#vim#with_preview({'dir': systemlist('git rev-parse --show-toplevel')[0]}), <bang>0)
+command! -bang FM call fzf#run(fzf#wrap({'source': 'cat ~/.fzf-marks | sed "s/.*: \(.*\)$/\1/" | sed "s#~#${HOME}#"', 'sink': 'lcd'}, <bang>0))
+"-------------------------------------------------------------------------------
+
+
+"===============================================================================
+" Colorscheme
+"===============================================================================
+
+"colorscheme gruvbox
+"colorscheme srcery
+"colorscheme molokai
+"colorscheme ayu
+"let ayucolor="light" " for light version of theme
+"let ayucolor="mirage" " for mirage version of theme
+"let ayucolor="dark" " for dark version of theme
+"colorscheme badwolf
+"let g:badwolf_darkgutter = 0 " Make the gutters darker than the background. Default 0.
+"let g:badwolf_tabline = 1 " 1 is default, 0 is lighter and 2 or 3 is darker a tabline
+colorscheme onedark
+highlight Normal guibg=NONE
+"highlight Normal guibg=none
+"set background=dark
+"-------------------------------------------------------------------------------
+
+
+"===============================================================================
+" Functions/Scripts
+"===============================================================================
+
+" Enable mouse scrollback
+"---------------------------------------
+set mouse=a
+tnoremap <Esc> <C-\><C-n>
+tnoremap <c-b> <c-\><c-n>
+function! ClearTerminal()
+ set scrollback=1
+ let &g:scrollback=1
+ echo &scrollback
+ call feedkeys("\i")
+ call feedkeys("clear\<CR>")
+ call feedkeys("\<C-\>\<C-n>")
+ call feedkeys("\i")
+ sleep 100m
+ let &scrollback=s:scroll_value
+endfunction
+"-------------------------------------------------------------------------------
+
+" :Rename {newname}
+"---------------------------------------
+function! RenameFile()
+ let old_name = expand('%')
+ let new_name = input('New file name: ', expand('%'), 'file')
+ if new_name != '' && new_name != old_name
+ exec ':saveas ' . new_name
+ exec ':silent !rm ' . old_name
+ redraw!
+ endif
+endfunction
+map <leader>r :call RenameFile()<cr>
+"-------------------------------------------------------------------------------
+
+" Return to the same line when we reopen a file
+"---------------------------------------
+ augroup line_return
+ au!
+ au BufReadPost *
+ \ if line("'\"") > 0 && line("'\"") <= line("$") |
+ \ execute 'normal! g`"zvzz' |
+ \ endif
+ augroup END
+"-------------------------------------------------------------------------------