This repository has been archived on 2024-03-28. You can view files and clone it, but cannot push or open issues or pull requests.
dotfiles/apps/neovim/init.vim
2018-04-25 20:01:39 -05:00

316 lines
10 KiB
VimL
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

if has('nvim')
if empty(glob('~/.config/nvim/autoload/plug.vim'))
silent !curl -fLo ~/.config/nvim/autoload/plug.vim --create-dirs https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim
autocmd VimEnter * PlugInstall
endif
else
if empty(glob('~/.vim/autoload/plug.vim'))
silent !curl -fLo ~/.vim/autoload/plug.vim --create-dirs https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim
autocmd VimEnter * PlugInstall
endif
end
" vim compatibility
let $vimdir = $HOME.'/.vim'
if has('nvim')
let $vimdir = $HOME.'/.config/nvim'
endif
" OS detection functions
silent function! OSX()
return has('macunix')
endfunction
silent function! LINUX()
return has('unix') && !has('macunix') && !has('win32unix')
endfunction
silent function! WINDOWS()
return (has('win32') || has('win64'))
endfunction
" tell vim to reload the init.vim file when it saves it
" if has('nvim')
" autocmd! BufWritePost init.vim source %
" else
" autocmd! BufWritePost .vimrc source %
" end
" load a per-environment file if one exists
if filereadable(expand("$HOME/.env_init.vim"))
source "$HOME/.env_init.vim"
endif
if has('vim_starting')
set encoding=utf8
endif
" plugin build functions
function! BuildComposer(info)
if a:info.status != 'unchanged' || a:info.force
!cargo build --release
UpdateRemotePlugins
endif
endfunction
function! DoRemote(arg)
UpdateRemotePlugins
endfunction
" initialize plugin manager
if has('nvim')
call plug#begin('~/.config/nvim/bundle')
else
call plug#begin('~/.vim/bundle')
endif
" let plugin manager manage itself
Plug 'junegunn/vim-plug'
" plugins
" if vim is being launched to view man pages, don't do our session stuff!
if exists('asmanviewer')
let g:prosession_dir = '/dev/null'
else
Plug 'tpope/vim-obsession' " session ease-of-use
Plug 'dhruvasagar/vim-prosession' " more session ease-of-use
let g:prosession_dir = '~/.config/nvim/session/'
endif
Plug 'vim-airline/vim-airline' " statusline
let g:airline_powerline_fonts = 1
let g:airline#extensions#tabline#enabled = 1 " automatically displays all buffers when there's only one tab open
let g:airline#extensions#tabline#fnamemod = ':t'
" set laststatus=2 " always show statusline
" set noshowmode " hides default mode
let g:airline#extensions#tabline#left_sep = ''
let g:airline#extensions#tabline#left_alt_sep = ''
let g:airline_right_alt_sep = ''
let g:airline_right_sep = ''
let g:airline_left_alt_sep= ''
let g:airline_left_sep = ''
let g:airline#extensions#tabline#buffers_label = ''
Plug 'vim-airline/vim-airline-themes'
let g:airline_mode_map = {
\ '__' : '-',
\ 'n' : 'N',
\ 'i' : 'I',
\ 'R' : 'R',
\ 'c' : 'C',
\ 'v' : 'V',
\ 'V' : 'V',
\ '' : 'V',
\ 's' : 'S',
\ 'S' : 'S',
\ '' : 'S',
\ }
Plug 'scrooloose/nerdtree', {'on': ['NERDTreeToggle', 'NERDTree']} " nice sidebar for files
let g:NERDTreeDirArrowExpandable = ' '
let g:NERDTreeDirArrowCollapsible = ' '
autocmd bufenter * if (winnr("$") == 1 && exists("b:NERDTree") && b:NERDTree.isTabTree()) | q | endif " close vim if last buffer is a NERD buffer
Plug 'nathanaelkane/vim-indent-guides' " indentation guides (NOTE: doesn't seem to work with my colorscheme)
let g:indent_guides_start_level = 0
let g:indent_guides_auto_color = 1
Plug 'roxma/nvim-completion-manager'
Plug 'SirVer/ultisnips'
Plug 'honza/vim-snippets'
let g:UltiSnipsExpandTrigger="<tab>"
let g:UltiSnipsJumpForwardTrigger="<c-f>"
let g:UltiSnipsJumpBackwardTrigger="<c-p>"
let g:UltiSnipsEditSplit="vertical"
" Plug 'vimwiki/vimwiki'
let wiki1 = {}
let wiki1.path = "~/../doc/wiki/"
let wiki1.syntax = "markdown"
let wiki1.ext = ".md"
let g:vimwiki_list = [wiki1]
Plug 'scrooloose/syntastic' " syntax checker
Plug 'bkad/CamelCaseMotion' " camel case and underscore word movements
Plug 'vim-scripts/LargeFile' " gracefully handle very large files
Plug 'tpope/vim-commentary' " toggle comments in code easily
Plug 'tpope/vim-repeat' " toggle comments in code easily
Plug 'vim-scripts/SyntaxRange' " defined different syntax ranges in a file for highlighting
Plug 'tmux-plugins/vim-tmux-focus-events' " allow transitions within tmux
Plug 'christoomey/vim-tmux-navigator' " allow transitions within tmux
Plug 'godlygeek/tabular' " align text lines together
Plug 'dhruvasagar/vim-table-mode' " for creating and editing character tables
Plug 'lytedev/vim-superman' " view man pages with vim
Plug 'tpope/vim-surround' " quickly modify text surrounding objects
Plug 'tpope/vim-speeddating' " vim knows about date-like text objects
Plug 'tpope/vim-fugitive' " vim git commands
" Plug 'airblade/vim-gitgutter' " vim git gutter information
" let g:gitgutter_override_sign_column_highlight = 0
" let g:gitgutter_sign_added = '+'
" let g:gitgutter_sign_modified = '~'
" let g:gitgutter_sign_removed = '-'
" let g:gitgutter_sign_removed_first_line = '-'
" let g:gitgutter_sign_modified_removed = '~'
Plug 'michaeljsmith/vim-indent-object' " adds an indentation level text object
Plug 'wellle/targets.vim' " adds some more handy text objects
Plug 'dbakker/vim-projectroot' " adds helper functions for getting to a project's root directory
Plug 'roxma/nvim-cm-tern', { 'do': 'npm install' } " javascript helpful things
Plug 'mikewest/vimroom' " distraction-free editing
Plug 'editorconfig/editorconfig-vim' " loads project-specific editor settings
let g:vimroom_sidebar_height = 0
Plug 'junegunn/fzf', {'dir': '~/.fzf', 'do': './install --all'} " fuzzy file finding
Plug 'junegunn/fzf.vim' " helpers for using fzf in vim
let g:fzf_layout = { 'window': 'enew' }
" plugins for specific file types
Plug 'othree/html5.vim', {'for': ['jade', 'pug', 'html', 'vue']}
Plug 'mxw/vim-jsx', {'for': ['jsx', 'javascript', 'js', 'javascript.jsx']}
let g:jsx_ext_required = 0 " allow JSX in normal JS files
Plug 'hail2u/vim-css3-syntax', {'for': ['styl', 'stylus', 'css', 'vue']}
Plug 'kchmck/vim-coffee-script', {'for': ['coffee', 'coffeescript', 'vue']}
Plug 'posva/vim-vue', {'for': ['vue']}
Plug 'elixir-lang/vim-elixir', {'for': ['elixir', 'ex', 'exs']}
Plug 'slashmili/alchemist.vim', {'for': ['elixir', 'ex', 'exs']}
Plug 'mattn/emmet-vim', {'for': ['html']}
Plug 'wavded/vim-stylus', {'for': ['styl', 'stylus', 'vue']}
Plug 'quabug/vim-gdscript', {'for': ['gd', 'gdscript']}
Plug 'rust-lang/rust.vim', {'for': ['rs', 'rust']}
Plug 'mustache/vim-mustache-handlebars', {'for': ['html.handlebars', 'handlebars', 'hbs']}
Plug 'plasticboy/vim-markdown', {'for': ['md', 'markdown', 'vimwiki']}
Plug 'lifepillar/pgsql.vim', {'for': ['psql', 'sql']}
Plug 'cespare/vim-toml', {'for': ['toml']}
Plug 'vim-scripts/utl.vim'
let g:utl_cfg_hdl_scm_http_system = "silent !$BROWSER '%u#%f' &"
" Plug 'euclio/vim-markdown-composer', { 'do': function('BuildComposer'), 'for': ['md', 'markdown'] }
Plug 'digitaltoad/vim-jade', {'for': ['pug', 'jade', 'vue']}
Plug 'leafo/moonscript-vim', {'for': ['moon', 'moonscript']}
Plug 'evidens/vim-twig'
Plug 'leafgarland/typescript-vim', {'for': ['ts', 'typescript']}
Plug 'jwalton512/vim-blade', {'for': ['blade', 'blade.php']}
Plug 'carlitux/deoplete-ternjs', { 'do': 'sudo npm install -g tern' }
call plug#end()
filetype on
filetype indent on
filetype plugin on
let $NVIM_TUI_ENABLE_CURSOR_SHAPE = 1
" language specific configuration
" C
let c_space_errors = 1
let c_comment_strings = 0 " dont highlight strings inside C comments
" Python
let python_space_errors = 1
" autocmd FileType python setl tabstop=4 expandtab shiftwidth=4 softtabstop=4
" autocmd FileType js setl tabstop=2 expandtab shiftwidth=2 softtabstop=2
" autocmd FileType vue setl tabstop=2 expandtab shiftwidth=2 softtabstop=2
autocmd FileType php setl tabstop=4 expandtab shiftwidth=4 softtabstop=4
" Markdown
autocmd BufNewFile,BufReadPost *.md setl filetype=markdown spell
" Text
autocmd BufNewFile,BufReadPost *.txt setl spell textwidth=0 wrapmargin=0
" Make any necessary directories in the path when saving a file
fun! <SID>AutoMakeDirectory()
let s:directory = expand("<afile>:p:h")
if !isdirectory(s:directory)
call mkdir(s:directory, "p")
endif
endfun
autocmd BufWritePre,FileWritePre * :call <SID>AutoMakeDirectory()
if !exists("g:make_args")
let g:make_args="default"
endif
fun! RunMake()
split
if has('nvim')
" run from the root of the current git repository
let path = system("git rev-parse --show-toplevel | tr -d '\\n'")
" TODO: handle non-git situations
execute 'terminal cd ' . path . ' && make ' . g:make_args
else
execute '!make ' . g:make_args
endif
endfun
" kill the terminal buffer when the process exits
" autocmd TermClose * call feedkeys('<cr>')
let settingsfile=$vimdir.'/settings.vim'
exec 'source ' . settingsfile
if exists('asmanviewer')
set nonumber " no line numbers when viewing a man page
set norelativenumber " no line numbers when viewing a man page
else
set nonumber " line numbers
set norelativenumber " line numbers
endif
" a toggle-able minimalistic distraction-free text editing mode
let s:distractionFreeMode = 0
fun! DistractionFreeModeFunc()
AirlineToggle
VimroomToggle
if s:distractionFreeMode == 0
let s:distractionFreeMode = 1
set nocursorline
set laststatus=0
set noshowmode
set noruler
set noshowcmd
set nonumber
hi NonText ctermfg=black guifg=black
else
let s:distractionFreeMode = 0
set cursorline
set showmode
set ruler
set laststatus=2
set showcmd
set number
hi NonText ctermfg=black guifg=black
colorscheme base16-donokai
endif
endfunction
" prevents normal window navigation and closing while in DistractionFreeMode
fun! CheckCloseDistractionFreeMode()
if s:distractionFreeMode == 1
call DistractionFreeModeFunc()
endif
endfunction
" run the previous checking function every time we leave a window
if has('autocmd')
autocmd WinLeave * call CheckCloseDistractionFreeMode()
endif
nnoremap <silent> <Leader>mz :DistractionFreeMode<CR>
:command! DistractionFreeMode call DistractionFreeModeFunc()
let bindingsfile=$vimdir.'/bindings.vim'
exec 'source ' . bindingsfile
" modify higlight colors
hi Search cterm=NONE ctermbg=blue ctermfg=black
highlight LineNr ctermbg=none ctermfg=8
highlight CursorLineNr ctermbg=18 ctermfg=gray
fun! VueModifiedFT()
set ft=vue
endfunction
:command! VueModifiedFT call VueModifiedFT()
autocmd BufRead,BufNewFile *.vue VueModifiedFT