f7b3e0a7a9
Dropping support for OSX. Moving forward these dotfiles will depend on Linux systems. Furthermore, since I'm support a ~/bin, the machines that consume these dotfiles depend on i386 architectures. Linux and i386 are two dependencies that I'm okay with since the leverage this assumption provides, makes their existence tolerable. There is some Google leakage herein, which includes aliases, functions, and mentions of cloudtop. For now, this is okay. I may break the Google specific code into its own repository, but for now, this is less maintenance. This also introduces a ~/.profile instead of erroneously defining environment variables in my zshrc file, which was unadvised. This is a large commit and also introduces new aliases, variables, functions that I accumulated over the past week or so while migrating away from OSX and onto my new setup. Hopefully in the future I'll be more precise with my commits.
667 lines
16 KiB
VimL
667 lines
16 KiB
VimL
" -- BEGIN: Vundle config --
|
|
set nocompatible " be iMproved, required
|
|
filetype off " required
|
|
|
|
" set the runtime path to include Vundle and initialize
|
|
" share Vundle between vim and neovim
|
|
set rtp+=~/.vim/bundle/Vundle.vim
|
|
set rtp+=~/.config/nvim/bundle/Vundle.vim
|
|
call vundle#begin()
|
|
" alternatively, pass a path where Vundle should install plugins
|
|
"call vundle#begin('~/some/path/here')
|
|
|
|
" let Vundle manage Vundle, required
|
|
Plugin 'VundleVim/Vundle.vim'
|
|
|
|
" The following are examples of different formats supported.
|
|
" Keep Plugin commands between vundle#begin/end.
|
|
|
|
" Displays git information in airline.
|
|
Plugin 'tpope/vim-fugitive'
|
|
|
|
" easier file navigation
|
|
Plugin 'tpope/vim-vinegar'
|
|
|
|
" Displays git-tracked C*UD ops within gutter.
|
|
Plugin 'airblade/vim-gitgutter'
|
|
|
|
" Fuzzy-finder
|
|
Plugin 'kien/ctrlp.vim'
|
|
|
|
" Grep file contents
|
|
Plugin 'mileszs/ack.vim'
|
|
|
|
" JS support
|
|
Plugin 'pangloss/vim-javascript'
|
|
|
|
" JSX support
|
|
Plugin 'mxw/vim-jsx'
|
|
|
|
" Syntax Highlighting Support
|
|
Plugin 'lambdatoast/elm.vim'
|
|
|
|
" Elixir Plugins
|
|
Plugin 'elixir-lang/vim-elixir'
|
|
Plugin 'slashmili/alchemist.vim'
|
|
Plugin 'powerman/vim-plugin-AnsiEsc'
|
|
|
|
" TypeScript Plugins
|
|
Plugin 'rschmukler/typescript-vim'
|
|
|
|
" Themes
|
|
Plugin 'sickill/vim-monokai'
|
|
Plugin 'altercation/vim-colors-solarized'
|
|
Plugin 'mhartington/oceanic-next'
|
|
|
|
" Executes shell commands and pipes output into new Vim buffer.
|
|
Plugin 'sjl/clam.vim'
|
|
|
|
" Multiple cursors for simultaneous edits.
|
|
" NOTE: use <C-n> to run miltiple cursors not <C-d>
|
|
Plugin 'terryma/vim-multiple-cursors'
|
|
|
|
" Visualize buffers
|
|
Plugin 'vim-airline/vim-airline'
|
|
Plugin 'vim-airline/vim-airline-themes'
|
|
|
|
" Visually align assignments
|
|
Plugin 'godlygeek/tabular'
|
|
|
|
" Visually Highlight and comment code.
|
|
Plugin 'tpope/vim-commentary'
|
|
|
|
" Macros for quotes, parens, etc.
|
|
Plugin 'tpope/vim-surround'
|
|
|
|
" Allows Plugins to be repeated with `.` character
|
|
Plugin 'tpope/vim-repeat'
|
|
|
|
" Pairs of mappings
|
|
Plugin 'tpope/vim-unimpaired'
|
|
|
|
" LISPs support
|
|
Plugin 'guns/vim-sexp'
|
|
Plugin 'tpope/vim-sexp-mappings-for-regular-people'
|
|
let g:sexp_enable_insert_mode_mappings = 0
|
|
let g:sexp_filetypes = ''
|
|
|
|
" Seamlessly navigate Vim and Tmux with similar bindings.
|
|
Plugin 'christoomey/vim-tmux-navigator'
|
|
|
|
" Async `:make` for code linting etc.
|
|
Plugin 'neomake/neomake'
|
|
|
|
" Color pack
|
|
Plugin 'flazz/vim-colorschemes'
|
|
|
|
" Better buffer mgt than CtrlP
|
|
Plugin 'yegappan/mru'
|
|
|
|
Plugin 'zanglg/nova.vim'
|
|
|
|
" Emulates Emacs's Helm Swoop search
|
|
Plugin 'pelodelfuego/vim-swoop'
|
|
|
|
" Fish Shell support
|
|
Plugin 'dag/vim-fish'
|
|
|
|
" Gotham colorscheme
|
|
Plugin 'whatyouhide/vim-gotham'
|
|
|
|
" Transparent encryption + decryption
|
|
Plugin 'jamessan/vim-gnupg'
|
|
|
|
" Javascript auto-formatting
|
|
Plugin 'prettier/vim-prettier', {
|
|
\ 'do': 'yarn install',
|
|
\ 'for': ['javascript', 'typescript', 'css', 'less', 'scss', 'json', 'graphql', 'markdown'] }
|
|
|
|
" Support Org mode
|
|
Plugin 'jceb/vim-orgmode'
|
|
|
|
" ReaosnML
|
|
Plugin 'reasonml-editor/vim-reason-plus'
|
|
|
|
" Autocompletion
|
|
Plugin 'junegunn/fzf'
|
|
|
|
" Better JSON highlighting
|
|
Plugin 'elzr/vim-json'
|
|
|
|
" Text objects made easy
|
|
Plugin 'kana/vim-textobj-user'
|
|
|
|
" Elixir text objects
|
|
Plugin 'andyl/vim-textobj-elixir'
|
|
|
|
" Making HTML editing faster
|
|
Plugin 'mattn/emmet-vim'
|
|
|
|
" Snippets for all languages
|
|
Plugin 'honza/vim-snippets'
|
|
|
|
" Automatic bracket insertion
|
|
Plugin 'jiangmiao/auto-pairs'
|
|
|
|
" Linting & error warnings
|
|
Plugin 'vim-syntastic/syntastic'
|
|
|
|
" Atom colorscheme
|
|
Plugin 'rakr/vim-one'
|
|
|
|
" Nix syntax highlighting
|
|
Plugin 'LnL7/vim-nix'
|
|
|
|
call vundle#end() " required
|
|
filetype plugin indent on " required
|
|
" Put your non-Plugin stuff after this line
|
|
" -- END: Vundle config --
|
|
|
|
" Changes <leader> to <space> character.
|
|
let mapleader = " "
|
|
|
|
|
|
" Highlight column width
|
|
set textwidth=80
|
|
set colorcolumn=+0
|
|
|
|
" autoreload a file when it changes on disk
|
|
set autoread
|
|
|
|
" default to case-insensitive searching
|
|
set ignorecase
|
|
|
|
" JSX configuration
|
|
let g:jsx_ext_required = 0
|
|
|
|
|
|
autocmd FileType reason nnoremap <buffer> gd :call LanguageClient_textDocument_definition()<CR>
|
|
autocmd FileType reason nnoremap <buffer> gf :call LanguageClient_textDocument_formatting()<CR>
|
|
autocmd FileType reason nnoremap <buffer> gh :call LanguageClient_textDocument_hover()<CR>
|
|
autocmd FileType reason nnoremap <buffer> gr :call LanguageClient_textDocument_rename()<CR>
|
|
|
|
" Replace <CR> with G for faster navigation
|
|
nnoremap <CR> G
|
|
|
|
|
|
" Syntastic configuration
|
|
set statusline+=%#warningmsg#
|
|
set statusline+=%{SyntasticStatuslineFlag()}
|
|
set statusline+=%*
|
|
|
|
let g:syntastic_always_populate_loc_list = 1
|
|
let g:syntastic_auto_loc_list = 1
|
|
let g:syntastic_check_on_open = 1
|
|
let g:syntastic_check_on_wq = 0
|
|
let g:syntastic_javascript_checkers = ['eslint']
|
|
let g:syntastic_javascript_eslint_generic = 1
|
|
" this is a hack to prevent a false negative
|
|
" https://github.com/vim-syntastic/syntastic/issues/1692
|
|
let g:syntastic_javascript_eslint_exec = '/bin/ls'
|
|
let g:syntastic_javascript_eslint_exe = 'npx eslint'
|
|
let g:syntastic_javascript_eslint_args = '-f compact'
|
|
|
|
" javascript autocompletion
|
|
autocmd FileType javascript setlocal omnifunc=javascriptcomplete#CompleteJS
|
|
autocmd FileType javascript nnoremap <buffer> gf :Prettier<CR>
|
|
|
|
" Maximize the current window
|
|
" Similar to Tmux mapping alt-z in my tmux.conf
|
|
nnoremap t% :tab sp<CR>
|
|
|
|
" Allow C-g to act like C-c the way it does in Emacs
|
|
cnoremap <C-g> <C-c>
|
|
|
|
" Prettier configuration
|
|
let g:prettier#exec_cmd_async = 1
|
|
" force Prettier to run on files even without the @format pragma
|
|
let g:prettier#autoformat = 0
|
|
|
|
|
|
" Basic settings
|
|
" Thin cursor on INSERT mode
|
|
if has('nvim')
|
|
let $NVIM_TUI_ENABLE_CURSOR_SHAPE = 1
|
|
endif
|
|
|
|
set number
|
|
set nowrap
|
|
set tabstop=2
|
|
set expandtab
|
|
set shiftwidth=2
|
|
set background=dark
|
|
|
|
syntax enable
|
|
colorscheme one
|
|
set background=dark
|
|
|
|
" Vim in terminal cannot have a different font from the one set within your
|
|
" terminal. However, this setting will set the font for the GUI version.
|
|
if has('gui_running')
|
|
set guifont=Operator\ Mono:h12
|
|
endif
|
|
|
|
if has('termguicolors')
|
|
set termguicolors
|
|
endif
|
|
|
|
if &term =~# '^screen'
|
|
let &t_8f = "\<Esc>[38;2;%lu;%lu;%lum"
|
|
let &t_8b = "\<Esc>[48;2;%lu;%lu;%lum"
|
|
endif
|
|
|
|
set history=1000
|
|
set undolevels=1000
|
|
|
|
set t_Co=255
|
|
|
|
" Support italics
|
|
highlight Comment cterm=italic
|
|
|
|
|
|
" quickly edit popular configuration files
|
|
nnoremap <leader>ev :vsplit $MYVIMRC<CR>
|
|
nnoremap <leader>ee :vsplit ~/.emacs.d/init.el<CR>
|
|
nnoremap <leader>ez :vsplit ~/.zshrc<CR>
|
|
nnoremap <leader>ea :vsplit ~/aliases.zsh<CR>
|
|
nnoremap <leader>ef :vsplit ~/functions.zsh<CR>
|
|
nnoremap <leader>el :vsplit ~/variables.zsh<CR>
|
|
nnoremap <leader>ex :vsplit ~/.Xresources<CR>
|
|
nnoremap <leader>ei :vsplit ~/.config/i3/config<CR>
|
|
|
|
" quickly source your vimrc
|
|
nnoremap <leader>sv :source $MYVIMRC<CR>
|
|
|
|
" quickly edit your snippets
|
|
nnoremap <leader>es :vsplit<CR>:edit ~/.vim/bundle/vim-snippets/snippets/reason.snippets<CR>
|
|
|
|
|
|
" Auto resize window splits
|
|
autocmd VimResized * wincmd =
|
|
|
|
|
|
" Neomake Settings
|
|
autocmd! BufWritePost * Neomake
|
|
|
|
" Elixir linting
|
|
let g:neomake_elixir_credo_maker = {
|
|
\ 'exe': 'mix',
|
|
\ 'args': ['credo', 'list', '%:p', '--format=oneline'],
|
|
\ 'errorformat':
|
|
\ '%W[F] %. %f:%l:%c %m,' .
|
|
\ '%W[F] %. %f:%l %m,' .
|
|
\ '%W[R] %. %f:%l:%c %m,' .
|
|
\ '%W[R] %. %f:%l %m,' .
|
|
\ '%I[C] %. %f:%l:%c %m,' .
|
|
\ '%I[C] %. %f:%l %m,' .
|
|
\ '%-Z%.%#'
|
|
\ }
|
|
|
|
|
|
let g:neomake_elixir_enabled_makers = ['mix', 'credo']
|
|
|
|
augroup my_error_signs
|
|
au!
|
|
autocmd ColorScheme * hi NeomakeErrorSign ctermfg=203 guifg=#ff5f5f
|
|
autocmd ColorScheme * hi NeomakeWarningSign ctermfg=209 guifg=#ffaf00
|
|
autocmd ColorScheme * hi NeomakeInfoSign ctermfg=183 guifg=#dfafff
|
|
autocmd ColorScheme * hi NeomakeMessageSign ctermfg=27 guifg=#0087ff
|
|
augroup END
|
|
|
|
|
|
let g:neomake_error_sign = {
|
|
\ 'text': '>>',
|
|
\ 'texthl': 'NeoMakeErrorSign',
|
|
\ }
|
|
|
|
let g:neomake_warning_sign = {
|
|
\ 'text': '>>',
|
|
\ 'texthl': 'NeoMakeWarningSign',
|
|
\ }
|
|
|
|
let g:neomake_info_sign = {
|
|
\ 'text': '>>',
|
|
\ 'texthl': 'NeoMakeInfoSign',
|
|
\ }
|
|
|
|
let g:neomake_message_sign = {
|
|
\ 'text': '>>',
|
|
\ 'texthl': 'NeoMakeMessageSign',
|
|
\ }
|
|
|
|
function! <SID>LocationPrevious()
|
|
try
|
|
lprev
|
|
catch /^Vim\%((\a\+)\)\=:E553/
|
|
llast
|
|
endtry
|
|
endfunction
|
|
|
|
function! <SID>LocationNext()
|
|
try
|
|
lnext
|
|
catch /^Vim\%((\a\+)\)\=:E553/
|
|
lfirst
|
|
endtry
|
|
endfunction
|
|
|
|
nnoremap <Leader>[ :call <SID>LocationPrevious()<CR>
|
|
nnoremap <Leader>] :call <SID>LocationNext()<CR>
|
|
|
|
|
|
" Alchemist settings
|
|
let g:alchemist#elixir_erlang_src = '/usr/local/share/src'
|
|
|
|
|
|
" Airline Settings
|
|
" Enables the list of buffers.
|
|
let g:airline#extensions#tabline#enabled = 0
|
|
|
|
" Buffer numbers alongside files
|
|
let g:airline#extensions#tabline#buffer_nr_show = 0
|
|
|
|
" Shows the filename only.
|
|
let g:airline#extensions#tabline#fnamemod = ':t'
|
|
|
|
" Allow glyphs in airline
|
|
let g:airline_powerline_fonts = 1
|
|
|
|
" Change Airline theme
|
|
let g:airline_theme = 'hybrid'
|
|
|
|
|
|
" Vim-Swoop Settings
|
|
" Edits colorscheme
|
|
let g:swoopHighlight = ["hi! link SwoopBufferLineHi Warning", "hi! link SwoopPatternHi Error"]
|
|
|
|
|
|
" Jump to buffers.
|
|
nmap <F1> :1b<CR>
|
|
nmap <F2> :2b<CR>
|
|
nmap <F3> :3b<CR>
|
|
nmap <F4> :4b<CR>
|
|
nmap <F5> :5b<CR>
|
|
nmap <F6> :6b<CR>
|
|
nmap <F7> :7b<CR>
|
|
nmap <F8> :8b<CR>
|
|
nmap <F9> :9b<CR>
|
|
|
|
|
|
" It's the twenty-first century...no swaps.
|
|
set noswapfile
|
|
|
|
|
|
" Allow visual tab completion in command mode
|
|
set wildmenu
|
|
|
|
|
|
" Show Vim commands as they're being input.
|
|
set showcmd
|
|
|
|
|
|
" Code folding
|
|
" set foldmethod=indent
|
|
" set foldnestmax=10
|
|
" set nofoldenable
|
|
" set foldlevel=4
|
|
|
|
|
|
" emulate ci" and ci' behavior
|
|
nnoremap ci( f(%ci(
|
|
nnoremap ci[ f[%ci[
|
|
|
|
|
|
" extend functionality of <C-e> & <C-y> scrolling
|
|
nnoremap <C-e> <C-e>j
|
|
vnoremap <C-e> <C-e>j
|
|
nnoremap <C-y> <C-y>k
|
|
vnoremap <C-y> <C-y>k
|
|
|
|
|
|
" Opens all folds within the buffer
|
|
" nnoremap ZZ zR
|
|
|
|
" Closes all folds within the buffer
|
|
" nnoremap zz zM
|
|
|
|
" Opens all folds beneath the cursor
|
|
" NOTE: j is the character to go down
|
|
" nnoremap zJ zO
|
|
|
|
" Opens single fold beneath the cursor
|
|
" NOTE: j is the character to go down
|
|
" nnoremap zj zo
|
|
|
|
" Opens single fold beneath the cursor
|
|
" NOTE: k is the character to go down
|
|
" nnoremap zK zC
|
|
|
|
" Opens single fold beneath the cursor
|
|
" NOTE: k is the character to go down
|
|
" nnoremap zk zc
|
|
|
|
|
|
" Save shortcut
|
|
nnoremap <C-s> :w<CR>
|
|
|
|
|
|
" Switch to MRU'd buffer
|
|
nnoremap <leader><leader> <C-^>
|
|
|
|
|
|
" Alternative MRU to CtrlP MRU
|
|
nnoremap <leader>b :MRU<CR>
|
|
|
|
|
|
" Supports mouse interaction.
|
|
set mouse=a
|
|
|
|
|
|
" Highlights matches during a search.
|
|
set hlsearch
|
|
|
|
" Clear highlight
|
|
noremap <silent> <leader>h :nohlsearch<bar>:echo<CR>
|
|
|
|
|
|
" backspace settings
|
|
set backspace=2
|
|
set backspace=indent,eol,start
|
|
|
|
|
|
" Javascript specific variables
|
|
let g:javascript_plugin_jsdoc = 1
|
|
|
|
" GlobalListchars
|
|
set list
|
|
set listchars=tab:··,trail:·,nbsp:·
|
|
|
|
|
|
" Keeps everything concealed at all times. Even when cursor is on the word.
|
|
set conceallevel=1
|
|
set concealcursor=nvic
|
|
|
|
|
|
" map jk to <Esc>
|
|
inoremap jk <Esc>
|
|
|
|
|
|
" Hybrid mode for Vim
|
|
inoremap <C-a> <Esc>I
|
|
inoremap <C-e> <Esc>A
|
|
|
|
inoremap <M-b> <S-Left>
|
|
inoremap <M-f> <S-Right>
|
|
|
|
inoremap <C-b> <Left>
|
|
inoremap <C-f> <Right>
|
|
inoremap <C-p> <Up>
|
|
inoremap <C-n> <Down>
|
|
|
|
|
|
" Manage Vertical and Horizontal splits
|
|
nnoremap sl <Esc>:vs<CR><C-w>l
|
|
nnoremap sh <Esc>:vs<CR>
|
|
nnoremap sj <Esc>:sp<CR><C-w>j
|
|
nnoremap sk <Esc>:sp<CR>
|
|
|
|
|
|
" Delete (i.e. "close") the currently opened buffer
|
|
" TODO: unless it's a split window, which should be :q
|
|
nnoremap <leader>q :bdelete<CR>
|
|
|
|
|
|
" Set CtrlP runtime path
|
|
set runtimepath^=~/.vim/bundle/ctrlp.vim
|
|
|
|
|
|
" Pane movement
|
|
let g:tmux_navigator_no_mappings = 1
|
|
|
|
nnoremap <silent> <M-h> :TmuxNavigateLeft<CR>
|
|
nnoremap <silent> <M-j> :TmuxNavigateDown<CR>
|
|
nnoremap <silent> <M-k> :TmuxNavigateUp<CR>
|
|
nnoremap <silent> <M-l> :TmuxNavigateRight<CR>
|
|
nnoremap <silent> <M-q> :q<CR>
|
|
|
|
" make Y do what is intuitive given:
|
|
" D: deletes until EOL
|
|
" C: changes until EOL
|
|
" Y: (should) yank until EOL
|
|
nnoremap Y y$
|
|
|
|
|
|
" scrolling and maintaing mouse position
|
|
" nnoremap <C-j> j<C-e>
|
|
" nnoremap <C-k> k<C-y>
|
|
|
|
|
|
" remap redo key that is eclipsed by `rotate` currently
|
|
nnoremap U :redo<CR>
|
|
|
|
|
|
" Define highlighting groups
|
|
" NOTE: The ANSII aliases for colors will change when iTerm2 settings are
|
|
" changed.
|
|
highlight InterestingWord1 ctermbg=Magenta ctermfg=Black
|
|
highlight InterestingWord2 ctermbg=Blue ctermfg=Black
|
|
|
|
" h1 highlighting
|
|
nnoremap <silent> <leader>1 :execute '2match InterestingWord1 /\<<c-r><c-w>\>/'<CR>
|
|
nnoremap <silent> <leader>x1 :execute '2match none'<CR>
|
|
vnoremap <silent> <leader>1 :execute '2match InterestingWord1 /\<<c-r><c-w>\>/'<CR>
|
|
|
|
" h2 highlighting
|
|
nnoremap <silent> <leader>2 :execute '3match InterestingWord2 /\<<c-r><c-w>\>/'<CR>
|
|
nnoremap <silent> <leader>x2 :execute '3match none'<CR>
|
|
|
|
"clear all highlighted groups
|
|
nnoremap <silent> <leader>xx :execute '2match none'<CR> :execute '3match none'<CR> hh
|
|
|
|
|
|
" pasteboard copy & paste
|
|
set clipboard+=unnamedplus
|
|
|
|
|
|
" Manage 80 char line limits
|
|
highlight OverLength1 ctermbg=Magenta ctermfg=Black
|
|
highlight OverLength2 ctermbg=LightMagenta ctermfg=Black
|
|
highlight OverLength3 ctermbg=White ctermfg=Black
|
|
" match OverLength3 /\%81v.\+/
|
|
match OverLength2 /\%91v.\+/
|
|
" match OverLength3 /\%101v.\+/
|
|
|
|
nnoremap <leader>w :w<CR>
|
|
|
|
|
|
" Resize split to 10,20,...,100 chars
|
|
" Uncomment the next lines for support at those sizes.
|
|
" These bindings interfere with the highlight groups, however.
|
|
" Increases the width of a vertical split.
|
|
" nnoremap <leader>1 :vertical resize 10<CR>
|
|
" nnoremap <leader>2 :vertical resize 20<CR>
|
|
nnoremap <leader>3 :vertical resize 30<CR>
|
|
nnoremap <leader>4 :vertical resize 40<CR>
|
|
nnoremap <leader>5 :vertical resize 50<CR>
|
|
nnoremap <leader>6 :vertical resize 60<CR>
|
|
nnoremap <leader>7 :vertical resize 70<CR>
|
|
nnoremap <leader>8 :vertical resize 80<CR>
|
|
nnoremap <leader>9 :vertical resize 90<CR>
|
|
nnoremap <leader>0 :vertical resize 100<CR>
|
|
|
|
|
|
" Increases the height of a horizontal split.
|
|
nnoremap <leader>v1 :resize 5<CR>
|
|
nnoremap <leader>v2 :resize 10<CR>
|
|
nnoremap <leader>v3 :resize 15<CR>
|
|
nnoremap <leader>v4 :resize 20<CR>
|
|
nnoremap <leader>v5 :resize 25<CR>
|
|
nnoremap <leader>v6 :resize 30<CR>
|
|
nnoremap <leader>v7 :resize 35<CR>
|
|
nnoremap <leader>v8 :resize 40<CR>
|
|
nnoremap <leader>v9 :resize 45<CR>
|
|
nnoremap <leader>v0 :resize 50<CR>
|
|
|
|
|
|
" BOL and EOL
|
|
nnoremap H ^
|
|
vnoremap H ^
|
|
nnoremap L $
|
|
vnoremap L $
|
|
|
|
|
|
" Search for visually selected text
|
|
vnoremap // y/<C-r>"<CR>N
|
|
|
|
|
|
" trim trailing whitespace on save
|
|
autocmd BufWritePre *.{js,py,tpl,less,html,ex,exs,txt} :%s/\s\+$//e
|
|
|
|
|
|
" Use .gitignore file to populate Ctrl-P
|
|
let g:ctrlp_user_command = ['.git', 'cd %s && git ls-files . -co --exclude-standard', 'find %s -type f']
|
|
|
|
|
|
" Ignores dirs and files
|
|
let g:ctrlp_custom_ignore = {
|
|
\ 'dir': 'node_modules',
|
|
\ 'file': '\v\.(exe|dll|png|jpg|jpeg)$'
|
|
\}
|
|
|
|
|
|
" WIP: Run elixir tests on that line
|
|
" TODO: only register binding in *.exs? file extensions
|
|
nnoremap <leader>t :call ExTestToggle()<CR>
|
|
|
|
|
|
" Jumps from an Elixir module file to an Elixir test file.
|
|
fun! ExTestToggle()
|
|
if expand('%:e') == "ex"
|
|
|
|
let test_file_name = expand('%:t:r') . "_test.exs"
|
|
let test_file_dir = substitute(expand('%:p:h'), "/lib/", "/test/", "")
|
|
let full_test_path = join([test_file_dir, test_file_name], "/")
|
|
|
|
e `=full_test_path`
|
|
|
|
elseif match(expand('%:t'), "_test.exs") != -1
|
|
|
|
let test_file_name = expand('%:t:r')
|
|
let offset_amt = strlen(test_file_name) - strlen("_test")
|
|
let module_file_name = strpart(test_file_name, 0, offset_amt) . ".ex"
|
|
let module_file_dir = substitute(expand('%:p:h'), "/test/", "/lib/", "")
|
|
let full_module_path = join([module_file_dir, module_file_name], "/")
|
|
|
|
e `=full_module_path`
|
|
|
|
endif
|
|
endfun
|
|
|
|
|
|
" Creates intermediate directories and file to match current buffer's filepath
|
|
fun! CreateNonExistingDirsAndFile()
|
|
! echo "Creating directory..." && mkdir -p %:p:h && echo "Created directory." && echo "Creating file..." && touch %:t:p && echo "Created file."
|
|
|
|
" Write the buffer to the recently created file.
|
|
w
|
|
endfun
|