" Do not use smart case in command line mode, extracted from https://vi.stackexchange.com/a/16511/15292. augroup dynamic_smartcase autocmd! autocmd CmdLineEnter : set nosmartcase autocmd CmdLineLeave : set smartcase augroup END augroup term_settings autocmd! " Do not use number and relative number for terminal inside nvim autocmd TermOpen * setlocal norelativenumber nonumber " Go to insert mode by default to start typing command autocmd TermOpen * startinsert augroup END " More accurate syntax highlighting? (see `:h syn-sync`) augroup accurate_syn_highlight autocmd! autocmd BufEnter * :syntax sync fromstart augroup END " Return to last cursor position when opening a file augroup resume_cursor_position autocmd! autocmd BufReadPost * call s:resume_cursor_position() augroup END " Only resume last cursor position when there is no go-to-line command (something like '+23'). function s:resume_cursor_position() abort if line("'\"") > 1 && line("'\"") <= line("$") && &ft !~# 'commit' let l:args = v:argv " command line arguments for l:cur_arg in l:args " Check if a go-to-line command is given. let idx = match(l:cur_arg, '\v^\+(\d){1,}$') if idx != -1 return endif endfor execute "normal! g`\"zvzz" endif endfunction augroup numbertoggle autocmd! autocmd BufEnter,FocusGained,InsertLeave,WinEnter * if &nu | set rnu | endif autocmd BufLeave,FocusLost,InsertEnter,WinLeave * if &nu | set nornu | endif augroup END " Define or override some highlight groups augroup custom_highlight autocmd! autocmd ColorScheme * call s:custom_highlight() augroup END function! s:custom_highlight() abort " For yank highlight highlight YankColor ctermfg=59 ctermbg=41 guifg=#34495E guibg=#2ECC71 " For cursor colors highlight Cursor cterm=bold gui=bold guibg=#00c918 guifg=black highlight Cursor2 guifg=red guibg=red " For floating windows border highlight highlight FloatBorder guifg=LightGreen guibg=NONE " highlight for matching parentheses highlight MatchParen cterm=bold,underline gui=bold,underline endfunction augroup auto_close_win autocmd! autocmd BufEnter * call s:quit_current_win() augroup END " Quit Nvim if we have only one window, and its filetype match our pattern. function! s:quit_current_win() abort let l:quit_filetypes = ['qf', 'vista', 'NvimTree'] let l:should_quit = v:true let l:tabwins = nvim_tabpage_list_wins(0) for w in l:tabwins let l:buf = nvim_win_get_buf(w) let l:bf = getbufvar(l:buf, '&filetype') if index(l:quit_filetypes, l:bf) == -1 let l:should_quit = v:false endif endfor if l:should_quit qall endif endfunction augroup git_repo_check autocmd! autocmd VimEnter,DirChanged * call utils#Inside_git_repo() augroup END " ref: https://vi.stackexchange.com/a/169/15292 function! s:handle_large_file() abort let g:large_file = 10485760 " 10MB let f = expand("") if getfsize(f) > g:large_file || getfsize(f) == -2 set eventignore+=all " turning off relative number helps a lot set norelativenumber setlocal noswapfile bufhidden=unload buftype=nowrite undolevels=-1 else set eventignore-=all relativenumber endif endfunction augroup LargeFile autocmd! autocmd BufReadPre * call s:handle_large_file() augroup END " Load auto-command defined in Lua lua require("custom-autocmd")