#+TITLE: Vim Config #+SETUPFILE: ./setup/org-setup-file.org #+PROPERTY: header-args :comments none #+PROPERTY: header-args+ :mkdirp yes #+PROPERTY: header-args+ :tangle ~/.vimrc * Plugins Install ** Plug start #+BEGIN_SRC vimrc call plug#begin('~/.vim/plugged') #+end_src ** Manage Files File Manager: #+begin_src vimrc Plug 'tpope/vim-vinegar' #+end_src Fuzzy Find: #+begin_src vimrc Plug 'nvim-lua/plenary.nvim' Plug 'nvim-telescope/telescope.nvim' Plug 'nvim-telescope/telescope-fzf-native.nvim', { 'do': 'make' } #+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 'mhinz/vim-signify' " Show a diff using Vim its sign column Plug 'TimUntersberger/neogit' #+end_src ** Motions, Search #+begin_src vimrc Plug 'justinmk/vim-sneak' " The missing motion for Vim Plug 'haya14busa/is.vim' " Automatically clear highlight after search #+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 #+end_src The following two packages are used to search and modify multiple files at once #+begin_src vimrc " 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-speeddating' " use CTRL-A/CTRL-X to increment dates, times, and more #+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 #+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]]. ** TODO Language Server Protocol #+begin_src vimrc " LSP Support Plug 'neovim/nvim-lspconfig' Plug 'williamboman/nvim-lsp-installer' " Autocompletion Plug 'hrsh7th/nvim-cmp' Plug 'hrsh7th/cmp-buffer' Plug 'hrsh7th/cmp-path' Plug 'saadparwaiz1/cmp_luasnip' Plug 'hrsh7th/cmp-nvim-lsp' Plug 'hrsh7th/cmp-nvim-lua' " Snippets Plug 'L3MON4D3/LuaSnip' Plug 'rafamadriz/friendly-snippets' Plug 'VonHeikemen/lsp-zero.nvim' #+end_src #+begin_src vimrc Plug 'nvim-treesitter/nvim-treesitter', {'do': ':TSUpdate'} #+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 ** 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 ** 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 ** 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 ** Mails #+begin_src vimrc autocmd FileType mail set spell spelllang=en_us,fr autocmd FileType mail set textwidth=0 function! Mailcomplete(findstart, base) if a:findstart == 1 let line = getline('.') let idx = col('.') while idx > 0 let idx -= 1 let c = line[idx] if c == ':' || c == '>' return idx + 2 else continue endif endwhile return idx else return split(system('~/.local/scripts/find-config.sh ' . a:base), '\n') endif endfunction setl omnifunc=Mailcomplete #+end_src #+begin_src bash :shebang "#!/usr/bin/env bash" :tangle-mode (identity #o555) :tangle ~/.local/scripts/find-config.sh search="$@" contacts=`mu cfind "$search"` emails=`echo "$contacts" | awk -F' ' '{print "<" $NF ">"}'` names=`echo "$contacts" | awk -F' ' '{$NF=""; print $0}'` paste -d "" <(printf %s "$names") <(printf %s "$emails") #+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')) #+end_src ** Matlab #+begin_src vimrc " Run Section (delimited by %%) au FileType matlab nmap mm SlimeParagraphSend " Run either Selected text au FileType matlab vmap mm SlimeRegionSend #+end_src #+begin_src vimrc 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())) " Documentation on the current selection au FileType matlab vmap mH :SlimeSend0('doc '.expand(GetSelectedText())) " Open the current file in the Matlab Editor (usefull for debuging) au FileType matlab nmap me :SlimeSend0('edit '.expand('%:p')) " Run all the file au FileType matlab nmap mr :SlimeSend0('run '.expand('%:t')) " Send "cd filepath" to matlab au FileType matlab nmap mc :SlimeSend0('cd '.expand('%:p:h')) " Open workspace au FileType matlab nmap mw :SlimeSend0('workspace') #+end_src * Plugins Config ** Treesitter #+begin_src vimrc lua <\ %#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 " \ 'colorscheme': 'gruvbox', let g:lightline = { \ 'colorscheme': 'solarized', \ 'active': { \ 'left': [ [ 'mode', 'paste' ], \ [ 'filename', 'modified', 'fugitive' ] ] \ }, \ 'component': { \ 'fugitive': '%{exists("*fugitive#head")?fugitive#head():""}' \ }, \ 'component_visible_condition': { \ 'fugitive': '(exists("*fugitive#head") && ""!=fugitive#head())' \ }, \ 'separator': { 'left': '', 'right': '' }, \ 'subseparator': { 'left': "|", 'right': "|" } \ } #+end_src ** Git #+begin_src vimrc lua < 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 ** =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 ** =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 ** Telescope #+begin_src vimrc lua <qq :qa " Quit - Force nnoremap qQ :qa! #+end_src ** Files #+begin_src vimrc " Fast saving nnoremap fs :w! " Find Files nnoremap ff Telescope find_files nnoremap Telescope find_files #+end_src ** Buffers #+begin_src vimrc " Buffer Create noremap bc :enew " Buffer Delete noremap bd :Bclose " Buffer Next noremap bn :bnext " Buffer Previous noremap bp :bprevious " Find Buffers nnoremap bb Telescope buffers #+end_src ** Tabs #+begin_src vimrc " 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 " Tab Delete nnoremap td :tabclose " Tab Move Left nnoremap tH :tabmove -1 " Tab Move Right nnoremap tL :tabmove +1 " Tab Toggle nnoremap tt :exe "tabn ".g:lasttab #+end_src ** Terminals #+begin_src vimrc " Quickly create a new terminal in a new tab nnoremap Tc :tab new:term " Quickly create a new terminal in a vertical split nnoremap Tv :vsplit:term " Quickly create a new terminal in a horizontal split nnoremap Th :split:term #+end_src ** Splits / Windows #+begin_src vimrc " Split Horizontal nnoremap ws :split " Split Vertical nnoremap wv :vsplit " Split Maximize nnoremap wm o " Split Delete nnoremap wd q " Split Go Left nnoremap wh :wincmd h " Split Go Down nnoremap wj :wincmd j " Split Go Up nnoremap wk :wincmd k " Split Go Right nnoremap wl :wincmd l " Split Move Left nnoremap wH H " Split Move Down nnoremap wJ J " Split Move Up nnoremap wK K " Split Move Right nnoremap wL L #+end_src ** TODO Check Spell #+begin_src vimrc " CheckSpell Toggle noremap St :setlocal spell! " CheckSpell Correct noremap Sc z= " CheckSpell Do first noremap SC 1z= " CheckSpell Language noremap Sl :set spelllang= " CheckSpell Next noremap Sn ]s " CheckSpell Next and correct noremap SN ]s1z= " CheckSpell Previous noremap Sp [s " CheckSpell Previous and correct noremap SP [s1z= " CheckSpell Add to dictionnary noremap Sa zg #+end_src ** TODO Make #+begin_src vimrc " Make Make nnoremap mm :Make -B " Make Clean nnoremap mc :Make clean " Make Force nnoremap mf :Make! -B " Make Run nnoremap mr :Make! run " Make Open nnoremap mo :make! open #+end_src ** Search #+begin_src vimrc nnoremap s Telescope live_grep #+end_src ** GIT #+begin_src vimrc nnoremap g :Neogit #+end_src ** TODO Errors #+begin_src vimrc function! s:GetBufferList() redir =>buflist silent! ls redir END return buflist endfunction function! ToggleLocationList() let curbufnr = winbufnr(0) for bufnum in map(filter(split(s:GetBufferList(), '\n'), 'v:val =~ "Location List"'), 'str2nr(matchstr(v:val, "\\d\\+"))') if curbufnr == bufnum lclose return endif endfor let winnr = winnr() let prevwinnr = winnr("#") let nextbufnr = winbufnr(winnr + 1) try lopen catch /E776/ echohl ErrorMsg echo "Location List is Empty." echohl None return endtry if winbufnr(0) == nextbufnr lclose if prevwinnr > winnr let prevwinnr-=1 endif else if prevwinnr > winnr let prevwinnr+=1 endif endif " restore previous window exec prevwinnr."wincmd w" exec winnr."wincmd w" endfunction " Error Toggle nnoremap ee :call ToggleLocationList() " Error Open nnoremap eo :lopen " Error Close nnoremap ec :lclose " Error Next nnoremap en :lnext " Error Previous nnoremap ep :lprevious #+end_src ** Text #+begin_src vimrc " Start interactive EasyAlign in visual mode (e.g. vipga) and for a motion xmap xa (EasyAlign) nmap xa (EasyAlign) " Indent all file nnoremap x= mzgg=G`z " Custom Multiple Cursor " http://www.kevinli.co/posts/2017-01-19-multiple-cursors-in-500-bytes-of-vimscript/ let g:mc = "y/\\V\=escape(@\", '/')\\" " Multiple Cursor nnoremap xm *``cgn vnoremap xm g:mc . "``cgn" " Multiple Cursor - reserve direction nnoremap xM *``cgN vnoremap xM g:mc . "``cgN" " Delete trainling Whitespaces fun! TrimWhitespace() let l:save = winsaveview() keeppatterns %s/\s\+$//e call winrestview(l:save) endfun nnoremap xt :call TrimWhitespace() #+end_src ** Config #+begin_src vimrc let s:activatedsh = 0 function! ToggleSyntaxH() if s:activatedsh == 0 let s:activatedsh = 1 set synmaxcol=800 else let s:activatedsh = 0 set synmaxcol=100 endif endfunction " Toggle Syntax column nnoremap cs :call ToggleSyntaxH() let s:activatedh = 0 function! ToggleH() if s:activatedh == 0 let s:activatedh = 1 match Search '\%>80v.\+' else let s:activatedh = 0 match none endif endfunction " Toggle Highlight nnoremap ch :call ToggleH() " Reload vim config noremap cr :source $MYVIMRC " Edit vim config noremap ce :e $MYVIMRC " Disable highlight noremap c :noh " Theme noremap ct :noh #+end_src