#+TITLE: Vim Config
:DRAWER:
#+STARTUP: overview
#+LANGUAGE: en
#+EMAIL: dehaeze.thomas@gmail.com
#+AUTHOR: Dehaeze Thomas
#+HTML_LINK_HOME: ./index.html
#+HTML_LINK_UP: ./index.html
#+HTML_HEAD:
#+HTML_HEAD:
#+HTML_HEAD:
#+HTML_HEAD:
#+HTML_HEAD:
#+HTML_HEAD:
#+PROPERTY: header-args :comments none
#+PROPERTY: header-args+ :mkdirp yes
#+PROPERTY: header-args+ :tangle ~/.vimrc
:END:
* Plugins Install
** Plug start
#+BEGIN_SRC vimrc
call plug#begin('~/.vim/plugged')
#+end_src
** Manage Files
#+begin_src vimrc
Plug 'tpope/vim-vinegar' " Combine with netrw to create a delicious salad dressing
Plug 'junegunn/fzf', { 'dir': '~/.fzf', 'do': './install --bin' } " A command-line fuzzy finder written in Go
Plug 'junegunn/fzf.vim' " Fzf for vim
#+end_src
** Text Objects
#+begin_src vimrc
Plug 'kana/vim-textobj-user' " Create your own text objects
Plug 'kana/vim-textobj-line' " Text objects for the current line
Plug 'kana/vim-textobj-entire' " Text objects for entire buffer
Plug 'michaeljsmith/vim-indent-object' " Defines a new text object representing lines of code at the same indent level
Plug 'jiangmiao/auto-pairs' " Vim plugin, insert or delete brackets, parens, quotes in pair
#+end_src
** Git
#+begin_src vimrc
Plug 'jreybert/vimagit'
Plug 'tpope/vim-fugitive' " A Git wrapper so awesome, it should be illegal
Plug 'junegunn/gv.vim' " A git commit browser
Plug 'mhinz/vim-signify' " Show a diff using Vim its sign column
#+end_src
** Motions, Search
#+begin_src vimrc
Plug 'terryma/vim-expand-region' " Vim plugin that allows you to visually select increasingly larger regions of text using the same key combination
Plug 'justinmk/vim-sneak' " The missing motion for Vim
Plug 'haya14busa/is.vim' " Improved incremental searching for Vim
#+end_src
** Manipulate Things
#+begin_src vimrc
Plug 'tpope/vim-surround' " Quoting/parenthesizing made simple
Plug 'tpope/vim-commentary' " Comment stuff out
Plug 'junegunn/vim-easy-align' " A Vim alignment plugin
Plug 'Olical/vim-enmasse' " Edit every line in a quickfix list at the same time
Plug 'mhinz/vim-grepper', { 'on': ['Grepper', '(GrepperOperator)'] } "
#+end_src
** Utils
#+begin_src vimrc
Plug 'tpope/vim-repeat' " Enable repeating supported plugin maps with '.'
Plug 'tpope/vim-obsession' " Continuously updated session files
Plug 'tpope/vim-eunuch' " eunuch.vim: helpers for UNIX
Plug 'kana/vim-operator-user' " Define your own operator easily
Plug 'majutsushi/tagbar' " Vim plugin that displays tags in a window, ordered by scope
Plug 'tpope/vim-speeddating' " use CTRL-A/CTRL-X to increment dates, times, and more
Plug 'liuchengxu/vim-which-key' " Vim plugin that shows keybindings in popup
#+end_src
** Visual
#+begin_src vimrc
Plug 'itchyny/lightline.vim' " A light and configurable statusline/tabline for Vim
Plug 'Yggdroot/indentLine' " A vim plugin to display the indention levels with thin vertical lines
Plug 'ryanoasis/vim-devicons' " Adds file type glyphs/icons to many popular Vim plugins such as: NERDTree, vim-airline, unite, vim-startify and many more
Plug 'mhinz/vim-startify' " The fancy start screen for Vim
Plug 'junegunn/goyo.vim' " Distraction-free writing in Vim
#+end_src
** Themes
#+begin_src vimrc
Plug 'morhetz/gruvbox' " Retro groove color scheme for Vim
#+end_src
Other nice themes are [[https://github.com/mhartington/oceanic-next][oceanic-next]] and [[https://github.com/jacoborus/tender.vim][tender]].
** Language Server Protocol
#+begin_src vimrc
Plug 'autozimu/LanguageClient-neovim', {
\ 'branch': 'next',
\ 'do': 'bash install.sh',
\ }
#+end_src
** Snippnets and autocompletion
#+begin_src vimrc
Plug 'SirVer/ultisnips' " The ultimate snippet solution for Vim
Plug 'honza/vim-snippets' " Vim-snipmate default snippets
#+end_src
** Syntax Checking and Build Utils
#+begin_src vimrc
Plug 'neomake/neomake' " Asynchronous linting and make framework for Neovim/Vim
#+end_src
** Auto Completion
#+begin_src vimrc
if has('nvim')
Plug 'Shougo/deoplete.nvim', { 'do': ':UpdateRemotePlugins' }
Plug 'Nelyah/deoplete-mu'
else
Plug 'Shougo/deoplete.nvim'
Plug 'roxma/nvim-yarp'
Plug 'roxma/vim-hug-neovim-rpc'
Plug 'Nelyah/deoplete-mu'
endif
#+end_src
** Tmux
#+begin_src vimrc
Plug 'christoomey/vim-tmux-navigator' " Seamless navigation between tmux panes and vim splits
Plug 'jpalardy/vim-slime' " Used to type text into a REPL
#+end_src
** Syntax
#+begin_src vimrc
Plug 'sheerun/vim-polyglot' " A solid language pack for Vim
#+end_src
** Markdown
#+begin_src vimrc
Plug 'plasticboy/vim-markdown', { 'for': 'markdown' } " Markdown Vim Mode
Plug 'mzlogin/vim-markdown-toc', { 'for': 'markdown' } " A vim plugin to generate table of contents for Markdown files
Plug 'JamshedVesuna/vim-markdown-preview', { 'for': 'markdown' } " A light Vim plugin for previewing markdown files in a browser
Plug 'nelstrom/vim-markdown-folding' " Fold markdown documents by section
#+end_src
** LaTeX
#+begin_src vimrc
Plug 'lervag/vimtex', { 'for': 'tex' } " A modern vim plugin for editing LaTeX files.
#+end_src
** Matlab
#+begin_src vimrc
Plug 'tdehaeze/matlab-vim', { 'for': 'matlab' } " Edit Matlab M-files in Vim editor
Plug 'djoshea/vim-matlab-fold', { 'for': 'matlab' } " Vim code folding for Matlab files
#+end_src
** Org Mode
#+begin_src vimrc
Plug 'jceb/vim-orgmode' " Text outlining and task management for Vim
Plug 'vim-scripts/SyntaxRange' " Define a different filetype syntax on regions of a buffer
Plug 'chrisbra/NrrwRgn' " A Narrow Region Plugin for vim
Plug 'mattn/calendar-vim' " calendar vimscript
Plug 'vim-scripts/utl.vim' " Univeral Text Linking - Execute URLs, footnotes, open emails, organize ideas
#+end_src
** Plug End
#+begin_src vimrc
call plug#end()
#+end_src
* Basic
** General
#+begin_src vimrc
set runtimepath+=~/.vim
" Sets how many lines of history VIM has to remember
set history=500
" Enable filetype plugins
filetype plugin on
filetype indent on
" Set to auto read when a file is changed from the outside
set autoread
" writes the content of the file automatically if you call :make
set autowrite
" Share clipboard with system
set clipboard+=unnamedplus
" Define Leader Key as Space key
let mapleader = "\"
let g:mapleader = "\"
let maplocalleader = ","
#+end_src
** VIM user interface
#+begin_src vimrc
" Set 7 lines to the cursor - when moving vertically using j/k
set so=7
" Avoid garbled characters in Chinese language windows OS
let $LANG='en'
set langmenu=en
" Set Timeout config
set timeout
set ttimeout
set timeoutlen=500
set ttimeoutlen=50
" Turn on the wild menu
set wildmenu
" Ignore compiled files
set wildignore=*.o,*~,*.pyc
if has("win16") || has("win32")
set wildignore+=.git\*,.hg\*,.svn\*
else
set wildignore+=*/.git/*,*/.hg/*,*/.svn/*,*/.DS_Store
endif
set wildmode=full
"Always show current position
set ruler
" Height of the command bar
set cmdheight=1
" A buffer becomes hidden when it is abandoned
set hid
" Configure backspace so it acts as it should act
set backspace=eol,start,indent
set whichwrap+=<,>,h,l
" Ignore case when searching
set ignorecase
" When searching try to be smart about cases
set smartcase
" Option for smarter completions that will be case aware
set infercase
" Highlight search results
set hlsearch
" Makes search act like search in modern browsers
set incsearch
" Don't redraw while executing macros (good performance config)
set lazyredraw
" For regular expressions turn magic on
set magic
" Show matching brackets when text indicator is over them
set showmatch
" Don't show tab line if there is only one tab
set showtabline=1
" How tany tenths of a second to blink when matching brackets
set mat=2
" No annoying sound on errors
set noerrorbells
set novisualbell
set t_vb=
set tm=500
" Add a bit extra margin to the left
set foldcolumn=0
" Improve VIM scrolling
set ttyfast
" Relative Numbers
set relativenumber
" Smarter J and K navigation
nnoremap j v:count ? (v:count > 5 ? "m'" . v:count : '') . 'j' : 'gj'
nnoremap k v:count ? (v:count > 5 ? "m'" . v:count : '') . 'k' : 'gk'
" Splits open at the bottom and right, which is non-retarded, unlike vim defaults.
set splitbelow splitright
#+end_src
** Foldings
#+begin_src vimrc
if has('folding')
if has('windows')
let &fillchars='vert: ' " less cluttered vertical window separators
endif
set foldmethod=indent " not as cool as syntax, but faster
set foldlevelstart=99 " start unfolded
endif
#+end_src
** Colors and Fonts
#+begin_src vimrc
syntax enable
set background=dark
let base16colorspace=256
let g:gruvbox_contrast_dark = 'soft'
try
colorscheme gruvbox
catch
endtry
" set cursor shapes for insert and replace modes
set guicursor=n-v-c-sm:block,i-ci-ve:ver25,r-cr-o:hor20
" Set utf8 as standard encoding
set encoding=utf-8
set fileencoding=utf-8
" Use Unix as the standard file type
set ffs=unix,dos,mac
" Do not highlight the cursor line : http://vim.wikia.com/wiki/Highlight_current_line
set nocursorline
set nocursorcolumn
" Always show the status line
set laststatus=2
" Underline for bad spelled words
hi clear SpellBad
hi SpellBad cterm=underline
" Set style for gVim
hi SpellBad gui=undercurl
#+end_src
** Files, backups and undo
#+begin_src vimrc
" Turn backup off, since most stuff is in SVN, git et.c anyway...
set nobackup
set nowb
set noswapfile
#+end_src
** Text, tab and indent related
#+begin_src vimrc
" Use spaces instead of tabs
set expandtab
" Be smart when using tabs
set smarttab
" 1 tab == 4 spaces
set shiftwidth=4
set tabstop=4
" Enable Line Number
set number
#+end_src
From https://stackoverflow.com/questions/36950231/auto-wrap-lines-in-vim-without-inserting-newlines.
#+begin_src vimrc
" Word wrap without line breaks
set textwidth=0
set wrapmargin=0
set wrap
set linebreak
" set columns=160
#+end_src
#+begin_src vimrc
set autoindent " Auto Indentation
set nosmartindent " No Smart Indentation
#+end_src
** Moving around, tabs, windows and buffers
#+begin_src vimrc
" Specify the behavior when switching between buffers
try
set switchbuf=useopen,usetab
catch
endtry
" Return to last edit position when opening files (You want this!)
au BufReadPost * if line("'\"") > 1 && line("'\"") <= line("$") | exe "normal! g'\"" | endif
set splitbelow
set splitright
" This enables mouse in all modes
set mouse=a
" Automatically equalize splits when Vim is resized
autocmd VimResized * wincmd =
#+end_src
** Misc
#+begin_src vimrc
" Speed up cursor movments : http://superuser.com/a/625994/587300
set regexpengine=1 " https://github.com/xolox/vim-easytags/issues/88
" Set the maximum column for syntax highlighting
set synmaxcol=250
#+end_src
** Helper functions
#+begin_src vimrc
function! CmdLine(str)
exe "menu Foo.Bar :" . a:str
emenu Foo.Bar
unmenu Foo
endfunction
function! VisualSelection(direction, extra_filter) range
let l:saved_reg = @"
execute "normal! vgvy"
let l:pattern = escape(@", '\\/.*$^~[]')
let l:pattern = substitute(l:pattern, "\n$", "", "")
if a:direction == 'gv'
call CmdLine("Ag \"" . l:pattern . "\" " )
elseif a:direction == 'replace'
call CmdLine("%s" . '/'. l:pattern . '/')
endif
let @/ = l:pattern
let @" = l:saved_reg
endfunction
" Don't close window, when deleting a buffer
command! Bclose call BufcloseCloseIt()
function! BufcloseCloseIt()
let l:currentBufNum = bufnr("%")
let l:alternateBufNum = bufnr("#")
if buflisted(l:alternateBufNum)
buffer #
else
bnext
endif
if bufnr("%") == l:currentBufNum
new
endif
if buflisted(l:currentBufNum)
execute("bdelete! ".l:currentBufNum)
endif
endfunction
#+end_src
** GUI related
#+begin_src vimrc
set guifont=Hack\ Nerd\ Font\ Mono:h13
set gfn=Hack\ Nerd\ Font\ Mono:h13
" Disable scrollbars
set guioptions-=r
set guioptions-=R
set guioptions-=l
set guioptions-=L
#+end_src
** Turn persistent undo on
#+begin_src vimrc
try
set undodir=~/.vim_runtime/temp_dirs/undodir
set undofile
catch
endtry
#+end_src
* Mappings
** Normal mode related
#+begin_src vimrc
" Smart way to move between windows
noremap j
noremap k
noremap h
noremap l
#+end_src
** Insert mode related
#+begin_src vimrc
" Paste while in insert mode
inoremap *
" Go to the end of line
inoremap A
" Go to the beginning of line
inoremap I
#+end_src
** Visual mode related
#+begin_src vimrc
" Visual mode pressing / or ? searches for the current selection
vnoremap / :call VisualSelection('', '')/=@/
vnoremap ? :call VisualSelection('', '')?=@/
" Re-select visual block after indenting
vnoremap < >gv
" Move visual block
vnoremap J :m '>+1gv=gv
vnoremap K :m '<-2gv=gv
#+end_src
** Add some delimiters
#+begin_src vimrc
" use $ as a delimiter
xnoremap i$ :normal! T$vt$
xnoremap a$ :normal! T$hvt$l
onoremap i$ :normal vi$
onoremap a$ :normal va$
#+end_src
** Command mode related
#+begin_src vimrc
" Bash like keys for the command line
cnoremap
cnoremap
cnoremap
cnoremap
cnoremap
#+end_src
** Terminal mode related
#+begin_src vimrc
" tnoremap
tnoremap h h
tnoremap j j
tnoremap k k
tnoremap l l
#+end_src
** Correct misspelled works
Taken from: https://vi.stackexchange.com/questions/68/autocorrect-spelling-mistakes
#+begin_src vimrc
" Go back to last misspelled word and pick first suggestion.
inoremap u[s1z=`]au
" Select last misspelled word (typing will edit).
nnoremap [sve
inoremap [sve
snoremap b[sviw
#+end_src
* Filetypes
** Vim Which Key
#+begin_src vimrc
nnoremap :WhichKey ''
let g:which_key_map_local = {}
#+end_src
** Mails
#+begin_src vimrc
autocmd FileType mail set spell spelllang=en_us,fr
#+end_src
** MarkDown
#+begin_src vimrc
" Automatically turn on spell-checking for Markdown files
au BufRead,BufNewFile *.md setlocal spell spelllang=fr,en
#+end_src
** LaTeX
#+begin_src vimrc
au BufRead,BufNewFile *.tikz set filetype=tex
let tex_no_error=1 " used to not highlight underscores
au BufRead,BufNewFile *.tex set filetype=tex
au BufRead,BufNewFile *.tex let b:AutoPairs={'(':')', '[':']', '{':'}',"'":"'",'"':'"', '`':'`', '$':'$'}
au BufRead,BufNewFile *.tex set iskeyword+=-
" " clear the current list of matches that cause error-highlighting
" syn clear texOnlyMath
" " still mark '^' as an error outside of math mode
" syn match texOnlyMath /[\^]/
" autocmd FileType tex,tikz nnoremap lt (vimtex-toc-toggle)
" autocmd FileType tex,tikz nnoremap ll (vimtex-labels-open)
" autocmd FileType tex,tikz nnoremap lv (vimtex-view)
" autocmd FileType tex,tikz nnoremap lf (vimtex-reverse-search)
" " Make Tikz
" nnoremap mt :Make pdf t=tikz f=%:t:r
" nnoremap mto :make open t=tikz f=%:t:r
" " Make LaTeX
" nnoremap ml :Make pdf f=%:t:r
" nnoremap mlo :make open f=%:t:r
#+end_src
** Arduino
#+begin_src vimrc
au BufRead,BufNewFile *.pde set filetype=arduino
au BufRead,BufNewFile *.ino set filetype=arduino
" au FileType arduino map ac :!platformio run
" au FileType arduino map au :!platformio run -s --target=upload
" au FileType arduino map am :!platformio serialports monitor --port=/dev/cu
#+end_src
** Python
#+begin_src vimrc
let g:slime_python_ipython = 1
au FileType python setlocal expandtab
au FileType python setlocal tabstop=4
au FileType python setlocal shiftwidth=4
" Run Section
au FileType python nmap SlimeParagraphSend
" Run Selected text
au FileType python vmap SlimeRegionSend
" CD to directory of current file
au FileType python nmap c :SlimeSend0('cd '.expand('%:p:h'))
" let python_highlight_all = 1
" au FileType python syn keyword pythonDecorator True None False self
" au BufNewFile,BufRead *.jinja set syntax=htmljinja
" au BufNewFile,BufRead *.mako set ft=mako
" au FileType python map F :set foldmethod=indent
" au FileType python inoremap $r return
" au FileType python inoremap $i import
" au FileType python inoremap $p print
" au FileType python inoremap $f #--- a
" au FileType python map 1 /class
" au FileType python map 2 /def
" au FileType python map C ?class
" au FileType python map D ?def
#+end_src
** Matlab
#+begin_src vimrc
" Run Section (delimited by %%)
au FileType matlab nmap mm SlimeParagraphSend
let g:which_key_map_local.m = { 'name' : '+matlab' }
" Run either Selected text
au FileType matlab vmap mm SlimeRegionSend
let g:which_key_map_local.mm = 'run-code'
func! GetSelectedText()
normal gv"xy
let result = getreg("x")
normal gv
return result
endfunc
" Help on the current selection
au FileType matlab vmap mh :SlimeSend0('help '.expand(GetSelectedText()))
let g:which_key_map_local.mh = 'help'
" Documentation on the current selection
au FileType matlab vmap mH :SlimeSend0('doc '.expand(GetSelectedText()))
let g:which_key_map_local.mh = 'help'
" Open the current file in the Matlab Editor (usefull for debuging)
au FileType matlab nmap me :SlimeSend0('edit '.expand('%:p'))
let g:which_key_map_local.me = 'edit-gui'
" Run all the file
au FileType matlab nmap mr :SlimeSend0('run '.expand('%:t'))
let g:which_key_map_local.mr = 'run-file'
" Send "cd filepath" to matlab
au FileType matlab nmap mc :SlimeSend0('cd '.expand('%:p:h'))
let g:which_key_map_local.mr = 'cd-file'
" Open workspace
au FileType matlab nmap mw :SlimeSend0('workspace')
let g:which_key_map_local.mr = 'workspace'
#+end_src
** Save Which Key Configuration
#+begin_src vimrc
call which_key#register('', "g:which_key_map")
#+end_src
* Plugins Config
** junegunn/fzf
#+begin_src vimrc
" This is the default extra key bindings
let g:fzf_action = {
\ 'ctrl-t': 'tab split',
\ 'ctrl-h': 'split',
\ 'ctrl-v': 'vsplit' }
" [[B]Commits] Customize the options used by 'git log':
let g:fzf_commits_log_options = '--graph --color=always --format="%C(auto)%h%d %s %C(black)%C(bold)%cr"'
let g:fzf_colors =
\ { 'fg': ['fg', 'Normal'],
\ 'bg': ['bg', 'Normal'],
\ 'hl': ['fg', 'Comment'],
\ 'fg+': ['fg', 'CursorLine', 'CursorColumn', 'Normal'],
\ 'bg+': ['bg', 'CursorLine', 'CursorColumn'],
\ 'hl+': ['fg', 'Statement'],
\ 'info': ['fg', 'PreProc'],
\ 'prompt': ['fg', 'Conditional'],
\ 'pointer': ['fg', 'Exception'],
\ 'marker': ['fg', 'Keyword'],
\ 'spinner': ['fg', 'Label'],
\ 'header': ['fg', 'Comment'] }
function! s:fzf_statusline()
" Override statusline as you like
highlight fzf1 ctermfg=161 ctermbg=251
highlight fzf2 ctermfg=23 ctermbg=251
highlight fzf3 ctermfg=237 ctermbg=251
setlocal statusline=%#fzf1#\ >\ %#fzf2#fz%#fzf3#f
endfunction
autocmd! User FzfStatusLine call fzf_statusline()
#+end_src
** autozimu/LanguageClient-neovim
#+begin_src vimrc
let g:LanguageClient_serverCommands = {
\ 'matlab': ['java', ' -Djava.library.path=$MATLABROOT/bin/glnxa64 -cp $MATLABROOT/extern/engines/java/jar/engine.jar:$MATLABROOT/java/jar/jmi.jar:/home/thomas/github/matlab-langserver/build/libs/lsp-matlab-0.1.jar org.tokor.lspmatlab.Application'],
\ }
nnoremap :call LanguageClient_contextMenu()
" Or map each action separately
nnoremap K :call LanguageClient#textDocument_hover()
nnoremap gd :call LanguageClient#textDocument_definition()
nnoremap :call LanguageClient#textDocument_rename()
#+end_src
** JamshedVesuna/vim-markdown-preview
#+begin_src vimrc
let vim_markdown_preview_github=1
let vim_markdown_preview_browser='Google Chrome'
let vim_markdown_preview_temp_file=1
" let vim_markdown_preview_pandoc=1
#+end_src
** mhinz/vim-signify
#+begin_src vimrc
let g:signify_vcs_list = ['git']
let g:signify_disable_by_default = 1
#+end_src
** Deoplete
#+begin_src vimrc
let g:deoplete#enable_at_startup = 1
" let g:deoplete#omni#functions = {}
" set completeopt=longest,menuone,preview
" let g:deoplete#sources = {}
" let g:deoplete#enable_smart_case = 1
" call deoplete#custom#set('ultisnips', 'matchers', ['matcher_fuzzy'])
#+end_src
** SirVer/ultisnips
#+begin_src vimrc
let g:UltiSnipsSnippetsDir = '~/.vim/UltiSnip'
" inoremap pumvisible() ? "\" : "\"
let g:UltiSnipsExpandTrigger=""
" let g:UltiSnipsJumpForwardTrigger=""
" let g:UltiSnipsJumpBackwardTrigger=""
#+end_src
** honza/vim-snippets
#+begin_src vimrc
let g:snipMate = {}
let g:snipMate.scope_aliases = {}
#+end_src
** itchyny/lightline.vim
#+begin_src vimrc
function! LightlineObsession()
return '%{ObsessionStatus("")}'
endfunction
" \ 'colorscheme': 'gruvbox',
let g:lightline = {
\ 'colorscheme': 'solarized',
\ 'active': {
\ 'left': [ [ 'mode', 'paste' ],
\ [ 'filename', 'modified', 'fugitive', 'obsession' ] ]
\ },
\ 'component': {
\ 'fugitive': '%{exists("*fugitive#head")?fugitive#head():""}'
\ },
\ 'component_expand': {
\ 'obsession': 'LightlineObsession'
\ },
\ 'component_visible_condition': {
\ 'fugitive': '(exists("*fugitive#head") && ""!=fugitive#head())'
\ },
\ 'separator': { 'left': '', 'right': '' },
\ 'subseparator': { 'left': "|", 'right': "|" }
\ }
#+end_src
** Autopairs
#+begin_src vimrc
" Incompatibilité entre auto-pairs et clang-complete
let g:AutoPairsMapCR = 0
imap AutoPairsReturn
#+end_src
** Yggdroot/indentLine
#+begin_src vimrc
" :IndentLinesToggle toggles lines on and off.
let g:indentLine_color_term = 239
#+end_src
** ryanoasis/vim-devicons
#+begin_src vimrc
let g:webdevicons_enable_ctrlp = 1
#+end_src
** junegunn/goyo.vim
#+begin_src vimrc
let g:goyo_width=100
let g:goyo_margin_top = 2
let g:goyo_margin_bottom = 2
#+end_src
This is for soft line breaks
#+begin_src vimrc
function! s:goyo_enter()
let b:quitting = 0
let b:quitting_bang = 0
autocmd QuitPre let b:quitting = 1
cabbrev q! let b:quitting_bang = 1 q!
endfunction
#+end_src
Quit Vim if this is the only remaining buffer
#+begin_src vimrc
function! s:goyo_leave()
if b:quitting && len(filter(range(1, bufnr('$')), 'buflisted(v:val)')) == 1
if b:quitting_bang
qa!
else
qa
endif
endif
endfunction
#+end_src
#+begin_src vimrc
autocmd! User GoyoEnter call goyo_enter()
autocmd! User GoyoLeave call goyo_leave()
#+end_src
** tpope/vim-surround
#+begin_src vimrc
vmap Si S(i_f)
au FileType mako vmap Si S"i${ _(2f"a) }
" surroung un visual mode : use S, then b to make the text bold in markdown
let g:surround_{char2nr('b')} = "__\r__"
#+end_src
** Vim-Markdown
#+begin_src vimrc
let g:vim_markdown_folding_disabled = 1
let g:vim_markdown_conceal = 0
let g:vim_markdown_toc_autofit = 1
let g:vim_markdown_toml_frontmatter = 1
let g:tex_conceal = ""
#+end_src
** Neomake
#+begin_src vimrc
" Latex
autocmd! BufWritePost *.tex Neomake
let g:neomake_tex_chktex_maker = {
\ 'exe': 'chktex',
\ 'args': ['--inputfiles'],
\ 'errorformat':
\ '%EError %n in %f line %l: %m,' .
\ '%WWarning %n in %f line %l: %m,' .
\ '%WMessage %n in %f line %l: %m,' .
\ '%Z%p^,' .
\ '%-G%.%#'
\ }
let g:neomake_tex_enabled_makers = ['chktex']
" Matlab
autocmd! BufWritePost *.m Neomake
let g:neomake_matlab_mlint_maker = {
\ 'exe': 'mlint',
\ 'mapexpr': "neomake_bufname.':'.v:val",
\ 'errorformat':
\ '%f:L %l (C %c): %m,' .
\ '%f:L %l (C %c-%*[0-9]): %m,',
\ }
let g:neomake_matlab_enabled_makers = ['mlint']
#+end_src
** lervag/vimtex
#+begin_src vimrc
" let g:tex_conceal=""
" autocmd FileType tex let b:vimtex_main = 'main.tex'
" let g:vimtex_mappings_enabled=0
#+end_src
** jpalardy/vim-slime
#+begin_src vimrc
if exists('$TMUX')
let g:slime_target = "tmux"
let g:slime_default_config = {"socket_name": split($TMUX, ",")[0], "target_pane": ":.2"}
let g:slime_dont_ask_default = 1
endif
#+end_src
** mhinz/vim-grepper
#+begin_src vimrc
" nnoremap G :Grepper -tool ag
" nmap gs (GrepperOperator)
" xmap gs (GrepperOperator)
#+end_src
** Editor config
#+begin_src vimrc
" To ensure that this plugin works well with Tim Pope's fugitive, use the following patterns array:
let g:EditorConfig_exclude_patterns = ['fugitive://.*']
#+end_src
* Bindings
** Vim Which Key
#+begin_src vimrc
nnoremap :WhichKey ''
let g:which_key_map = {}
#+end_src
** Direct ones
#+begin_src vimrc
" Switch with last buffer
nnoremap :e #
" let g:which_key_map. = 'last-buffer'
#+end_src
** Quit
#+begin_src vimrc
let g:which_key_map.q = { 'name' : '+quit' }
" Quit
nnoremap qq :qa
let g:which_key_map.q.q = 'quit'
" Quit - Force
nnoremap qQ :qa!
let g:which_key_map.q.Q = 'quit-force'
" Quit - Save
nnoremap qw :wq
let g:which_key_map.q.w = 'quit-save'
" Quit - Save all
nnoremap qW :wqa
let g:which_key_map.q.W = 'quit-save-all'
#+end_src
** Files
#+begin_src vimrc
let g:which_key_map.f = { 'name' : '+files' }
" Fast saving
nnoremap fs :w!
let g:which_key_map.f.s = 'save-file'
" Fast saving all
nnoremap fS :wa!
let g:which_key_map.f.S = 'save-all'
" Find Files
noremap ff :Files
let g:which_key_map.f.f = 'find-file'
" Find File corresping to Word
nnoremap fw
\ :call fzf#vim#files('.', fzf#vim#with_preview({'options': ['--query', expand('')]}))
let g:which_key_map.f.w = 'find-file-word'
#+end_src
** Buffers
#+begin_src vimrc
let g:which_key_map.b = { 'name' : '+buffers' }
" Buffer Create
noremap bc :enew
let g:which_key_map.b.c = 'buffer-create'
" Buffer Delete
noremap bd :Bclose
let g:which_key_map.b.d = 'buffer-delete'
" Buffer Delete all others
noremap bD :bufdo bd
let g:which_key_map.b.D = 'buffer-delete-others'
" Buffer Next
noremap bn :bnext
let g:which_key_map.b.n = 'buffer-next'
" Buffer Previous
noremap bp :bprevious
let g:which_key_map.b.p = 'buffer-previous'
" Find Buffers
noremap bf :Buffers
let g:which_key_map.b.f = 'buffer-find'
" Buffer Home (startify)
noremap bh :Startify
let g:which_key_map.b.h = 'buffer-home'
" CD to buffer path
noremap bw :cd %:p:h:pwd
let g:which_key_map.b.w = 'buffer-pwd'
#+end_src
** Tabs
#+begin_src vimrc
let g:which_key_map.t = { 'name' : '+tabs' }
" Let 'tt' toggle between this and the last accessed tab
let g:lasttab = 1
au TabLeave * let g:lasttab = tabpagenr()
" Tab New
nnoremap tc :tabnew
let g:which_key_map.t.c = 'tab-create'
" Tab Delete
nnoremap td :tabclose
let g:which_key_map.t.d = 'tab-delete'
" Tab Maximize
nnoremap tD :tabonly
let g:which_key_map.t.D = 'tab-delete-others'
" Tab Left
nnoremap th gt
let g:which_key_map.t.h = 'tab-left'
" Tab Right
nnoremap tl gT
let g:which_key_map.t.l = 'tab-right'
" Tab Move Left
nnoremap tH :tabmove -1
let g:which_key_map.t.H = 'tab-move-left'
" Tab Move Right
nnoremap tL :tabmove +1
let g:which_key_map.t.L = 'tab-move-right'
" Tab Toggle
nnoremap tt :exe "tabn ".g:lasttab
let g:which_key_map.t.t = 'tab-toggle'
#+end_src
** Terminals
#+begin_src vimrc
let g:which_key_map.T = { 'name' : '+terminals' }
" Quickly create a new terminal in a new tab
nnoremap