diff options
Diffstat (limited to 'linux/home/.vim/vimrc')
| -rw-r--r-- | linux/home/.vim/vimrc | 296 |
1 files changed, 296 insertions, 0 deletions
diff --git a/linux/home/.vim/vimrc b/linux/home/.vim/vimrc new file mode 100644 index 0000000..ce034e9 --- /dev/null +++ b/linux/home/.vim/vimrc @@ -0,0 +1,296 @@ +"=============================================================================== +" Mappings/Keybindings/Commands +"=============================================================================== + +let mapleader = ";" " map leader to Semi colon + +inoremap jk <Esc> " Use <jk> to escape + +" 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> + +" Recent files (MRU) +nnoremap <leader>m :browse old<cr> +" Search files by name +"nnoremap <leader>p :find **/**<left> +" browse files from same dir as current file +nnoremap <leader>e :e %:p:h<CR> + +" Combine buffers list with buffer name +"nnoremap <Leader>b :buffers<CR>:buffer<Space> + +" Jump to a buffer +nnoremap <leader>b :ls t<cr>:b + +" 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> + +" tab navigation +noremap <C-t>h :tabprevious<CR> +noremap <C-t>l :tabnext<CR> +noremap <C-t>k :tabfirst<CR> +noremap <C-t>j :tablast<CR> +noremap <C-t>n :tabnew<CR> +noremap <C-t>e :tabedit<Space> +noremap <C-t>c :tabclose<CR> +noremap <C-t>m :tabm<Space> + +" 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`` +" Paste on next line +"nnoremap <]-p> m`O<ESC>p`` + +"inoremap <C-CR> <C-R>" +"set keywordprg=:help +"runtime ftplugin/man.vim + + +"=============================================================================== +" Settings +"=============================================================================== + +" 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 lazyredraw to false +"let &lazyredraw = 0 +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 relativenumber +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 +set mouse=a + +" FILE BROWSING: +let g:netrw_banner=0 " disable annoying banner +let g:netrw_browse_split=4 " open in prior window +let g:netrw_altv=1 " open splits to the right +let g:netrw_liststyle=3 " tree view +let g:netrw_fastbrowse = 0 +autocmd FileType netrw setl bufhidden=wipe + +" Faster vimgrep/grep via ripgrep +if executable("rg") + set grepprg=rg\ --vimgrep\ --no-heading + set grepformat=%f:%l:%c:%m,%f:%l:%m +endif + + +"=============================================================================== +" Colorscheme +"=============================================================================== + +" enable syntax, plugins (for netrw) and indentation +syntax enable + +"set shell=zsh +set termguicolors +set guicursor= +let &t_SI = "\e[6 q" +let &t_EI = "\e[2 q" + +"colorscheme desert +"colorscheme city-lights +set background=dark +highlight Normal guibg=NONE ctermbg=NONE +highlight EndOfBuffer ctermfg=NONE ctermbg=NONE + + +"------------------------------------------------------------------------------- + + +"=============================================================================== +" 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 + +"------------------------------------------------------------------------------- +" +" Function to update tmux status and .vi-mode file +"--------------------------------------- +function! UpdateTmuxStatus() abort + " Check if the current buffer has a man filetype + if &filetype ==# 'man' + return + endif + + " Determine the mode name based on the mode value + let mode = mode() + let mode_name = '' + if mode ==# 'n' + let mode_name = '-- NORMAL --' + elseif mode ==# 'i' || mode ==# 'ic' + let mode_name = '-- INSERT --' + else + let mode_name = '-- NORMAL --' + endif + + " Write the mode name to the file + call writefile([mode_name], expand('$HOME') . '/.vi-mode') + +endfunction + +" Function to refresh tmux status +function! s:UpdateTmux() abort + call system('tmux refresh-client -S') +endfunction + +" Set up autocommands for tmux status update +if !empty($TMUX) && system('command -v tmux >/dev/null 2>&1') == 0 +augroup TmuxStatus + autocmd! + autocmd ModeChanged * call UpdateTmuxStatus() | call s:UpdateTmux() +augroup END +endif + +"------------------------------------------------------------------------------- + + +"=============================================================================== +" Statusline Configuration +"=============================================================================== + +" Autoload statusline +"--------------------------------------- +" Load statusline script +if filereadable(expand("~/.vim/autoload/statusline.vim")) + source ~/.vim/autoload/statusline.vim +endif + +" Call the statusline activation function +call autoload#statusline#ActivateStatusline() + +"------------------------------------------------------------------------------- |
