Last active
June 11, 2026 12:06
-
-
Save keevie/e95786c0c794f3e2c11f10c995ade754 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| " Neovim Configuration | |
| " Install vim-plug if not present: | |
| " curl -fLo ~/.local/share/nvim/site/autoload/plug.vim --create-dirs \ | |
| " https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim | |
| " Then open nvim and run :PlugInstall | |
| " ============================================================================= | |
| " General Settings | |
| " ============================================================================= | |
| set clipboard=unnamed | |
| set updatetime=300 | |
| set shortmess+=c | |
| set linebreak | |
| set incsearch | |
| set scrolloff=5 | |
| set tabstop=2 softtabstop=2 shiftwidth=2 expandtab | |
| set ignorecase | |
| set smartcase | |
| set termguicolors | |
| set omnifunc=syntaxcomplete#Complete | |
| set lazyredraw | |
| set iskeyword+=- | |
| set foldcolumn=1 | |
| set cinoptions=l1 | |
| set noswapfile | |
| set undofile | |
| set undodir=$HOME/.local/share/nvim/undodir | |
| set backupdir=$HOME/.local/share/nvim/backup,. | |
| set directory=$HOME/.local/share/nvim/swap,. | |
| set laststatus=2 | |
| set modeline | |
| set mouse=a | |
| set wildmode=longest,list,full | |
| set wildmenu | |
| set number | |
| set numberwidth=3 | |
| let mapleader = "\<Space>" | |
| " Prevent tar plugin from loading | |
| let g:loaded_tarPlugin = 1 | |
| let g:loaded_tar = 1 | |
| " ============================================================================= | |
| " Plugins | |
| " ============================================================================= | |
| call plug#begin('~/.local/share/nvim/plugged') | |
| " Colorschemes | |
| Plug 'sonph/onehalf', {'rtp': 'vim/'} | |
| " Navigation & Search | |
| Plug 'junegunn/fzf', { 'do': { -> fzf#install() } } | |
| Plug 'junegunn/fzf.vim' | |
| Plug 'mileszs/ack.vim' | |
| Plug 'nvim-neo-tree/neo-tree.nvim', { 'branch': 'v3.x' } | |
| Plug 'nvim-lua/plenary.nvim' | |
| Plug 'nvim-tree/nvim-web-devicons' | |
| Plug 'MunifTanjim/nui.nvim' | |
| Plug 'yssl/QFEnter' | |
| " Git | |
| Plug 'tpope/vim-fugitive' | |
| Plug 'tpope/vim-rhubarb' | |
| Plug 'mattn/gist-vim' | |
| Plug 'mattn/webapi-vim' | |
| " Language Support | |
| Plug 'fatih/vim-go' | |
| Plug 'sheerun/vim-polyglot' | |
| Plug 'leafgarland/typescript-vim' | |
| Plug 'posva/vim-vue' | |
| Plug 'sebdah/vim-delve' | |
| " Completion & LSP | |
| Plug 'neoclide/coc.nvim', {'branch': 'release'} | |
| Plug 'ervandew/supertab' | |
| Plug 'w0rp/ale' | |
| " Editing | |
| Plug 'tpope/vim-surround' | |
| Plug 'tpope/vim-repeat' | |
| Plug 'tpope/vim-commentary' | |
| Plug 'tpope/vim-unimpaired' | |
| Plug 'tpope/vim-endwise' | |
| Plug 'jiangmiao/auto-pairs' | |
| Plug 'AndrewRadev/splitjoin.vim' | |
| Plug 'godlygeek/tabular' | |
| Plug 'editorconfig/editorconfig-vim' | |
| " UI | |
| Plug 'bling/vim-airline' | |
| Plug 'vim-airline/vim-airline-themes' | |
| Plug 'bling/vim-bufferline' | |
| Plug 'junegunn/rainbow_parentheses.vim' | |
| Plug 'Yggdroot/indentLine' | |
| " Utilities | |
| Plug 'tpope/vim-obsession' | |
| Plug 'tpope/vim-eunuch' | |
| Plug 'simnalamburt/vim-mundo' | |
| Plug 'metakirby5/codi.vim' | |
| Plug 'krisajenkins/vim-pipe' | |
| " Ruby/Rails | |
| Plug 'tpope/vim-rails' | |
| Plug 'tpope/vim-bundler' | |
| Plug 'thoughtbot/vim-rspec' | |
| " Snippets | |
| Plug 'honza/vim-snippets' | |
| Plug 'justinj/vim-react-snippets' | |
| Plug 'MarcWeber/vim-addon-mw-utils' | |
| Plug 'tomtom/tlib_vim' | |
| " Tags | |
| Plug 'grassdog/tagman.vim' | |
| call plug#end() | |
| " ============================================================================= | |
| " Colorscheme | |
| " ============================================================================= | |
| syntax enable | |
| filetype plugin indent on | |
| colorscheme onehalfdark | |
| highlight Pmenu guibg=#282c34 | |
| highlight Pmenu guifg=#dcdfe4 | |
| " ============================================================================= | |
| " Airline | |
| " ============================================================================= | |
| let g:airline_theme = 'onehalfdark' | |
| let g:airline_powerline_fonts = 1 | |
| let g:airline#extensions#whitespace#checks = [] | |
| let g:airline#extensions#ale#enabled = 1 | |
| let g:airline_section_c = '%f' | |
| let g:airline_section_y = '%{bufnr("%")}' | |
| let g:airline_section_z = '%l/%L' | |
| " ============================================================================= | |
| " Key Mappings | |
| " ============================================================================= | |
| " Escape insert mode | |
| inoremap jk <Esc> | |
| " Clear search highlight | |
| nnoremap <leader>n :noh<CR> | |
| " Neo-tree | |
| nnoremap <leader>o :Neotree toggle<CR> | |
| " Splitjoin | |
| nmap sj :SplitjoinSplit<CR> | |
| nmap sk :SplitjoinJoin<CR> | |
| " FZF | |
| nnoremap <Leader><Space> :GFiles<CR> | |
| nnoremap <Leader>b :Buffers<CR> | |
| nnoremap <Leader>a :Ack<Space> | |
| " Buffer navigation | |
| nmap <Leader><Tab> :bn<CR> | |
| " Window navigation | |
| nnoremap J <C-w>j | |
| nnoremap K <C-w>k | |
| nnoremap H <C-w>h | |
| nnoremap L <C-w>l | |
| nnoremap I J | |
| " Command mode shortcut | |
| noremap ; : | |
| " Disable Ex mode | |
| nnoremap Q <Nop> | |
| " Mundo (undo tree) | |
| nnoremap <Leader>u :MundoToggle<CR> | |
| " Reload config | |
| nnoremap <leader>sop :source $MYVIMRC<cr> | |
| " Tabularize | |
| nnoremap <Leader>a= :Tabularize /=<CR> | |
| vnoremap <Leader>a= :Tabularize /=<CR> | |
| nnoremap <Leader>a: :Tabularize /:\zs<CR> | |
| vnoremap <Leader>a: :Tabularize /:\zs<CR> | |
| " Visual search | |
| vnoremap <silent>* <ESC>:call VisualSearch('/')<CR>/<CR> | |
| function! VisualSearch(direction) | |
| let l:register=@@ | |
| normal! gvy | |
| let l:search=escape(@@, '$.*/\[]') | |
| if a:direction=='/' | |
| execute 'normal! /'.l:search | |
| else | |
| execute 'normal! ?'.l:search | |
| endif | |
| let @/=l:search | |
| normal! gV | |
| let @@=l:register | |
| endfunction | |
| " ============================================================================= | |
| " Plugin Settings | |
| " ============================================================================= | |
| " Ack / Ag | |
| let g:ackprg = 'ag --vimgrep --smart-case' | |
| " ALE | |
| let g:ale_sign_error = '✖' | |
| let g:ale_sign_warning = '⚠' | |
| let g:ale_completion_enabled = 1 | |
| let g:ale_linters = { | |
| \ 'javascript': ['eslint'], | |
| \ 'sh': ['shellcheck'], | |
| \ 'riot': ['eslint'], | |
| \ 'scss': [], | |
| \} | |
| " Gist | |
| let g:gist_post_anonymous = 1 | |
| let g:gist_open_browser_after_post = 1 | |
| let g:gist_detect_filetype = 1 | |
| " Vue | |
| let g:vue_pre_processors = 'detect_on_enter' | |
| " Markdown | |
| let g:vim_markdown_folding_disabled = 1 | |
| let g:vim_markdown_math = 1 | |
| let g:vim_markdown_conceal = 0 | |
| " vim-move | |
| let g:move_key_modifier = 'C' | |
| " ============================================================================= | |
| " COC Configuration | |
| " ============================================================================= | |
| " Use system node (will use whatever node is in PATH) | |
| " If you need a specific version, update this path after installing node | |
| " let g:coc_node_path = '/opt/homebrew/bin/node' | |
| nmap <silent> gd <Plug>(coc-definition) | |
| nmap <silent> gy <Plug>(coc-type-definition) | |
| nmap <silent> gi <Plug>(coc-implementation) | |
| nmap <silent> gr <Plug>(coc-references) | |
| nmap <leader>rn <Plug>(coc-rename) | |
| nnoremap <silent> <leader>k :call <SID>show_documentation()<CR> | |
| function! s:show_documentation() | |
| if (index(['vim','help'], &filetype) >= 0) | |
| execute 'h '.expand('<cword>') | |
| elseif (coc#rpc#ready()) | |
| call CocActionAsync('doHover') | |
| else | |
| execute '!' . &keywordprg . " " . expand('<cword>') | |
| endif | |
| endfunction | |
| autocmd CursorHold * silent call CocActionAsync('highlight') | |
| " ============================================================================= | |
| " Autocommands | |
| " ============================================================================= | |
| " Auto-resize splits | |
| autocmd VimResized * wincmd = | |
| " Open quickfix after grep | |
| autocmd QuickFixCmdPost *grep* cwindow | |
| " ----------------------------------------------------------------------------- | |
| " Filetype: LaTeX | |
| " ----------------------------------------------------------------------------- | |
| augroup ft_tex | |
| autocmd! | |
| autocmd BufEnter *.tex nmap j gj | |
| autocmd BufEnter *.tex nmap k gk | |
| autocmd BufEnter *.tex setlocal shiftwidth=2 | |
| autocmd BufEnter *.tex setlocal spell spelllang=en_us | |
| augroup END | |
| " ----------------------------------------------------------------------------- | |
| " Filetype: Python | |
| " ----------------------------------------------------------------------------- | |
| augroup ft_python | |
| autocmd! | |
| autocmd BufEnter *.py highlight OverLength ctermbg=DarkMagenta ctermfg=white guibg=#592929 | |
| autocmd BufEnter *.py match OverLength /\%81v./ | |
| autocmd BufEnter *.py setlocal cursorline | |
| autocmd BufEnter *.py setlocal ts=4 sts=4 sw=4 | |
| autocmd BufEnter *.py let g:airline#extensions#tabline#enabled = 1 | |
| autocmd BufEnter *.py map <buffer> <silent> <F5> :!clear;python3 %<CR> | |
| augroup END | |
| " ----------------------------------------------------------------------------- | |
| " Filetype: Ruby | |
| " ----------------------------------------------------------------------------- | |
| augroup ft_ruby | |
| autocmd! | |
| autocmd BufEnter *.rb map <buffer> <silent> <F5> :!clear;ruby %<CR> | |
| autocmd BufEnter *.rb highlight OverLength ctermbg=DarkMagenta ctermfg=white guibg=#592929 | |
| autocmd BufEnter *.rb match OverLength /\%81v./ | |
| autocmd BufEnter *.rb map <buffer> <Leader>s :call RunNearestSpec()<CR> | |
| autocmd BufEnter *.rb map <buffer> <Leader>t :call RunCurrentSpecFile()<CR> | |
| autocmd BufEnter *.rb map <buffer> <Leader>A :call RunAllSpecs()<CR> | |
| augroup END | |
| " ----------------------------------------------------------------------------- | |
| " Filetype: JavaScript/TypeScript/Vue | |
| " ----------------------------------------------------------------------------- | |
| augroup ft_js | |
| autocmd! | |
| autocmd BufEnter *.js setlocal ts=2 sts=2 sw=2 | |
| autocmd BufEnter *.ts setlocal ts=2 sts=2 sw=2 | |
| autocmd BufEnter *.vue setlocal ts=2 sts=2 sw=2 | |
| autocmd BufEnter *.js map <buffer> <silent> <F5> :!clear;node %<CR> | |
| augroup END | |
| " ----------------------------------------------------------------------------- | |
| " Filetype: Markdown | |
| " ----------------------------------------------------------------------------- | |
| augroup ft_markdown | |
| autocmd! | |
| autocmd BufEnter *.md setlocal filetype=markdown | |
| autocmd BufEnter *.md setlocal wrap linebreak nolist | |
| autocmd BufEnter *.md nmap <buffer> j gj | |
| autocmd BufEnter *.md nmap <buffer> k gk | |
| augroup END | |
| " ----------------------------------------------------------------------------- | |
| " Filetype: HTML | |
| " ----------------------------------------------------------------------------- | |
| augroup ft_html | |
| autocmd! | |
| autocmd BufEnter *.html map <buffer> <silent> <F5> :!open %<CR> | |
| augroup END | |
| " ============================================================================= | |
| " Neo-tree Setup (Lua) | |
| " ============================================================================= | |
| lua << EOF | |
| local ok, neotree = pcall(require, "neo-tree") | |
| if ok then | |
| neotree.setup({ | |
| close_if_last_window = true, | |
| filesystem = { | |
| follow_current_file = { enabled = true }, | |
| use_libuv_file_watcher = true, | |
| }, | |
| window = { | |
| width = 30, | |
| mappings = { | |
| ["s"] = "open_vsplit", | |
| ["S"] = "open_split", | |
| }, | |
| }, | |
| }) | |
| end | |
| EOF | |
| " ============================================================================= | |
| " Highlights | |
| " ============================================================================= | |
| highlight Search ctermfg=black ctermbg=lightgreen | |
| highlight ALEErrorSign ctermfg=Red ctermbg=235 | |
| highlight ALEWarningSign ctermfg=Yellow ctermbg=235 | |
| highlight SpecialKey ctermfg=66 guifg=#649A9A |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment