You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

330 lines
7.5 KiB
VimL

" Set encoding
set encoding=UTF-8
" Set keymodel
set keymodel=startsel,stopsel
set backspace=indent,eol,start
set grepprg=rg\ --vimgrep\ --smart-case\ --follow
set clipboard+=unnamedplus
" Set colorscheme
colorscheme codedark
" Disable compatibility with vi which can cause unexpected issues.
set nocompatible
" Enable type file detection. Vim will be able to try to detect the type of file in use.
filetype on
" Enable plugins and load plugin for the detected file type.
filetype plugin on
" Load an indent file for the detected file type.
filetype indent on
" Turn syntax highlighting on
syntax on
" Add numbers to each line on the left-hand side
set number
set relativenumber
" Hihglight cursor line
set cursorline
" Set mouse scroll
set mouse=a
" Set shift width to 4 spaces
set shiftwidth=4
" Set tab width to 4 columns
set tabstop=4
" Use space instead of tab
set expandtab
" Do not wrap lines.
set nowrap
" Do not let cursor scroll below or above N number of lines when scrolling
set scrolloff=10
" While searching through a file incrementally highlight matching characters
set incsearch
" Show partial command you type in the last line of screen
set showcmd
" Show the mode you are in last line
set showmode
" Show matching words during search
set showmatch
" Use highlighting when doing a search
set hlsearch
" Set the commands to save in history, default is 20
set history=1000
" Enable auto completion menu after pressing TAB
set wildmenu
" Make wildmenu behave like Bash completion
set wildmode=list:longest
" Wildmenu will ignore files with these extensions, bc we don't want to edit
" them with vim
set wildignore=*.docx,*.jpg,*.png,*.gif,*.pdf,*.pyc,*.exe,*.flv,*.img,*.xlsx
" PLUGINS ----------------------------------------------------------------- {{{
" Plugin code goes here
let data_dir = has('nvim') ? stdpath('data') . '/site' : '~/.vim'
if empty(glob(data_dir . '/autoload/plug.vim'))
silent execute '!curl -fLo '.data_dir.'/autoload/plug.vim --create-dirs https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim'
autocmd VimEnter * PlugInstall --sync | source $MYVIMRC
endif
call plug#begin('~/.vim/plugged')
Plug 'tomasiser/vim-code-dark'
Plug 'dense-analysis/ale'
Plug 'preservim/nerdtree'
Plug 'mbbill/undotree'
Plug 'ryanoasis/vim-devicons'
Plug 'junegunn/goyo.vim'
Plug 'tpope/vim-fugitive'
Plug 'airblade/vim-gitgutter'
Plug 'ap/vim-css-color'
Plug 'tpope/vim-commentary'
Plug 'tpope/vim-unimpaired'
Plug 'tpope/vim-surround'
Plug 'junegunn/fzf', { 'do': { -> fzf#install() } }
Plug 'junegunn/fzf.vim'
Plug 'mattn/emmet-vim'
Plug 'manzeloth/live-server'
Plug 'pangloss/vim-javascript'
Plug 'vim-python/python-syntax'
Plug 'vim-airline/vim-airline'
Plug 'vim-airline/vim-airline-themes'
if has('nvim')
Plug 'nvim-treesitter/nvim-treesitter', {'do': ':TSUpdate'}
Plug 'nvim-treesitter/nvim-treesitter-context'
endif
" if has('nvim')
" Plug 'Shougo/deoplete.nvim', { 'do': ':UpdateRemotePlugins' }
" else
" Plug 'Shougo/deoplete.nvim'
" Plug 'roxma/nvim-yarp'
" Plug 'roxma/vim-hug-neovim-rpc'
" endif
" let g:deoplete#enable_at_startup = 1
call plug#end()
let g:ale_linters = {
\ 'python': ['flake8'],
\ }
let g:ale_fixers = {
\ '*': ['remove_trailing_lines', 'trim_whitespace'],
\ 'javascript': ['prettier_eslint'],
\ 'css': ['prettier'],
\ 'python': ['black', 'isort']
\}
let g:ale_fix_on_save = 1
let g:ale_sign_error = '●'
let g:ale_sign_warning = '.'
" call deoplete#custom#option('sources', {
" \ '_': ['ale'],
" \ })
" }}}
" MAPPINGS ----------------------------------------------------------------- {{{
" Mappings code goes here
" Set backslash as leader key
let mapleader = '\'
" Press \\ to jump back to last cursor position
nnoremap <leader>\ ``
" Type jj to exit insert mode quickly
inoremap jj <Esc>
" Press the space bar to type the : char in command mode
nnoremap <space> :
" Press the letter o will open a new line below the current one
" Exit insert mode after creating a new line above or below current line
nnoremap o o<esc>
nnoremap O O<esc>
" Center the cursor vertically when moving to next word during search
nnoremap n nzz
nnoremap N Nzz
" Yank from cursor to the end of line
nnoremap Y y$
" Map F5 key to run a Python script
" F5 is mapped with a chain of commands
" :w saves file
" <CR> is like pressing enter
" !clear runs the external clear screen command
" !python3 % executes current file with python
nnoremap <f5> :w <CR>:!clear <CR>:!python3 % <CR>
nnoremap <f12> :bel term <CR><c-w>N <CR>:res 5 <CR>
" You can split window in Vim by typing :split or :vsplit
" Navigate the split view easier by pressing CTRL+j CTRL+k CTRL+h CTRL+l
nnoremap <c-j> <c-w>j
nnoremap <c-k> <c-w>k
nnoremap <c-h> <c-w>h
nnoremap <c-l> <c-w>l
" Resize split windows using arrow keys by pressing:
" CTRL+UP CTRL+DOWN CTRL+LEFT CTRL+RIGHT
nnoremap <c-up> <c-w>+
nnoremap <c-down> <c-w>-
nnoremap <c-left> <c-w>>
nnoremap <c-right> <c-w><
" Ctrl c ctrl v ecc
vmap <C-c> y<Esc>i
vmap <C-x> d<Esc>i
map <C-v> Pi
imap <C-v> <Esc>Pi
imap <C-z> <Esc>ui
" Word wrap navigation
nnoremap <expr> j v:count ? 'j' : 'gj'
nnoremap <expr> k v:count ? 'k' : 'gk'
" Overwrite arrow navigation
" Move text left and right
nmap <left> <<
nmap <right> >>
vmap <left> <gv
vmap <right> >gv
" Move text up and down
nmap <up> [e
nmap <down> ]e
vmap <up> [egv
vmap <down> ]egv
" fzf specific mappings
nnoremap <silent> <Leader>b :Buffer<CR>
nnoremap <silent> <C-f> :Files<CR>
nnoremap <silent> <Leader>f :Rg<CR>
nnoremap <silent> <Leader>/ :BLines<CR>
nnoremap <silent> <Leader>' :Marks<CR>
nnoremap <silent> <Leader>g :Commits<CR>
nnoremap <silent> <Leader>H :Helptags<CR>
nnoremap <silent> <Leader>hh :History<CR>
nnoremap <silent> <Leader>h: :History:<CR>
nnoremap <silent> <Leader>h/ :History/<CR>
" Terminal specific mappings
" vim-powered terminal in new window
map <Leader>t :term ++close<cr>
tmap <Leader>t <c-w>:term ++close<cr>
" vim-powered terminal in new tab
map <Leader>T :tab term ++close<cr>
tmap <Leader>T <c-w>:tab term ++close<cr>
" Goyo specific mappings
nnoremap <leader>z :Goyo<cr>
" NERDTree specific mappings
" Map the F3 key to toggle NERDTree open and close
nnoremap <F3> :NERDTreeToggle<cr>
" Have nerdtree ignore certain files and directories
let NERDTreeIgnore=['\.git$', '\.mp4$', '\.ogg$', '\.iso$', '\.pdf$', '\.pyc$', '\.odt$', '\.db$']
nnoremap <F4> :UndotreeToggle<CR>
" ALE specific mappings
nmap <silent> <C-e> <Plug>(ale_next_wrap)
" }}}
" VIMSCRIPT ----------------------------------------------------------------- {{{
" This will enable code folding
" Use the marker method of folding
augroup filetype_vim
autocmd!
autocmd FileType vim setlocal foldmethod=marker
augroup END
" If the current file type is MD, set line wrap
autocmd FileType markdown setlocal wrap linebreak nolist
set backup
if !isdirectory($HOME."/.vim/backup")
silent! execute "!mkdir ~/.vim/backup"
endif
set backupdir=~/.vim/backup
"not generate .swap
set noswapfile
" More Vimscripts code goes here
" }}}
" " STATUS LINE ----------------------------------------------------------------- {{{
" " Status bar code goes here
" set statusline=
" " Status line left side
" set statusline+=\ %F\ %M\ %Y\ %R
" " Use a divider to separate left side from right side
" set statusline+=%=
" " Status line right side
" set statusline+=\ ascii:\ %b\ hex:\ 0x%B\ row:\ %l\ col:\ %c\ percent:\ %p%%
" " Show status on second to last line
" set laststatus=2
" " }}}