Skip to content

Instantly share code, notes, and snippets.

@cfcosta
Created March 2, 2017 17:47
Show Gist options
  • Save cfcosta/8cdbf53258f927d939bf17f62fef92c7 to your computer and use it in GitHub Desktop.
Save cfcosta/8cdbf53258f927d939bf17f62fef92c7 to your computer and use it in GitHub Desktop.
" Indent configuration
autocmd FileType ruby set ts=2 sts=2 sw=2 re=1
autocmd FileType yaml set ts=2 sts=2 sw=2
autocmd FileType c,cpp set ts=2 sts=2 sw=2
autocmd FileType css,html set ts=2 sts=2 sw=2
"$HOME/.rbenv/bin: Disable folds to avoid slowness
set foldmethod=manual
" Automatically expand tabs into spaces
set expandtab
" Keep our buffers open, even if we are not seeing them.
set hidden
set switchbuf=useopen
" Disable wrap
set nowrap
" Disable visual bell
set visualbell t_vb=
" Line numbers
set number
" Configure our completion mode
set wildmode=longest:full,full
" Enable true colors
set termguicolors
" Enable in-place search and replace
set inccommand=split
call plug#begin('~/.config/nvim/plugged')
" Colorscheme
Plug 'chriskempson/base16-vim'
" Ruby
Plug 'vim-ruby/vim-ruby', {'for': 'ruby'}
Plug 'keith/rspec.vim', {'for': 'ruby'}
Plug 'tpope/vim-rails', {'for': 'ruby'}
" Elixir
Plug 'elixir-lang/vim-elixir'
" C/C++
Plug 'arakashic/chromatica.nvim' " Clang color
Plug 'justmao945/vim-clang', {'for': ['c', 'cpp']}
" Rust
Plug 'rust-lang/rust.vim'
" Other Languages
Plug 'ElmCast/elm-vim'
Plug 'chrisbra/csv.vim', {'for': 'csv'}
Plug 'mustache/vim-mustache-handlebars'
Plug 'cespare/vim-toml'
Plug 'PotatoesMaster/i3-vim-syntax'
Plug 'tpope/vim-haml'
" Text handling plugins
Plug 'tpope/vim-surround'
Plug 'scrooloose/nerdcommenter'
Plug 'bronson/vim-trailing-whitespace'
" Input plugins
Plug 'Raimondi/delimitMate'
Plug 'houtsnip/vim-emacscommandline'
Plug 'tpope/vim-endwise'
Plug 'lilydjwg/colorizer'
Plug 'tpope/vim-ragtag'
" Snippets
Plug 'Shougo/neosnippet.vim'
Plug 'cfcosta/neosnippet-snippets'
" Text Objects
Plug 'kana/vim-textobj-user'
Plug 'tek/vim-textobj-ruby', {'for': 'ruby'}
" Autocomplete
Plug 'Shougo/deoplete.nvim'
Plug 'zchee/deoplete-clang' " C/C++
Plug 'Shougo/neco-vim' " VimL
Plug 'Shougo/neco-syntax' " Vim Syntax Groups
Plug 'slashmili/alchemist.vim' " Elixir
Plug 'carlitux/deoplete-ternjs' " Javascript
let g:deoplete#enable_at_startup = 1
" Language Server Support
Plug 'autozimu/LanguageClient-neovim' " Rust
let g:LanguageClient_serverCommands = {
\ 'rust': ['cargo', 'run', '--release', '--manifest-path=/opt/rls/Cargo.toml'],
\ }
" Clang configuration
let g:chromatica#enable_at_startup = 0
let g:deoplete#sources#clang#std#c = 'c11'
let g:deoplete#sources#clang#std#cpp = 'c++1z'
let g:clang_compilation_database = '.'
let g:clang_c_options = '-std=gnu11' " Force C11 support for vim-clang
let g:clang_cpp_options = '-std=c++11 ' " Force C++11 support for vim-clang
" Powerline
Plug 'vim-airline/vim-airline'
Plug 'vim-airline/vim-airline-themes'
let g:airline_powerline_fonts = 1
" Environment plugins
Plug 'tpope/vim-vinegar'
Plug 'DataWraith/auto_mkdir'
Plug 'gabesoft/vim-ags'
Plug 'jlanzarotta/bufexplorer'
Plug 'tpope/vim-fugitive'
Plug 'airblade/vim-gitgutter'
Plug 'vim-scripts/a.vim'
Plug 'neomake/neomake'
autocmd! BufWritePost * Neomake
" Services
Plug 'wakatime/vim-wakatime'
" FZF
Plug 'junegunn/fzf', { 'do': 'yes n \| ./install' }
let g:fzf_action = { 'ctrl-s': 'split', 'ctrl-v': 'vsplit' }
Plug 'kassio/neoterm'
let g:neoterm_position = "horizontal"
Plug 'janko-m/vim-test'
let test#strategy = "neoterm"
Plug 'sbdchd/neoformat'
let g:neoformat_enabled_javascript = ['js-beautify']
call plug#end()
" Set python paths for faster lookup
let g:python_host_prog = "/usr/bin/python2"
let g:python2_host_prog = "/usr/bin/python2"
let g:python3_host_prog = "/usr/bin/python3"
" Root Paths
let g:clang_root = '/usr/local/opt/llvm'
let g:src_path = $HOME . '/Projects/_src'
let g:chromatica#libclang_path = g:clang_root . '/lib'
let g:deoplete#sources#clang#libclang_path = g:clang_root . '/lib/libclang.dylib'
let g:deoplete#sources#clang#clang_header = g:clang_root . '/include'
let $RUST_SRC_PATH = g:src_path
let g:racer_cmd = g:src_path . '/Projects/racer/target/release/racer'
let g:alchemist#elixir_erlang_src = g:src_path
" Plugin configuration
" =============================================================================
" Here we add all configuration for our plugins that need them to be
" enabled before they can be called.
" =============================================================================
" Set our terminal background to dark
set background=dark
if isdirectory($HOME . "/.config/nvim/autoload")
" Set our colorscheme
colorscheme base16-ashes
" Colorize our terminal as well :D
let g:terminal_color_0="#1C2023"
let g:terminal_color_1="#C7AE95"
let g:terminal_color_2="#95C7AE"
let g:terminal_color_3="#AEC795"
let g:terminal_color_4="#AE95C7"
let g:terminal_color_5="#C795AE"
let g:terminal_color_6="#95AEC7"
let g:terminal_color_7="#C7CCD1"
let g:terminal_color_8="#747C84"
let g:terminal_color_9="#C7AE95"
let g:terminal_color_10="#95C7AE"
let g:terminal_color_11="#AEC795"
let g:terminal_color_12="#AE95C7"
let g:terminal_color_13="#C795AE"
let g:terminal_color_14="#95AEC7"
let g:terminal_color_15="#F3F4F5"
let g:terminal_color_background="#1C2023"
let g:terminal_color_foreground="#C7CCD1"
endif
" Keymaps
" =============================================================================
" Usually we're going to follow some conventions:
" - If a command opens a new pane/buffer, we're going to give it a PRIMARY,
" and that PRIMARY can be repeated or added a MODIFIER.
"
" Our MODIFIERS are always the same:
" * `s` for opening in a vertical split
" * `S` for opening in a horizontal split
" * `t` for opening in a new tab
"
" Our PRIMARIES are defined in a command by command basis.
" =============================================================================
" Map our leader key to `,`
let g:mapleader=","
" Clean up search results
nnoremap <c-l> :nohlsearch<cr>
" Map window movement commands to terminal buffers
tnoremap <c-w>j <c-\><c-n><c-w>j
tnoremap <c-w>k <c-\><c-n><c-w>k
tnoremap <c-w>h <c-\><c-n><c-w>h
tnoremap <c-w>l <c-\><c-n><c-w>l
tnoremap <c-w>J <c-\><c-n><c-w>J
tnoremap <c-w>K <c-\><c-n><c-w>K
tnoremap <c-w>H <c-\><c-n><c-w>H
tnoremap <c-w>L <c-\><c-n><c-w>L
tnoremap <c-w>x <c-\><c-n><c-w>x
" Format the .c/.h file
nnoremap <silent> <leader>ff :Neoformat<cr>:e<cr>
" Remove trailing whitespaces
nnoremap <silent> <leader><space> :FixWhitespace<cr>
" a.vim
nnoremap <silent> <leader>aa :A<cr>
nnoremap <silent> <leader>as :AV<cr>
nnoremap <silent> <leader>aS :AS<cr>
" vim-test
nmap <silent> <leader>ss :TestLast<CR>
nmap <silent> <leader>sf :TestFile<CR>
nmap <silent> <leader>sr :TestSuite<CR>
" fzf.vim - fuzzy file finder
nnoremap <silent> <leader>tt :FZF<cr>
" bufexplorer.vim - buffer handling
nnoremap <silent> <leader>bb :BufExplorer<cr>
nnoremap <silent> <leader>bs :BufExplorerVerticalSplit<cr>
nnoremap <silent> <leader>bS :BufExplorerHorizontalSplit<cr>
" IDE-like hotkeys (base z)
" Go To Definition
nnoremap <silent> <leader>zd call LanguageClient_textDocument_definition()<cr>
" Hover (Show Type)
nnoremap <silent> K :call LanguageClient_textDocument_hover()<CR>
" Rename
nnoremap <silent> <leader>zr call LanguageClient_textDocument_rename()<cr>
" List Symbols
nnoremap <silent> <leader>zz call LanguageClient_workspace_symbol()<cr>
" Neosnippet
imap <expr><TAB> neosnippet#expandable_or_jumpable() ?
\ "\<Plug>(neosnippet_expand_or_jump)"
\: pumvisible() ? "\<C-n>" : "\<TAB>"
smap <expr><TAB> neosnippet#expandable_or_jumpable() ?
\ "\<Plug>(neosnippet_expand_or_jump)"
\: "\<TAB>"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment