tvl-depot/users/grfn/system/home/modules/vimrc
Griffin Smith 6266c5d32f refactor(users/glittershark): Rename to grfn
Rename my //users directory and all places that refer to glittershark to
grfn, including nix references and documentation.

This may require some extra attention inside of gerrit's database after
it lands to allow me to actually push things.

Change-Id: I4728b7ec2c60024392c1c1fa6e0d4a59b3e266fa
Reviewed-on: https://cl.tvl.fyi/c/depot/+/2933
Tested-by: BuildkiteCI
Reviewed-by: tazjin <mail@tazj.in>
Reviewed-by: lukegb <lukegb@tvl.fyi>
Reviewed-by: glittershark <grfn@gws.fyi>
2021-04-12 14:45:51 +00:00

1121 lines
31 KiB
VimL

" vim:set fdm=marker fmr={{{,}}} ts=2 sts=2 sw=2 expandtab:
" Basic Options {{{
set nocompatible
set modeline
set modelines=10
syntax enable
filetype plugin indent on
set ruler
set showcmd
set number
set incsearch
set smartcase
set ignorecase
set scrolloff=10
set tabstop=4
set shiftwidth=4
set softtabstop=4
set nosmartindent
set expandtab
set noerrorbells visualbell t_vb=
set laststatus=2
set hidden
let mapleader = ','
let maplocalleader = '\'
set undofile
" set undodir=~/.vim/undo
set wildignore=*.pyc,*.o,.git
set clipboard=unnamedplus
" set backupdir=$HOME/.vim/backup
" set directory=$HOME/.vim/tmp
set foldmarker={{{,}}}
set colorcolumn=+1
set concealcursor=
set formatoptions+=j
set wildmenu
set wildmode=longest,list:full
set noincsearch
" }}}
" GUI options {{{
set go-=m
set go-=T
set go-=r
set go-=L
set go-=e
set guifont=Meslo\ LG\ S\ DZ\ 9
" }}}
" Colors {{{
" set t_Co=256
fu! ReverseBackground()
if &bg=="light"
se bg=dark
else
se bg=light
endif
endf
com! BgToggle call ReverseBackground()
nm <F12> :BgToggle<CR>
set background=light
colorscheme solarized
" }}}
" ---------------------------------------------------------------------------
" CtrlP {{{
let g:ctrlp_custom_ignore = {
\ 'dir': '(node_modules|target)'
\ }
let g:ctrlp_max_files = 0
let g:ctrlp_max_depth = 100
" }}}
" YouCompleteMe {{{
let g:ycm_semantic_triggers = {
\ 'c' : ['->', '.'],
\ 'objc' : ['->', '.'],
\ 'ocaml' : ['.', '#'],
\ 'cpp,objcpp' : ['->', '.', '::'],
\ 'perl' : ['->'],
\ 'php' : ['->', '::'],
\ 'cs,java,javascript,d,python,perl6,scala,vb,elixir,go' : ['.'],
\ 'vim' : ['re![_a-zA-Z]+[_\w]*\.'],
\ 'lua' : ['.', ':'],
\ 'erlang' : [':'],
\ 'clojure' : [],
\ 'haskell' : ['re!.*', '.', ' ', '(']
\ }
" \ 'haskell' : ['.', '(', ' ']
" \ 'ruby' : ['.', '::'],
" \ 'clojure' : ['(', '.', '/', '[']
" }}}
" Neocomplete {{{
if !has('nvim')
" Use neocomplete.
let g:neocomplete#enable_at_startup = 1
" Use smartcase.
let g:neocomplete#enable_smart_case = 1
" Set minimum syntax keyword length.
let g:neocomplete#sources#syntax#min_keyword_length = 3
let g:neocomplete#lock_buffer_name_pattern = '\*ku\*'
" Define dictionary.
" let g:neocomplete#sources#dictionary#dictionaries = {
" \ 'default' : '',
" \ 'vimshell' : $HOME.'/.vimshell_hist',
" \ 'scheme' : $HOME.'/.gosh_completions'
" \ }
" Define keyword.
if !exists('g:neocomplete#keyword_patterns')
let g:neocomplete#keyword_patterns = {}
endif
let g:neocomplete#keyword_patterns['default'] = '\h\w*'
" Plugin key-mappings.
inoremap <expr><C-g> neocomplete#undo_completion()
inoremap <expr><C-l> neocomplete#complete_common_string()
" Recommended key-mappings.
" <CR>: close popup and save indent.
inoremap <silent> <CR> <C-r>=<SID>my_cr_function()<CR>
function! s:my_cr_function()
return (pumvisible() ? "\<C-y>" : "" ) . "\<CR>"
" For no inserting <CR> key.
"return pumvisible() ? "\<C-y>" : "\<CR>"
endfunction
" <TAB>: completion.
inoremap <expr><TAB> pumvisible() ? "\<C-n>" : "\<TAB>"
" <C-h>, <BS>: close popup and delete backword char.
inoremap <expr><C-h> neocomplete#smart_close_popup()."\<C-h>"
inoremap <expr><BS> neocomplete#smart_close_popup()."\<C-h>"
" Close popup by <Space>.
"inoremap <expr><Space> pumvisible() ? "\<C-y>" : "\<Space>"
" AutoComplPop like behavior.
"let g:neocomplete#enable_auto_select = 1
" Shell like behavior(not recommended).
"set completeopt+=longest
"let g:neocomplete#enable_auto_select = 1
"let g:neocomplete#disable_auto_complete = 1
"inoremap <expr><TAB> pumvisible() ? "\<Down>" : "\<C-x>\<C-u>"
" Enable omni completion.
" autocmd FileType css setlocal omnifunc=csscomplete#CompleteCSS
" autocmd FileType html,markdown setlocal omnifunc=htmlcomplete#CompleteTags
" autocmd FileType javascript setlocal omnifunc=javascriptcomplete#CompleteJS
" autocmd FileType python setlocal omnifunc=pythoncomplete#Complete
" autocmd FileType xml setlocal omnifunc=xmlcomplete#CompleteTags
" Enable heavy omni completion.
if !exists('g:neocomplete#sources#omni#input_patterns')
let g:neocomplete#sources#omni#input_patterns = {}
endif
endif
" }}}
" Deoplete {{{
if has('nvim')
let g:deoplete#enable_at_startup = 1
inoremap <silent> <CR> <C-r>=<SID>my_cr_function()<CR>
function! s:my_cr_function()
return (pumvisible() ? "\<C-y>" : "" ) . "\<CR>"
" For no inserting <CR> key.
"return pumvisible() ? "\<C-y>" : "\<CR>"
endfunction
" <TAB>: completion.
inoremap <expr><TAB> pumvisible() ? "\<C-n>" : "\<TAB>"
inoremap <expr><S-TAB> pumvisible() ? "\<C-p>" : "\<TAB>"
endif
" }}}
" Neovim Terminal mode {{{
if has('nvim')
tnoremap <Esc> <C-\><C-n>
nnoremap \\ :tabedit term://zsh<CR>
nnoremap q\ :call <SID>OpenRepl()<CR>
if !exists('g:repl_size')
let g:repl_size=9
endif
function! s:OpenRepl() " {{{
" Check if buffer exists and is open
if exists('s:repl_bufname') && bufexists(s:repl_bufname) && bufwinnr(s:repl_bufname) >=? 0
" If so, just switch to it
execute bufwinnr(s:repl_bufname) . 'wincmd' 'w'
norm i
return
endif
if !exists('b:console')
let b:console=$SHELL
endif
let l:console_cmd = b:console
execute 'bot' g:repl_size . 'new'
set winfixheight nobuflisted
call termopen(l:console_cmd)
let s:repl_bufname = bufname('%')
norm i
endfunction " }}}
endif
" }}}
" Tagbar options {{{
let g:tagbar_autoclose = 1
let g:tagbar_autofocus = 1
let g:tagbar_compact = 1
" }}}
" delimitMate options {{{
let g:delimitMate_expand_cr = 1
" }}}
" UltiSnips options {{{
let g:UltiSnipsExpandTrigger = '<c-j>'
"g:UltiSnipsJumpForwardTrigger <c-j>
"g:UltiSnipsJumpBackwardTrigger <c-k>
" }}}
" VDebug Options {{{
let g:vdebug_options = {'server': '192.168.56.1'}
" }}}
" Statusline {{{
let g:airline_powerline_fonts=1
if !exists('g:airline_symbols')
let g:airline_symbols = {}
endif
let g:airline_symbols.space = "\ua0"
let g:airline#extensions#tagbar#flags = 'f'
let g:airline#extensions#tabline#enabled = 1
let g:airline#extensions#tabline#show_buffers = 0
let g:airline#extensions#tabline#show_tabs = 1
let g:airline#extensions#tabline#tab_min_count = 2
let g:airline#extensions#tmuxline#enabled = 0
let g:tmuxline_theme = 'airline'
let g:tmuxline_preset = 'full'
"set statusline=
"set statusline+=%2*[%n%H%M%R%W]%*\ " flags and buf no
"set statusline+=%-40f%<\ " path
"set statusline+=%=%40{fugitive#statusline()}\ " Vim status
"set statusline+=%1*%y%*%*\ " file type
"set statusline+=%10((%l,%c)%)\ " line and column
"set statusline+=%P " percentage of file
" }}}
" Code review mode {{{
fun! GetFontName()
return substitute(&guifont, '^\(.\{-}\)[0-9]*$', '\1', '')
endfun
fun! <SID>CodeReviewMode()
let &guifont = GetFontName() . ' 15'
endfun
com! CodeReviewMode call <SID>CodeReviewMode()
" }}}
" Syntastic {{{
let g:syntastic_enable_signs = 0
" Python {{{
let g:syntastic_python_checkers = ['flake8']
let g:syntastic_python_flake8_post_args = "--ignore=E101,E223,E224,E301,E302,E303,E501,E701,W,F401,E111,E261"
" }}}
" Javascript {{{
let g:syntastic_javascript_checkers = ['eslint']
let g:flow#autoclose = 1
let g:flow#enable = 1
" augroup syntastic_javascript_jsx
" autocmd!
" autocmd BufReadPre,BufNewFile *.js
" autocmd BufReadPre,BufNewFile *.jsx
" \ let g:syntastic_javascript_checkers = ['jsxhint']
" augroup END
" }}}
" Haml {{{
let g:syntastic_haml_checkers = ['haml_lint']
" }}}
" Html {{{
let g:syntastic_html_checkers = []
" }}}
" Ruby {{{
let g:syntastic_ruby_checkers = ['rubocop']
" }}}
" SASS/SCSS {{{
let g:syntastic_scss_checkers = ['scss_lint']
" }}}
" Haskell {{{
" let g:syntastic_haskell_checkers = ['ghc-mod']
" }}}
" Elixir {{{
let g:syntastic_elixir_checkers = ['elixir']
let g:syntastic_enable_elixir_checker = 1
" }}}
" }}}
" Bufferline {{{
let g:bufferline_echo=0
" }}}
" Eclim {{{
let g:EclimCompletionMethod = 'omnifunc'
augroup eclim
au!
au FileType java call <SID>JavaSetup()
au FileType java set textwidth=120
augroup END
function! s:JavaSetup() abort
noremap <C-I> :JavaImport<CR>
nnoremap K :JavaDocPreview<CR>
nnoremap ]d :JavaSearchContext<CR>
nnoremap [d :JavaSearchContext<CR>
nnoremap g<CR> :JUnit<CR>
nnoremap g\ :Mvn test<CR>
endfunction
" }}}
" Signify options {{{
let g:signify_mapping_next_hunk = ']h'
let g:signify_mapping_prev_hunk = '[h'
let g:signify_vcs_list = ['git']
let g:signify_sign_change = '~'
let g:signify_sign_delete = '-'
" }}}
" Simplenote {{{
let g:SimplenoteFiletype = 'markdown'
let g:SimplenoteSortOrder = 'pinned,modifydate,tagged,createdate'
let g:SimplenoteVertical = 1
nnoremap <Leader>nn :Simplenote -n<CR>
nnoremap <Leader>nl :Simplenote -l<CR>
nnoremap <Leader>nw :Simplenote -l work<CR>
nnoremap <Leader>nt :Simplenote -t<CR>
" }}}
" Emmet {{{
" Expand abbreviation
let g:user_emmet_leader_key = '<C-y>'
" }}}
" Startify {{{
let g:startify_bookmarks=[ '~/.vimrc', '~/.zshrc' ]
" }}}
" Abolish {{{
let g:abolish_save_file = expand('~/.vim/after/plugin/abolish.vim')
" }}}
" Rails projections {{{
if !exists('g:rails_projections')
let g:rails_projections = {}
endif
call extend(g:rails_projections, {
\ "config/routes.rb": { "command": "routes" },
\ "config/structure.sql": { "command": "structure" }
\ }, 'keep')
if !exists('g:rails_gem_projections')
let g:rails_gem_projections = {}
endif
call extend(g:rails_gem_projections, {
\ "active_model_serializers": {
\ "app/serializers/*_serializer.rb": {
\ "command": "serializer",
\ "template": "class %SSerializer < ActiveModel::Serializer\nend",
\ "affinity": "model"}},
\ "react-rails": {
\ "app/assets/javascripts/components/*.jsx": {
\ "command": "component",
\ "template": "var %S = window.%S = React.createClass({\n render: function() {\n }\n});",
\ "alternate": "spec/javascripts/components/%s_spec.jsx" },
\ "spec/javascripts/components/*_spec.jsx": {
\ "alternate": "app/assets/javascripts/components/{}.jsx" }},
\ "rspec": {
\ "spec/**/support/*.rb": {
\ "command": "support"}},
\ "cucumber": {
\ "features/*.feature": {
\ "command": "feature",
\ "template": "Feature: %h"},
\ "features/support/*.rb": {
\ "command": "support"},
\ "features/support/env.rb": {
\ "command": "support"},
\ "features/step_definitions/*_steps.rb": {
\ "command": "steps"}},
\ "carrierwave": {
\ "app/uploaders/*_uploader.rb": {
\ "command": "uploader",
\ "template": "class %SUploader < CarrierWave::Uploader::Base\nend"}},
\ "draper": {
\ "app/decorators/*_decorator.rb": {
\ "command": "decorator",
\ "affinity": "model",
\ "template": "class %SDecorator < Draper::Decorator\nend"}},
\ "fabrication": {
\ "spec/fabricators/*_fabricator.rb": {
\ "command": ["fabricator", "factory"],
\ "alternate": "app/models/%s.rb",
\ "related": "db/schema.rb#%p",
\ "test": "spec/models/%s_spec.rb",
\ "template": "Fabricator :%s do\nend",
\ "affinity": "model"}},
\ "factory_girl": {
\ "spec/factories/*.rb": {
\ "command": "factory",
\ "alternate": "app/models/%i.rb",
\ "related": "db/structure.sql#%s",
\ "test": "spec/models/%s_spec.rb",
\ "template": "FactoryGirl.define do\n factory :%i do\n end\nend",
\ "affinity": "model"},
\ "spec/factories.rb": {
\ "command": "factory"},
\ "test/factories.rb": {
\ "command": "factory"}}
\ }, 'keep')
" }}}
" Other projections {{{
let g:projectionist_heuristics = {
\ "config.ru&docker-compose.yml&app/&config/&OWNERS": {
\ "app/jobs/*.rb": {
\ "type": "job",
\ "alternate": "spec/jobs/{}_spec.rb"
\ },
\ "app/models/*.rb": {
\ "type": "model",
\ "alternate": "spec/models/{}_spec.rb"
\ },
\ "app/resources/*_resource.rb": {
\ "type": "resource",
\ "alternate": "spec/resources/{}_resource_spec.rb"
\ },
\ "config/*.yml": {
\ "type": "config"
\ },
\ "spec/*_spec.rb": {
\ "type": "spec",
\ "alternate": "app/{}.rb"
\ },
\ "spec/factories/*.rb": {
\ "type": "factory",
\ }
\ },
\ "svc-gateway.cabal": {
\ "src/*.hs": {
\ "type": "src",
\ "alternate": "test/{}Spec.hs"
\ },
\ "test/*Spec.hs": {
\ "type": "spec",
\ "alternate": "src/{}.hs",
\ "template": [
\ "module Gateway.Resource.HierarchySpec (main, spec) where",
\ "",
\ "import Prelude",
\ "import Test.Hspec",
\ "import Data.Aeson",
\ "",
\ "import Gateway.Resource.Hierarchy",
\ "",
\ "main :: IO ()",
\ "main = hspec spec",
\ "",
\ "spec :: Spec",
\ "spec = do",
\ " describe \"something\" $ undefined"
\ ]
\ },
\ "svc-gateway.cabal": {
\ "type": "cabal"
\ }
\ },
\ "package.json&.flowconfig": {
\ "src/*.*": {
\ "type": "src",
\ "alternate": "test/{}_spec.js"
\ }
\ },
\ "pom.xml&src/main/clj/|src/main/cljs": {
\ "*": {
\ "start": "USE_NREPL=1 bin/run -m elephant.dev-system" ,
\ "connect": "nrepl://localhost:5554",
\ "piggieback": "(figwheel-sidecar.repl-api/repl-env)"
\ },
\ "pom.xml": { "type": "pom" },
\ "src/main/clj/*.clj": {
\ "alternate": "src/test/clj/{}_test.clj",
\ "template": ["(ns {dot|hyphenate})"]
\ },
\ "src/test/clj/*_test.clj": {
\ "alternate": "src/main/clj/{}.clj",
\ "dispatch": ":RunTests {dot|hyphenate}-test",
\ "template": ["(ns {dot|hyphenate}-test",
\ " (:require [clojure.test :refer :all]))"]
\ },
\ "src/main/cljs/*.cljs": {
\ "alternate": "src/test/cljs/{}_test.cljs"
\ },
\ "src/main/cljs/*_test.cljs": {
\ "alternate": "src/main/cljs/{}.cljs",
\ "dispatch": ":RunTests {dot|hyphenate}-test"
\ },
\ "src/main/clj/*.cljc": {
\ "alternate": "src/test/clj/{}_test.cljc"
\ },
\ "src/main/clj/*_test.cljc": {
\ "alternate": "src/test/clj/{}.cljc",
\ "dispatch": ":RunTests {dot|hyphenate}-test"
\ }
\ }}
" }}}
" AutoPairs {{{
let g:AutoPairsCenterLine = 0
" }}}
" Filetypes {{{
" Python {{{
aug Python
au!
au FileType python set tabstop=4 shiftwidth=4 softtabstop=4 expandtab
aug END
let g:python_highlight_all=1
" }}}
" PHP {{{
aug PHP
au!
"au FileType php setlocal fdm=marker fmr={{{,}}}
aug END " }}}
" Mail {{{
aug Mail
au FileType mail setlocal spell
aug END " }}}
" Haskell {{{
let g:haskell_conceal_wide = 1
let g:haskellmode_completion_ghc = 0
let g:necoghc_enable_detailed_browse = 1
augroup Haskell
autocmd!
autocmd FileType haskell setlocal textwidth=110 shiftwidth=2
autocmd FileType haskell setlocal omnifunc=necoghc#omnifunc
autocmd FileType haskell call <SID>HaskellSetup()
autocmd FileType haskell setlocal keywordprg=hoogle\ -cie
augroup END
function! s:HaskellSetup()
set sw=4
" compiler cabal
" let b:start='cabal run'
" let b:console='cabal repl'
" let b:dispatch='cabal test'
compiler stack
let b:start='stack run'
let b:console='stack ghci'
let b:dispatch='stack test'
nnoremap <buffer> gy :HdevtoolsType<CR>
nnoremap <buffer> yu :HdevtoolsClear<CR>
endfunction
" }}}
" Ruby {{{
function! s:RSpecSyntax()
syn keyword rspecMethod describe context it its specify shared_context
\ shared_examples shared_examples_for shared_context include_examples
\ include_context it_should_behave_like it_behaves_like before after
\ around fixtures controller_name helper_name scenario feature
\ background given described_class
syn match rspecMethod '\<let\>!\='
syn match rspecMethod '\<subject\>!\='
syn keyword rspecMethod violated pending expect expect_any_instance_of allow
\ allow_any_instance_of double instance_double mock mock_model
\ stub_model xit
syn match rspecMethod '\.\@<!\<stub\>!\@!'
call s:RSpecHiDefaults()
endfunction
function! s:RSpecHiDefaults()
hi def link rspecMethod rubyFunction
endfunction
augroup Ruby
au!
" au FileType ruby let b:surround_114 = "\\(module|class,def,if,unless,case,while,until,begin,do) \r end"
" au FileType ruby set fdm=syntax
au FileType ruby set tw=110
au FileType ruby set omnifunc=
au FileType ruby nnoremap <buffer> gy orequire 'pry'; binding.pry<ESC>^
au FileType ruby nnoremap <buffer> gY Orequire 'pry'; binding.pry<ESC>^
au FileType ruby nnoremap <buffer> yu :g/require 'pry'; binding.pry/d<CR>
au BufNewFile,BufRead *_spec.rb call <SID>RSpecSyntax()
augroup END
let ruby_operators = 1
let ruby_space_errors = 1
let g:rubycomplete_rails = 1
command! -range ConvertHashSyntax <line1>,<line2>s/:(\S{-})(\s{-})=> /\1:\2/
" }}}
" Clojure {{{
aug Clojure
au!
autocmd FileType clojure nnoremap <C-S> :Slamhound<CR>
autocmd FileType clojure nnoremap <silent> gr :w <bar> Require <bar> e<CR>
let g:clojure_align_multiline_strings = 1
let g:clojure_fuzzy_indent_patterns =
\ ['^with', '^def', '^let', '^fact']
let g:clojure_special_indent_words =
\ 'deftype,defrecord,reify,proxy,extend-type,extend-protocol,letfn,html'
autocmd FileType clojure setlocal textwidth=80
autocmd FileType clojure setlocal lispwords+=GET,POST,PATCH,PUT,DELETE |
\ setlocal lispwords+=context,select
autocmd BufNewFile,BufReadPost *.cljx setfiletype clojure
autocmd BufNewFile,BufReadPost *.cljx setlocal omnifunc=
autocmd BufNewFile,BufReadPost *.cljs setlocal omnifunc=
autocmd FileType clojure call <SID>TangentInit()
autocmd FileType clojure call <SID>sexp_mappings()
autocmd BufRead *.cljc ClojureHighlightReferences
autocmd FileType clojure let b:AutoPairs = {
\ '"': '"',
\ '{': '}',
\ '(': ')',
\ '[': ']'}
" Don't auto-pair quote reader macros
" \'`': '`',
" \ '''': '''',
autocmd User ProjectionistActivate call s:projectionist_connect()
function! s:projectionist_connect() abort
let connected = !empty(fireplace#path())
if !connected
for [root, value] in projectionist#query('connect')
try
silent execute "FireplaceConnect" value root
let connected = 1
break
catch /.*Connection refused.*/
endtry
endfor
endif
" if connected && exists(':Piggieback')
" for [root, value] in projectionist#query('piggieback')
" silent execute "Piggieback" value
" break
" endfor
" endif
endfunction
" autocmd BufNewFile,BufReadPost *.cljx setlocal omnifunc=
" autocmd BufNewFile,BufReadPost *.cljs setlocal omnifunc=
autocmd FileType clojure let b:console='lein repl'
autocmd FileType clojure call <SID>ClojureMaps()
function! s:ClojureMaps() abort
nnoremap <silent> <buffer> [m :call search('^(def', 'Wzb')<CR>
nnoremap <silent> <buffer> ]m :call search('^(def', 'Wz')<CR>
endfunction
command! Scratch call <SID>OpenScratch()
autocmd FileType clojure nnoremap <buffer> \s :Scratch<CR>
let g:scratch_buffer_name = 'SCRATCH'
function! s:OpenScratch()
if bufwinnr(g:scratch_buffer_name) > 0
execute bufwinnr(g:scratch_buffer_name) . 'wincmd' 'w'
return
endif
vsplit SCRATCH
set buftype=nofile
set filetype=clojure
let b:scratch = 1
endfunction
aug END
function! s:sexp_mappings() abort
if !exists('g:sexp_loaded')
return
endif
nmap <buffer> cfo <Plug>(sexp_raise_list)
nmap <buffer> cfO <Plug>(sexp_raise_element)
nmap <buffer> cfe <Plug>(sexp_raise_element)
endfunction
function! s:TangentInit() abort
set textwidth=80
command! TReset call fireplace#session_eval('(user/reset)')
command! TGo call fireplace#session_eval('(user/go)')
command! TMigrate call fireplace#session_eval('(user/migrate)')
command! TRollback call fireplace#session_eval('(user/rollback)')
nnoremap g\ :TReset<CR>
endfunction
" }}}
" Go {{{
let g:go_highlight_functions = 1
let g:go_highlight_methods = 1
let g:go_highlight_structs = 1
let g:go_highlight_operators = 1
let g:go_highlight_build_constraints = 1
augroup Go
autocmd!
autocmd FileType go setlocal omnifunc=go#complete#Complete
autocmd FileType go setlocal foldmethod=syntax
autocmd FileType go setlocal foldlevel=100
autocmd FileType go nnoremap <buffer> <F9> :GoTest<CR>
autocmd FileType go inoremap <buffer> <F9> <ESC>:GoTest<CR>i
augroup END
" }}}
" RAML {{{
function! s:buffer_syntax() " {{{
syn keyword ramlRAML RAML contained
syn match ramlVersionString '^#%RAML \d\.\d' contains=ramlRAML
endfunction " }}}
augroup RAML
autocmd!
autocmd BufRead,BufNewFile *.raml set filetype=yaml
autocmd BufRead,BufNewFile *.raml call s:buffer_syntax()
augroup END
hi def link ramlVersionString Special
hi def link ramlRAML Error
" }}}
" Mustache/Handlebars {{{
let g:mustache_abbreviations = 1
" }}}
" Netrw {{{
augroup netrw
autocmd!
autocmd FileType netrw nnoremap <buffer> Q :Rexplore<CR>
" Hee hee, oil and vinegar
function! s:setup_oil() abort
nnoremap <buffer> q <C-6>
xnoremap <buffer> q <C-6>
endfunction
augroup END
" }}}
" }}}
" Remove trailing whitespace {{{
fun! <SID>StripTrailingWhitespaces()
let l = line(".")
let c = col(".")
%s/\s\+$//e
call cursor(l, c)
endfun
augroup striptrailingwhitespaces " {{{
autocmd FileType c,cpp,java,php,ruby,python,sql,javascript,sh,jst,less,haskell,haml,coffee,scss,clojure,objc,elixir,yaml,json,eruby
\ autocmd BufWritePre <buffer> :call <SID>StripTrailingWhitespaces()
augroup END " }}}
" }}}
" Goyo {{{
let g:limelight_conceal_ctermfg = "10"
let g:limelight_conceal_guifg = "#586e75"
autocmd! User GoyoEnter Limelight
autocmd! User GoyoLeave Limelight!
" }}}
"-----------------------------------------------------------------------------
" Commands {{{
" Edit temporary SQL files {{{
let s:curr_sql = 0
fun! <SID>EditSqlTempFile()
let l:fname = '/tmp/q' . s:curr_sql . '.sql'
execute 'edit' l:fname
let s:curr_sql = s:curr_sql + 1
endfun
com! EditSqlTempFile call <SID>EditSqlTempFile()
" }}}
" Double Indentation
command! -range DoubleIndentation <line1>,<line2>s/^\(\s.\{-}\)\(\S\)/\1\1\2/
" Quick-and-dirty fix capitalization of sql files
command! -range FixSqlCapitalization <line1>,<line2>v/\v(^\s*--.*$)|(TG_)/norm guu
" VimPipe Commands {{{
" let g:sql_type_default = 'pgsql'
command! SqlLive let b:vimpipe_command="vagrant ssh -c '~/mysql'"
command! SqlRails let b:vimpipe_command="bin/rails dbconsole"
command! SqlHeroku let b:vimpipe_command="heroku pg:psql"
command! SqlEntities let b:vimpipe_command="psql -h 127.1 entities nomi"
command! SqlUsers let b:vimpipe_command="psql -h 127.1 users nomi"
command! SqlTangent let b:vimpipe_command="psql -h local.docker tangent super"
" }}}
" Git commands {{{
command! -nargs=* Gpf Gpush -f <args>
command! -nargs=* Gcv Gcommit --verbose <args>
" }}}
" Focus dispatch to only the last failures
command! -nargs=* FocusFailures FocusDispatch rspec --only-failures <args>
" }}}
" Autocommands {{{
augroup fugitive " {{{
au!
autocmd BufNewFile,BufRead fugitive://* set bufhidden=delete
augroup END " }}}
augroup omni " {{{
au!
" autocmd FileType javascript setlocal omnifunc=tern#Complete
"autocmd FileType python setlocal omnifunc=pythoncomplete#Complete
autocmd FileType php setlocal omnifunc=
augroup END " }}}
augroup sql " {{{
au!
autocmd FileType sql let b:vimpipe_command="psql -h 127.0.0.1 landlordsny_development landlordsny"
autocmd FileType sql let b:vimpipe_filetype="postgresql"
autocmd FileType sql set syntax=postgresql
autocmd FileType postgresql set nowrap
autocmd BufNewFile,BufReadPost *.sql set syntax=pgsql
augroup END " }}}
augroup markdown " {{{
au!
autocmd FileType markdown let b:vimpipe_command='markdown'
autocmd FileType markdown let b:vimpipe_filetype='html'
autocmd FileType markdown set tw=80
augroup END " }}}
augroup typescript " {{{
au!
autocmd FileType typescript let b:vimpipe_command='tsc'
autocmd FileType typescript let b:vimpipe_filetype='javascript'
autocmd FileType typescript TSSstarthere
autocmd FileType typescript nnoremap <buffer> gd :TSSdef<CR>
augroup END " }}}
augroup jsx " {{{
au!
" autocmd FileType jsx set syntax=javascript
autocmd FileType javascript set filetype=javascript.jsx
augroup END " }}}
augroup nicefoldmethod " {{{
au!
" Don't screw up folds when inserting text that might affect them, until
" leaving insert mode. Foldmethod is local to the window. Protect against
" screwing up folding when switching between windows.
autocmd InsertEnter *
\ if !exists('w:last_fdm') |
\ let w:last_fdm=&foldmethod |
\ setlocal foldmethod=manual |
\ endif
autocmd InsertLeave,WinLeave *
\ if exists('w:last_fdm') |
\ let &l:foldmethod=w:last_fdm |
\ unlet w:last_fdm |
\ endif
augroup END " }}}
augroup visualbell " {{{
au!
autocmd GUIEnter * set visualbell t_vb=
augroup END
" }}}
augroup quickfix " {{{
au!
autocmd QuickFixCmdPost grep cwindow
augroup END " }}}
augroup php " {{{
au!
augroup END "}}}
augroup rubylang " {{{
au!
autocmd FileType ruby compiler rake
augroup END " }}}
augroup javascript "{{{
au!
autocmd FileType javascript let &errorformat =
\ '%E%.%#%n) %s:,' .
\ '%C%.%#Error: %m,' .
\ '%C%.%#at %s (%f:%l:%c),' .
\ '%Z%.%#at %s (%f:%l:%c),' .
\ '%-G%.%#,'
augroup END " }}}
augroup git " {{{
autocmd!
autocmd FileType gitcommit set textwidth=72
augroup END
" }}}
" }}}
" Leader commands {{{
" Edit specific files {{{
nnoremap <silent> <leader>ev :split $MYVIMRC<CR>
nnoremap <silent> <leader>eb :split ~/.vim_bundles<CR>
nnoremap <silent> <leader>es :UltiSnipsEdit<CR>
nnoremap <silent> <leader>ea :split ~/.vim/after/plugin/abolish.vim<CR>
nnoremap <silent> <leader>sv :so $MYVIMRC<CR>
nnoremap <silent> <leader>sb :so ~/.vim_bundles<CR>
nnoremap <silent> <leader>sa :so ~/.vim/after/plugin/abolish.vim<CR>
nnoremap <Leader>el :EditSqlTempFile<CR>
" }}}
" Toggle navigation panels {{{
nnoremap <Leader>l :TagbarToggle<CR>
nnoremap <Leader>mb :MBEToggle<CR>
nnoremap <Leader>u :GundoToggle<CR>
nnoremap <Leader>t :CtrlP<CR>
nnoremap <Leader>z :FZF<CR>
nnoremap <Leader>b :CtrlPBuffer<CR>
nnoremap <Leader>a :CtrlPTag<CR>
nnoremap <Leader>r :CtrlPGitBranch<CR>
" }}}
" CtrlP {{{
let g:ctrlp_custom_ignore = {
\ 'dir': 'node_modules',
\ }
" }}}
" Git leader commands {{{
noremap <Leader>g :Git<SPACE>
noremap <Leader>gu :Gpull<CR>
noremap <Leader>gp :Gpush<CR>
noremap <Leader>s :Gstatus<CR>
noremap <Leader>cv :Gcommit --verbose<CR>
noremap <Leader>ca :Gcommit --verbose --amend<CR>
nnoremap <Leader>dl :diffg LOCAL<CR>
nnoremap <Leader>dr :diffg REMOTE<CR>
nnoremap <Leader>db :diffg BASE<CR>
nnoremap <Leader>du :diffu<CR>
nnoremap <Leader>dg :diffg<CR>
nnoremap <Leader>d2 :diffg //2<CR>:diffu<CR>
nnoremap <Leader>d3 :diffg //3<CR>:diffu<CR>
nnoremap <Leader>yt :SignifyToggle<CR>
" }}}
" Breakpoint Leader Commands {{{
nnoremap <Leader>x :Breakpoint<CR>
nnoremap <Leader>dx :BreakpointRemove *<CR>
" }}}
" Tabularize {{{
" Leader Commands {{{
nnoremap <localleader>t= :Tabularize /=<CR>
vmap <localleader>t= :Tabularize /=<CR>
nnoremap <localleader>t> :Tabularize /=><CR>
vmap <localleader>t> :Tabularize /=><CR>
" }}}
" => Aligning {{{
function! s:rocketalign()
let l:p = '^.*=>\s.*$'
echo l:p
if exists(':Tabularize') && getline('.') =~# '^.*=' &&
\ (getline(line('.')-1) =~# l:p || getline(line('.')+1) =~# l:p)
let column = strlen(substitute(getline('.')[0:col('.')],'[^=>]','','g'))
let position = strlen(matchstr(getline('.')[0:col('.')],'.*=>\s*\zs.*'))
Tabularize/=>/l1
normal! $
call search(repeat('[^=>]*=>',column).'\s\{-\}'.repeat('.',position),'ce',line('.'))
endif
endfunction
"inoremap <buffer> <space>=><space> =><Esc>:call <SID>rocketalign()<CR>a
" }}}
" = Aligning {{{
function! s:eqalign()
let l:p = '^.*=\s.*$'
if exists(':Tabularize') && getline('.') =~# '^.*=' &&
\ (getline(line('.')-1) =~# l:p || getline(line('.')+1) =~# l:p)
let column = strlen(substitute(getline('.')[0:col('.')],'[^=]','','g'))
let position = strlen(matchstr(getline('.')[0:col('.')],'.*=\s*\zs.*'))
Tabularize/=/l1
normal! $
call search(repeat('[^=]*=',column).'\s\{-\}'.repeat('.',position),'ce',line('.'))
endif
endfunction
"inoremap <buffer><silent> <space>=<space> =<Esc>:call <SID>eqalign()<CR>a
" }}}
" : Aligning {{{
function! s:colonalign()
let l:p : '^.*:\s.*$'
if exists(':Tabularize') && getline('.') :~# '^.*:' &&
\ (getline(line('.')-1) :~# l:p || getline(line('.')+1) :~# l:p)
let column : strlen(substitute(getline('.')[0:col('.')],'[^:]','','g'))
let position : strlen(matchstr(getline('.')[0:col('.')],'.*:\s*\zs.*'))
Tabularize/:/l1
normal! $
call search(repeat('[^:]*:',column).'\s\{-\}'.repeat('.',position),'ce',line('.'))
endif
endfunction
"inoremap <buffer><silent> <space>:<space> :<Esc>:call <SID>colonalign()<CR>a
" }}}
" }}}
" }}}
" Mappings {{{
" 'delete current'
nnoremap dc 0d$
nnoremap com :silent !tmux set status<CR>
nnoremap <F9> :Make<CR>
nnoremap g<CR> :Dispatch<CR>
nnoremap g\ :Start<CR>
inoremap <F9> <ESC>:Make<CR>i
" Navigate buffers {{{
nnoremap gb :bn<CR>
nnoremap gB :bp<CR>
" }}}
" Window Navigation {{{
nnoremap <space>w <C-w>
nnoremap <space>h <C-w>h
nnoremap <space>j <C-w>j
nnoremap <space>k <C-w>k
nnoremap <space>l <C-w>l
nnoremap <space>z <C-w>z
" }}}
" Sort with motion {{{
if !exists("g:sort_motion_flags")
let g:sort_motion_flags = ""
endif
function! s:sort_motion(mode) abort
if a:mode == 'line'
execute "'[,']sort " . g:sort_motion_flags
elseif a:mode == 'char'
execute "normal! `[v`]y"
let sorted = join(sort(split(@@, ', ')), ', ')
execute "normal! v`]c" . sorted
elseif a:mode == 'V' || a:mode == ''
execute "'<,'>sort " . g:sort_motion_flags
endif
endfunction
function! s:sort_lines()
let beginning = line('.')
let end = v:count + beginning - 1
execute beginning . ',' . end . 'sort'
endfunction
xnoremap <silent> <Plug>SortMotionVisual :<C-U>call <SID>sort_motion(visualmode())<CR>
nnoremap <silent> <Plug>SortMotion :<C-U>set opfunc=<SID>sort_motion<CR>g@
nnoremap <silent> <Plug>SortLines :<C-U>call <SID>sort_lines()<CR>
map go <Plug>SortMotion
vmap go <Plug>SortMotionVisual
map goo <Plug>SortLines
" }}}
" }}}
let g:hare_executable = 'cabal exec -- ghc-hare'