1390 lines
35 KiB
Org Mode
1390 lines
35 KiB
Org Mode
|
#+TITLE: Vim Config
|
||
|
#+PROPERTY: header-args+ :comments both
|
||
|
#+PROPERTY: header-args+ :mkdirp yes
|
||
|
#+PROPERTY: header-args+ :tangle ~/.vimrc
|
||
|
|
||
|
* Plugins Install
|
||
|
** Plug start
|
||
|
#+BEGIN_SRC conf
|
||
|
call plug#begin('~/.vim/plugged')
|
||
|
#+END_SRC
|
||
|
|
||
|
** Manage Files
|
||
|
#+BEGIN_SRC conf
|
||
|
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 conf
|
||
|
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 conf
|
||
|
" 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 conf
|
||
|
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 conf
|
||
|
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', '<plug>(GrepperOperator)'] } "
|
||
|
#+END_SRC
|
||
|
|
||
|
** Utils
|
||
|
#+BEGIN_SRC conf
|
||
|
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 conf
|
||
|
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
|
||
|
Plug 'ntpeters/vim-better-whitespace' " Better whitespace highlighting for Vim
|
||
|
#+END_SRC
|
||
|
|
||
|
** Themes
|
||
|
#+BEGIN_SRC conf
|
||
|
Plug 'chriskempson/base16-vim' " Base16 for Vim
|
||
|
Plug 'morhetz/gruvbox' " Retro groove color scheme for Vim
|
||
|
Plug 'jacoborus/tender.vim' " A 24bit colorscheme for Vim, Airline and Lightline
|
||
|
#+END_SRC
|
||
|
|
||
|
** Snippnets and autocompletion
|
||
|
#+BEGIN_SRC conf
|
||
|
Plug 'SirVer/ultisnips' " The ultimate snippet solution for Vim
|
||
|
" TODO Alternative https://github.com/Shougo/neosnippet.vim
|
||
|
Plug 'honza/vim-snippets' " Vim-snipmate default snippets
|
||
|
#+END_SRC
|
||
|
|
||
|
** Syntax Checking and Build Utils
|
||
|
#+BEGIN_SRC conf
|
||
|
Plug 'neomake/neomake' " Asynchronous linting and make framework for Neovim/Vim
|
||
|
#+END_SRC
|
||
|
|
||
|
** Auto Completion
|
||
|
#+BEGIN_SRC conf
|
||
|
Plug 'Shougo/deoplete.nvim', { 'do': ':UpdateRemotePlugins' } " Dark powered asynchronous completion framework for neovim
|
||
|
#+END_SRC
|
||
|
|
||
|
** Tmux
|
||
|
#+BEGIN_SRC conf
|
||
|
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 conf
|
||
|
Plug 'sheerun/vim-polyglot' " A solid language pack for Vim
|
||
|
#+END_SRC
|
||
|
|
||
|
** Markdown
|
||
|
#+BEGIN_SRC conf
|
||
|
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 conf
|
||
|
Plug 'lervag/vimtex', { 'for': 'tex' } " A modern vim plugin for editing LaTeX files.
|
||
|
#+END_SRC
|
||
|
|
||
|
** Matlab
|
||
|
#+BEGIN_SRC conf
|
||
|
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 conf
|
||
|
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
|
||
|
|
||
|
** Others / To test
|
||
|
#+BEGIN_SRC conf
|
||
|
Plug 'petRUShka/vim-sage' " Support for Sage computation language
|
||
|
" Plug 'francoiscabrol/ranger.vim' " Ranger integration in vim and neovim
|
||
|
" Plug 'brooth/far.vim' " Find And Replace Vim plugin
|
||
|
" Plug 'justinmk/vim-gtfo' " Go to Terminal or File manager
|
||
|
" Plug 'sjl/gundo.vim', { 'on': 'GundoToggle' } " Vim plugin to visualize your Vim undo tree
|
||
|
" Plug 'drzel/vim-line-no-indicator' " Simple and expressive line number indicator
|
||
|
#+END_SRC
|
||
|
|
||
|
** Plug End
|
||
|
#+BEGIN_SRC conf
|
||
|
call plug#end()
|
||
|
#+END_SRC
|
||
|
|
||
|
* Basic
|
||
|
** General
|
||
|
#+BEGIN_SRC conf
|
||
|
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 = "\<Space>"
|
||
|
let g:mapleader = "\<Space>"
|
||
|
let maplocalleader = ","
|
||
|
#+END_SRC
|
||
|
|
||
|
** VIM user interface
|
||
|
#+BEGIN_SRC conf
|
||
|
" 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 <expr> j v:count ? (v:count > 5 ? "m'" . v:count : '') . 'j' : 'gj'
|
||
|
nnoremap <expr> k v:count ? (v:count > 5 ? "m'" . v:count : '') . 'k' : 'gk'
|
||
|
#+END_SRC
|
||
|
|
||
|
** Foldings
|
||
|
#+BEGIN_SRC conf
|
||
|
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 conf
|
||
|
" Theme
|
||
|
syntax enable
|
||
|
|
||
|
set background=dark
|
||
|
|
||
|
let base16colorspace=256
|
||
|
|
||
|
try
|
||
|
" colorscheme tender
|
||
|
colorscheme base16-default-dark
|
||
|
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
|
||
|
#+END_SRC
|
||
|
|
||
|
** Files, backups and undo
|
||
|
#+BEGIN_SRC conf
|
||
|
" 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 conf
|
||
|
" Use spaces instead of tabs
|
||
|
set expandtab
|
||
|
|
||
|
" Be smart when using tabs
|
||
|
set smarttab
|
||
|
|
||
|
" 1 tab == 4 spaces
|
||
|
set shiftwidth=4
|
||
|
set tabstop=4
|
||
|
|
||
|
" Word wrap without line breaks
|
||
|
set wrap
|
||
|
set linebreak
|
||
|
set nolist " list disables linebreak
|
||
|
|
||
|
set autoindent " Auto Indentation
|
||
|
set nosmartindent " No Smart Indentation
|
||
|
#+END_SRC
|
||
|
|
||
|
** Moving around, tabs, windows and buffers
|
||
|
#+BEGIN_SRC conf
|
||
|
" 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 conf
|
||
|
" Enable Line Number
|
||
|
set number
|
||
|
|
||
|
" 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 conf
|
||
|
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 <SID>BufcloseCloseIt()
|
||
|
function! <SID>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 conf
|
||
|
set guifont=SauceCodePro\ Nerd\ Font:h13
|
||
|
set gfn=SauceCodePro\ Nerd\ Font,Hack\ 14,Bitstream\ Vera\ Sans\ Mono\ 11
|
||
|
|
||
|
" Disable scrollbars
|
||
|
set guioptions-=r
|
||
|
set guioptions-=R
|
||
|
set guioptions-=l
|
||
|
set guioptions-=L
|
||
|
#+END_SRC
|
||
|
|
||
|
** Turn persistent undo on
|
||
|
#+BEGIN_SRC conf
|
||
|
try
|
||
|
set undodir=~/.vim_runtime/temp_dirs/undodir
|
||
|
set undofile
|
||
|
catch
|
||
|
endtry
|
||
|
#+END_SRC
|
||
|
|
||
|
* Mappings
|
||
|
** Normal mode related
|
||
|
#+BEGIN_SRC conf
|
||
|
" Smart way to move between windows
|
||
|
noremap <C-j> <C-W>j
|
||
|
noremap <C-k> <C-W>k
|
||
|
noremap <C-h> <C-W>h
|
||
|
noremap <C-l> <C-W>l
|
||
|
#+END_SRC
|
||
|
|
||
|
** Insert mode related
|
||
|
#+BEGIN_SRC conf
|
||
|
" Paste while in insert mode
|
||
|
inoremap <C-v> <C-r>*
|
||
|
|
||
|
" Go to the end of line
|
||
|
inoremap <C-e> <Esc>A
|
||
|
|
||
|
" Go to the beginning of line
|
||
|
inoremap <C-a> <Esc>I
|
||
|
#+END_SRC
|
||
|
|
||
|
** Visual mode related
|
||
|
#+BEGIN_SRC conf
|
||
|
" Visual mode pressing / or ? searches for the current selection
|
||
|
vnoremap <silent> / :<C-u>call VisualSelection('', '')<CR>/<C-R>=@/<CR><CR>
|
||
|
vnoremap <silent> ? :<C-u>call VisualSelection('', '')<CR>?<C-R>=@/<CR><CR>
|
||
|
|
||
|
" Re-select visual block after indenting
|
||
|
vnoremap < <gv
|
||
|
vnoremap > >gv
|
||
|
|
||
|
" Move visual block
|
||
|
vnoremap J :m '>+1<CR>gv=gv
|
||
|
vnoremap K :m '<-2<CR>gv=gv
|
||
|
#+END_SRC
|
||
|
|
||
|
** Add some delimiters
|
||
|
#+BEGIN_SRC conf
|
||
|
" use $ as a delimiter
|
||
|
xnoremap i$ :<C-u>normal! T$vt$<CR>
|
||
|
xnoremap a$ :<C-u>normal! T$hvt$l<CR>
|
||
|
onoremap i$ :normal vi$<CR>
|
||
|
onoremap a$ :normal va$<CR>
|
||
|
#+END_SRC
|
||
|
|
||
|
** Command mode related
|
||
|
#+BEGIN_SRC conf
|
||
|
" Bash like keys for the command line
|
||
|
cnoremap <C-A> <Home>
|
||
|
cnoremap <C-E> <End>
|
||
|
cnoremap <C-K> <C-U>
|
||
|
|
||
|
cnoremap <C-P> <Up>
|
||
|
cnoremap <C-N> <Down>
|
||
|
#+END_SRC
|
||
|
|
||
|
** Terminal mode related
|
||
|
#+BEGIN_SRC conf
|
||
|
" tnoremap <Esc> <C-\><C-n>
|
||
|
|
||
|
tnoremap <C-w>h <C-\><C-n><C-w>h
|
||
|
tnoremap <C-w>j <C-\><C-n><C-w>j
|
||
|
tnoremap <C-w>k <C-\><C-n><C-w>k
|
||
|
tnoremap <C-w>l <C-\><C-n><C-w>l
|
||
|
#+END_SRC
|
||
|
|
||
|
* Filetypes
|
||
|
** Vim Which Key
|
||
|
#+BEGIN_SRC conf
|
||
|
nnoremap <silent> <localleader> :<c-u>WhichKey ','<CR>
|
||
|
|
||
|
let g:which_key_map_local = {}
|
||
|
#+END_SRC
|
||
|
|
||
|
** MarkDown
|
||
|
#+BEGIN_SRC conf
|
||
|
" Automatically turn on spell-checking for Markdown files
|
||
|
au BufRead,BufNewFile *.md setlocal spell spelllang=fr,en
|
||
|
#+END_SRC
|
||
|
|
||
|
** LaTeX
|
||
|
#+BEGIN_SRC conf
|
||
|
" TODO : améliorer ça
|
||
|
au BufRead,BufNewFile *.tikz set filetype=tex
|
||
|
let tex_no_error=1 " TODO: 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 <leader>lt <plug>(vimtex-toc-toggle)
|
||
|
" autocmd FileType tex,tikz nnoremap <leader>ll <plug>(vimtex-labels-open)
|
||
|
" autocmd FileType tex,tikz nnoremap <leader>lv <plug>(vimtex-view)
|
||
|
" autocmd FileType tex,tikz nnoremap <leader>lf <plug>(vimtex-reverse-search)
|
||
|
|
||
|
" " Make Tikz
|
||
|
" nnoremap <leader>mt :Make pdf t=tikz f=%:t:r<cr>
|
||
|
" nnoremap <leader>mto :make open t=tikz f=%:t:r<cr>
|
||
|
|
||
|
" " Make LaTeX
|
||
|
" nnoremap <leader>ml :Make pdf f=%:t:r<cr>
|
||
|
" nnoremap <leader>mlo :make open f=%:t:r<cr>
|
||
|
#+END_SRC
|
||
|
|
||
|
** Arduino
|
||
|
#+BEGIN_SRC conf
|
||
|
au BufRead,BufNewFile *.pde set filetype=arduino
|
||
|
au BufRead,BufNewFile *.ino set filetype=arduino
|
||
|
" au FileType arduino map <leader>ac :!platformio run<CR>
|
||
|
" au FileType arduino map <leader>au :!platformio run -s --target=upload<CR>
|
||
|
" au FileType arduino map <leader>am :!platformio serialports monitor --port=/dev/cu
|
||
|
#+END_SRC
|
||
|
|
||
|
** Python
|
||
|
#+BEGIN_SRC conf
|
||
|
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 <buffer> <localleader><localleader> <Plug>SlimeParagraphSend
|
||
|
|
||
|
" Run Selected text
|
||
|
au FileType python vmap <buffer> <localleader><localleader> <Plug>SlimeRegionSend
|
||
|
|
||
|
" CD to directory of current file
|
||
|
" TODO - Should enter the command. This just output the command without runing
|
||
|
" it...
|
||
|
au FileType python nmap <buffer> <localleader>c :SlimeSend0('cd '.expand('%:p:h'))<CR>
|
||
|
|
||
|
" 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 <buffer> F :set foldmethod=indent<cr>
|
||
|
|
||
|
" au FileType python inoremap <buffer> $r return
|
||
|
" au FileType python inoremap <buffer> $i import
|
||
|
" au FileType python inoremap <buffer> $p print
|
||
|
" au FileType python inoremap <buffer> $f #--- <esc>a
|
||
|
" au FileType python map <buffer> <leader>1 /class
|
||
|
" au FileType python map <buffer> <leader>2 /def
|
||
|
" au FileType python map <buffer> <leader>C ?class
|
||
|
" au FileType python map <buffer> <leader>D ?def
|
||
|
#+END_SRC
|
||
|
|
||
|
** Matlab
|
||
|
#+BEGIN_SRC conf
|
||
|
" TODO Run Section (delimited by %%)
|
||
|
au FileType matlab nmap <buffer> <localleader>mm <Plug>SlimeParagraphSend
|
||
|
let g:which_key_map_local.m = { 'name' : '+matlab' }
|
||
|
|
||
|
" Run either Selected text
|
||
|
au FileType matlab vmap <buffer> <localleader>mm <Plug>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 <buffer> <localleader>mh :<C-U>SlimeSend0('help '.expand(GetSelectedText()))<CR>
|
||
|
let g:which_key_map_local.mh = 'help'
|
||
|
|
||
|
" Documentation on the current selection
|
||
|
au FileType matlab vmap <buffer> <localleader>mH :<C-U>SlimeSend0('doc '.expand(GetSelectedText()))<CR>
|
||
|
let g:which_key_map_local.mh = 'help'
|
||
|
|
||
|
" Open the current file in the Matlab Editor (usefull for debuging)
|
||
|
au FileType matlab nmap <buffer> <localleader>me :SlimeSend0('edit '.expand('%:p'))<CR>
|
||
|
let g:which_key_map_local.me = 'edit-gui'
|
||
|
|
||
|
" Run all the file
|
||
|
au FileType matlab nmap <buffer> <localleader>mr :SlimeSend0('run '.expand('%:t'))<CR>
|
||
|
let g:which_key_map_local.mr = 'run-file'
|
||
|
|
||
|
" Send "cd filepath" to matlab
|
||
|
au FileType matlab nmap <buffer> <localleader>mc :SlimeSend0('cd '.expand('%:p:h'))<CR>
|
||
|
let g:which_key_map_local.mr = 'cd-file'
|
||
|
|
||
|
" Open workspace
|
||
|
au FileType matlab nmap <buffer> <localleader>mw :SlimeSend0('workspace')<CR>
|
||
|
let g:which_key_map_local.mr = 'workspace'
|
||
|
#+END_SRC
|
||
|
|
||
|
** Sage
|
||
|
#+BEGIN_SRC conf
|
||
|
" TODO Run Section
|
||
|
au FileType sage.python nmap <buffer> <localleader><localleader> <Plug>SlimeParagraphSend
|
||
|
|
||
|
" Run Selected text
|
||
|
au FileType sage.python vmap <buffer> <localleader><localleader> <Plug>SlimeRegionSend
|
||
|
#+END_SRC
|
||
|
|
||
|
** Save Which Key Configuration
|
||
|
#+BEGIN_SRC conf
|
||
|
call which_key#register(',', "g:which_key_map_local")
|
||
|
#+END_SRC
|
||
|
|
||
|
* Plugins Config
|
||
|
** junegunn/fzf
|
||
|
#+BEGIN_SRC conf
|
||
|
" 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 <SID>fzf_statusline()
|
||
|
#+END_SRC
|
||
|
|
||
|
** JamshedVesuna/vim-markdown-preview
|
||
|
#+BEGIN_SRC conf
|
||
|
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 conf
|
||
|
let g:signify_vcs_list = ['git']
|
||
|
|
||
|
let g:signify_disable_by_default = 1
|
||
|
#+END_SRC
|
||
|
|
||
|
** Deoplete
|
||
|
#+BEGIN_SRC conf
|
||
|
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 conf
|
||
|
let g:UltiSnipsSnippetsDir = '~/.vim/UltiSnip'
|
||
|
|
||
|
" inoremap <silent><expr><TAB> pumvisible() ? "\<C-n>" : "\<TAB>"
|
||
|
let g:UltiSnipsExpandTrigger="<C-j>"
|
||
|
" let g:UltiSnipsJumpForwardTrigger="<tab>"
|
||
|
" let g:UltiSnipsJumpBackwardTrigger="<s-tab>"
|
||
|
#+END_SRC
|
||
|
|
||
|
** honza/vim-snippets
|
||
|
#+BEGIN_SRC conf
|
||
|
let g:snipMate = {}
|
||
|
let g:snipMate.scope_aliases = {}
|
||
|
#+END_SRC
|
||
|
|
||
|
** itchyny/lightline.vim
|
||
|
#+BEGIN_SRC conf
|
||
|
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 conf
|
||
|
" Incompatibilité entre auto-pairs et clang-complete
|
||
|
let g:AutoPairsMapCR = 0
|
||
|
imap <silent><CR> <CR><Plug>AutoPairsReturn
|
||
|
#+END_SRC
|
||
|
|
||
|
** Yggdroot/indentLine
|
||
|
#+BEGIN_SRC conf
|
||
|
" :IndentLinesToggle toggles lines on and off.
|
||
|
let g:indentLine_color_term = 239
|
||
|
#+END_SRC
|
||
|
|
||
|
** ryanoasis/vim-devicons
|
||
|
#+BEGIN_SRC conf
|
||
|
let g:webdevicons_enable_ctrlp = 1
|
||
|
#+END_SRC
|
||
|
|
||
|
** junegunn/goyo.vim
|
||
|
#+BEGIN_SRC conf
|
||
|
let g:goyo_width=100
|
||
|
let g:goyo_margin_top = 2
|
||
|
let g:goyo_margin_bottom = 2
|
||
|
#+END_SRC
|
||
|
|
||
|
** tpope/vim-surround
|
||
|
#+BEGIN_SRC conf
|
||
|
vmap Si S(i_<esc>f)
|
||
|
au FileType mako vmap Si S"i${ _(<esc>2f"a) }<esc>
|
||
|
" 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 conf
|
||
|
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 conf
|
||
|
" 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 conf
|
||
|
" 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 conf
|
||
|
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 conf
|
||
|
" nnoremap <leader>G :Grepper -tool ag<cr>
|
||
|
" nmap gs <plug>(GrepperOperator)
|
||
|
" xmap gs <plug>(GrepperOperator)
|
||
|
#+END_SRC
|
||
|
|
||
|
** Editor config
|
||
|
#+BEGIN_SRC conf
|
||
|
" 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
|
||
|
|
||
|
** Polyglot
|
||
|
#+BEGIN_SRC conf
|
||
|
let g:polyglot_disabled = ['latex']
|
||
|
#+END_SRC
|
||
|
|
||
|
* Bindings
|
||
|
** Vim Which Key
|
||
|
#+BEGIN_SRC conf
|
||
|
nnoremap <silent> <leader> :WhichKey '<Space>'<cr>
|
||
|
|
||
|
let g:which_key_map = {}
|
||
|
#+END_SRC
|
||
|
|
||
|
** Direct ones
|
||
|
#+BEGIN_SRC conf
|
||
|
" Switch with last buffer
|
||
|
nnoremap <leader><Tab> :e #<cr>
|
||
|
" let g:which_key_map.<Tab> = 'last-buffer'
|
||
|
#+END_SRC
|
||
|
|
||
|
** Quit
|
||
|
#+BEGIN_SRC conf
|
||
|
let g:which_key_map.q = { 'name' : '+quit' }
|
||
|
|
||
|
" Quit
|
||
|
nnoremap <leader>qq :qa<cr>
|
||
|
let g:which_key_map.q.q = 'quit'
|
||
|
|
||
|
" Quit - Force
|
||
|
nnoremap <leader>qQ :qa!<cr>
|
||
|
let g:which_key_map.q.Q = 'quit-force'
|
||
|
|
||
|
" Quit - Save
|
||
|
nnoremap <leader>qw :wq<cr>
|
||
|
let g:which_key_map.q.w = 'quit-save'
|
||
|
|
||
|
" Quit - Save all
|
||
|
nnoremap <leader>qW :wqa<cr>
|
||
|
let g:which_key_map.q.W = 'quit-save-all'
|
||
|
#+END_SRC
|
||
|
|
||
|
** Files
|
||
|
#+BEGIN_SRC conf
|
||
|
let g:which_key_map.f = { 'name' : '+files' }
|
||
|
|
||
|
" Fast saving
|
||
|
nnoremap <leader>fs :w!<cr>
|
||
|
let g:which_key_map.f.s = 'save-file'
|
||
|
|
||
|
" Fast saving all
|
||
|
nnoremap <leader>fS :wa!<cr>
|
||
|
let g:which_key_map.f.S = 'save-all'
|
||
|
|
||
|
" Find Files
|
||
|
noremap <leader>ff :Files<CR>
|
||
|
let g:which_key_map.f.f = 'find-file'
|
||
|
|
||
|
" Find File corresping to Word
|
||
|
nnoremap <leader>fw
|
||
|
\ :call fzf#vim#files('.', fzf#vim#with_preview({'options': ['--query', expand('<cword>')]}))<cr>
|
||
|
" TODO - Add visual keymap
|
||
|
" vnoremap <leader>fw
|
||
|
" \ :call fzf#vim#files('.', fzf#vim#with_preview({'options': ['--query', <C-r>0]}))<cr>
|
||
|
let g:which_key_map.f.w = 'find-file-word'
|
||
|
#+END_SRC
|
||
|
|
||
|
** Buffers
|
||
|
#+BEGIN_SRC conf
|
||
|
let g:which_key_map.b = { 'name' : '+buffers' }
|
||
|
|
||
|
" Buffer Create
|
||
|
noremap <leader>bc :enew<cr>
|
||
|
let g:which_key_map.b.c = 'buffer-create'
|
||
|
|
||
|
" Buffer Delete
|
||
|
noremap <leader>bd :Bclose<cr>
|
||
|
let g:which_key_map.b.d = 'buffer-delete'
|
||
|
|
||
|
" Buffer Delete all others
|
||
|
noremap <leader>bD :bufdo bd<cr>
|
||
|
let g:which_key_map.b.D = 'buffer-delete-others'
|
||
|
|
||
|
" Buffer Next
|
||
|
noremap <leader>bn :bnext<cr>
|
||
|
let g:which_key_map.b.n = 'buffer-next'
|
||
|
|
||
|
" Buffer Previous
|
||
|
noremap <leader>bp :bprevious<cr>
|
||
|
let g:which_key_map.b.p = 'buffer-previous'
|
||
|
|
||
|
" Find Buffers
|
||
|
noremap <leader>bf :Buffers<CR>
|
||
|
let g:which_key_map.b.f = 'buffer-find'
|
||
|
|
||
|
" Buffer Home (startify)
|
||
|
noremap <leader>bh :Startify<CR>
|
||
|
let g:which_key_map.b.h = 'buffer-home'
|
||
|
|
||
|
" CD to buffer path
|
||
|
noremap <leader>bw :cd %:p:h<CR>:pwd<CR>
|
||
|
let g:which_key_map.b.w = 'buffer-pwd'
|
||
|
#+END_SRC
|
||
|
|
||
|
** Tabs
|
||
|
#+BEGIN_SRC conf
|
||
|
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 <leader>tc :tabnew<cr>
|
||
|
let g:which_key_map.t.c = 'tab-create'
|
||
|
|
||
|
" Tab Delete
|
||
|
nnoremap <leader>td :tabclose<cr>
|
||
|
let g:which_key_map.t.d = 'tab-delete'
|
||
|
|
||
|
" Tab Maximize
|
||
|
nnoremap <leader>tD :tabonly<cr>
|
||
|
let g:which_key_map.t.D = 'tab-delete-others'
|
||
|
|
||
|
" Tab Left
|
||
|
nnoremap <leader>th gt<cr>
|
||
|
let g:which_key_map.t.h = 'tab-left'
|
||
|
|
||
|
" Tab Right
|
||
|
nnoremap <leader>tl gT<cr>
|
||
|
let g:which_key_map.t.l = 'tab-right'
|
||
|
|
||
|
" Tab Move Left
|
||
|
nnoremap <leader>tH :tabmove -1<cr>
|
||
|
let g:which_key_map.t.H = 'tab-move-left'
|
||
|
|
||
|
" Tab Move Right
|
||
|
nnoremap <leader>tL :tabmove +1<cr>
|
||
|
let g:which_key_map.t.L = 'tab-move-right'
|
||
|
|
||
|
" Tab Toggle
|
||
|
nnoremap <Leader>tt :exe "tabn ".g:lasttab<CR>
|
||
|
let g:which_key_map.t.t = 'tab-toggle'
|
||
|
#+END_SRC
|
||
|
|
||
|
** Terminals
|
||
|
#+BEGIN_SRC conf
|
||
|
let g:which_key_map.T = { 'name' : '+terminals' }
|
||
|
|
||
|
" Quickly create a new terminal in a new tab
|
||
|
nnoremap <Leader>Tc :tab new<CR>:term<CR>
|
||
|
let g:which_key_map.T.c = 'term-create'
|
||
|
|
||
|
" Quickly create a new terminal in a vertical split
|
||
|
nnoremap <Leader>T/ :vsplit<CR>:term<CR>
|
||
|
" let g:which_key_map.T./ = 'term-vert'
|
||
|
|
||
|
" Quickly create a new terminal in a horizontal split
|
||
|
nnoremap <Leader>T- :split<CR>:term<CR>
|
||
|
" let g:which_key_map.T.- = 'term-hor'
|
||
|
#+END_SRC
|
||
|
|
||
|
** Splits / Windows
|
||
|
#+BEGIN_SRC conf
|
||
|
let g:which_key_map.w = { 'name' : '+windows' }
|
||
|
|
||
|
" Split Horizontal
|
||
|
nnoremap <leader>w- :split<cr>
|
||
|
" let g:which_key_map.w.- = 'win-hor'
|
||
|
|
||
|
" Split Vertical
|
||
|
nnoremap <leader>w/ :vsplit<cr>
|
||
|
" let g:which_key_map.w./ = 'win-vert'
|
||
|
|
||
|
" Split Maximize
|
||
|
nnoremap <leader>wD <C-w>o
|
||
|
let g:which_key_map.w.D = 'win-delete-others'
|
||
|
|
||
|
" Split Delete
|
||
|
nnoremap <leader>wd <C-w>q
|
||
|
let g:which_key_map.w.d = 'win-delete'
|
||
|
|
||
|
" Split Go Left
|
||
|
nnoremap <leader>wh :wincmd h<CR>
|
||
|
let g:which_key_map.w.h = 'win-left'
|
||
|
|
||
|
" Split Go Down
|
||
|
nnoremap <leader>wj :wincmd j<CR>
|
||
|
let g:which_key_map.w.j = 'win-down'
|
||
|
|
||
|
" Split Go Up
|
||
|
nnoremap <leader>wk :wincmd k<CR>
|
||
|
let g:which_key_map.w.k = 'win-up'
|
||
|
|
||
|
" Split Go Right
|
||
|
nnoremap <leader>wl :wincmd l<CR>
|
||
|
let g:which_key_map.w.l = 'win-right'
|
||
|
|
||
|
" Split to Tab
|
||
|
nnoremap <leader>wt <C-w>T
|
||
|
let g:which_key_map.w.t = 'win-make-tab'
|
||
|
|
||
|
" Find window
|
||
|
nnoremap <leader>wf :Windows<CR>
|
||
|
let g:which_key_map.w.f = 'win-find'
|
||
|
|
||
|
" Maximize window
|
||
|
nnoremap <leader>wm :call MaximizeToggle()<CR>
|
||
|
let g:which_key_map.w.m = 'win-maximize'
|
||
|
|
||
|
function! MaximizeToggle()
|
||
|
if exists("s:maximize_session")
|
||
|
exec "source " . s:maximize_session
|
||
|
call delete(s:maximize_session)
|
||
|
unlet s:maximize_session
|
||
|
let &hidden=s:maximize_hidden_save
|
||
|
unlet s:maximize_hidden_save
|
||
|
else
|
||
|
let s:maximize_hidden_save = &hidden
|
||
|
let s:maximize_session = tempname()
|
||
|
set hidden
|
||
|
exec "mksession! " . s:maximize_session
|
||
|
only
|
||
|
endif
|
||
|
endfunction
|
||
|
#+END_SRC
|
||
|
|
||
|
** Check Spell
|
||
|
#+BEGIN_SRC conf
|
||
|
let g:which_key_map.S = { 'name' : '+spell-check' }
|
||
|
|
||
|
" CheckSpell Toggle
|
||
|
noremap <leader>St :setlocal spell!<cr>
|
||
|
let g:which_key_map.S.t = 'spell-toggle'
|
||
|
|
||
|
" CheckSpell Correct
|
||
|
noremap <leader>Sc z=
|
||
|
let g:which_key_map.S.c = 'spell-correct'
|
||
|
|
||
|
" CheckSpell Do first
|
||
|
noremap <leader>SC 1z=
|
||
|
let g:which_key_map.S.C = 'spell-correct-first'
|
||
|
|
||
|
" CheckSpell Language
|
||
|
noremap <leader>Sl :set spelllang=
|
||
|
let g:which_key_map.S.l = 'spell-language'
|
||
|
|
||
|
" CheckSpell Next
|
||
|
noremap <leader>Sn ]s
|
||
|
let g:which_key_map.S.n = 'spell-next'
|
||
|
|
||
|
" CheckSpell Next and correct
|
||
|
noremap <leader>SN ]s1z=
|
||
|
let g:which_key_map.S.N = 'spell-next-correct'
|
||
|
|
||
|
" CheckSpell Previous
|
||
|
noremap <leader>Sp [s
|
||
|
let g:which_key_map.S.p = 'spell-prev'
|
||
|
|
||
|
" CheckSpell Previous and correct
|
||
|
noremap <leader>SP [s1z=
|
||
|
let g:which_key_map.S.P = 'spell-prev-correct'
|
||
|
|
||
|
" CheckSpell Add to dictionnary
|
||
|
noremap <leader>Sa zg
|
||
|
let g:which_key_map.S.a = 'spell-add-dict'
|
||
|
#+END_SRC
|
||
|
|
||
|
** Make
|
||
|
#+BEGIN_SRC conf
|
||
|
let g:which_key_map.m = { 'name' : '+make' }
|
||
|
|
||
|
" Make Make
|
||
|
nnoremap <leader>mm :Make -B<CR>
|
||
|
let g:which_key_map.m.m = 'make'
|
||
|
|
||
|
" Make Clean
|
||
|
nnoremap <leader>mc :Make clean<CR>
|
||
|
let g:which_key_map.m.c = 'make-clean'
|
||
|
|
||
|
" Make Force
|
||
|
nnoremap <leader>mf :Make! -B<CR>
|
||
|
let g:which_key_map.m.f = 'make-force'
|
||
|
|
||
|
" Make Run
|
||
|
nnoremap <leader>mr :Make! run<cr>
|
||
|
let g:which_key_map.m.r = 'make-run'
|
||
|
|
||
|
" Make Open
|
||
|
nnoremap <leader>mo :make! open<cr>
|
||
|
let g:which_key_map.m.o = 'make-open'
|
||
|
#+END_SRC
|
||
|
|
||
|
** Search
|
||
|
#+BEGIN_SRC conf
|
||
|
let g:which_key_map.s = { 'name' : '+search' }
|
||
|
|
||
|
" Search History
|
||
|
noremap <leader>sh :History<CR>
|
||
|
let g:which_key_map.s.h = 'search-history'
|
||
|
|
||
|
" Search Tags
|
||
|
noremap <leader>sT :Tags<CR>
|
||
|
let g:which_key_map.s.T = 'search-tags'
|
||
|
|
||
|
" Search All
|
||
|
noremap <leader>sa :Rg<CR>
|
||
|
let g:which_key_map.s.g = 'search-all'
|
||
|
|
||
|
" Search Word
|
||
|
noremap <leader>sw :exe ':Rg ' . expand('<cword>')<CR>
|
||
|
let g:which_key_map.s.w = 'search-word'
|
||
|
|
||
|
" Search todo keyboard
|
||
|
" TODO - should not have to press enter
|
||
|
nnoremap <leader>st :Grepper -tool rg -query TODO<CR>
|
||
|
let g:which_key_map.s.t = 'search-todos'
|
||
|
#+END_SRC
|
||
|
|
||
|
** TODO - GIT
|
||
|
#+BEGIN_SRC conf
|
||
|
let g:which_key_map.g = { 'name' : '+git' }
|
||
|
|
||
|
" Git Gutter
|
||
|
nnoremap <silent><leader>gg :SignifyToggle<cr>
|
||
|
let g:which_key_map.g.g = 'git-'
|
||
|
|
||
|
" Git Gutter Highlight
|
||
|
nnoremap <silent><leader>gG :SignifyToggleHighlight<cr>
|
||
|
let g:which_key_map.g.G = 'git-'
|
||
|
|
||
|
" Git Commit
|
||
|
nnoremap <leader>gc :Gcommit<CR>
|
||
|
let g:which_key_map.g.c = 'git-commit'
|
||
|
|
||
|
" Git Status
|
||
|
nnoremap <leader>gs :Gstatus<CR>
|
||
|
let g:which_key_map.g.s = 'git-status'
|
||
|
|
||
|
" Git Diff
|
||
|
nnoremap <leader>gd :Gdiff<CR>
|
||
|
let g:which_key_map.g.d = 'git-diff'
|
||
|
|
||
|
" Git Blame
|
||
|
nnoremap <leader>gb :Gblame<CR>
|
||
|
let g:which_key_map.g.b = 'git-blame'
|
||
|
|
||
|
" Git Visualise
|
||
|
nnoremap <leader>gv :GV<CR>
|
||
|
let g:which_key_map.g.v = 'git-visualize'
|
||
|
|
||
|
" Git File (visualise)
|
||
|
nnoremap <leader>gF :GV!<CR>
|
||
|
let g:which_key_map.g.F = 'git-file'
|
||
|
|
||
|
" Git Find Commits
|
||
|
noremap <leader>gf :Commits<CR>
|
||
|
let g:which_key_map.g.f = 'git-find-commit'
|
||
|
#+END_SRC
|
||
|
|
||
|
** Errors
|
||
|
#+BEGIN_SRC conf
|
||
|
let g:which_key_map.e = { 'name' : '+errors' }
|
||
|
|
||
|
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 <silent><leader>ee :call ToggleLocationList()<CR>
|
||
|
let g:which_key_map.e.e = 'error-toggle'
|
||
|
|
||
|
" Error Open
|
||
|
nnoremap <silent><leader>eo :lopen<CR>
|
||
|
let g:which_key_map.e.o = 'error-open'
|
||
|
|
||
|
" Error Close
|
||
|
nnoremap <silent><leader>ec :lclose<CR>
|
||
|
let g:which_key_map.e.c = 'error-close'
|
||
|
|
||
|
" Error Next
|
||
|
nnoremap <silent><leader>en :lnext<CR>
|
||
|
let g:which_key_map.e.n = 'error-next'
|
||
|
|
||
|
" Error Previous
|
||
|
nnoremap <silent><leader>ep :lprevious<CR>
|
||
|
let g:which_key_map.e.p = 'error-previous'
|
||
|
#+END_SRC
|
||
|
|
||
|
** Text
|
||
|
#+BEGIN_SRC conf
|
||
|
let g:which_key_map.x = { 'name' : '+text' }
|
||
|
|
||
|
" Start interactive EasyAlign in visual mode (e.g. vipga) and for a motion
|
||
|
xmap <leader>xa <Plug>(EasyAlign)
|
||
|
nmap <leader>xa <Plug>(EasyAlign)
|
||
|
let g:which_key_map.x.a = 'text-align'
|
||
|
|
||
|
" Indent all file
|
||
|
nnoremap <leader>x= mzgg=G`z
|
||
|
" let g:which_key_map.x.= = 'text-indent-file'
|
||
|
|
||
|
" Custom Multiple Cursor
|
||
|
" http://www.kevinli.co/posts/2017-01-19-multiple-cursors-in-500-bytes-of-vimscript/
|
||
|
let g:mc = "y/\\V\<C-r>=escape(@\", '/')\<CR>\<CR>"
|
||
|
|
||
|
" Multiple Cursor
|
||
|
nnoremap <leader>xm *``cgn
|
||
|
vnoremap <expr> <leader>xm g:mc . "``cgn"
|
||
|
let g:which_key_map.x.m = 'multiple-cursor'
|
||
|
|
||
|
" Multiple Cursor - reserve direction
|
||
|
nnoremap <leader>xM *``cgN
|
||
|
vnoremap <expr> <leader>xM g:mc . "``cgN"
|
||
|
let g:which_key_map.x.M = 'multiple-cursor-reverse'
|
||
|
|
||
|
" Delete trainling Whitespaces
|
||
|
fun! TrimWhitespace()
|
||
|
let l:save = winsaveview()
|
||
|
keeppatterns %s/\s\+$//e
|
||
|
call winrestview(l:save)
|
||
|
endfun
|
||
|
nnoremap <leader>xt :call TrimWhitespace()<CR>
|
||
|
let g:which_key_map.x.t = 'delete-trailing-whitespaces'
|
||
|
#+END_SRC
|
||
|
|
||
|
** Config
|
||
|
#+BEGIN_SRC conf
|
||
|
let g:which_key_map.c = { 'name' : '+config' }
|
||
|
|
||
|
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 <leader>cs :call ToggleSyntaxH()<CR>
|
||
|
let g:which_key_map.c.s = 'toggle-syntax-col'
|
||
|
|
||
|
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 <leader>ch :call ToggleH()<CR>
|
||
|
let g:which_key_map.c.h = 'toggle-highlight'
|
||
|
|
||
|
" Reload vim config
|
||
|
noremap <Leader>cr :source $MYVIMRC<CR>
|
||
|
let g:which_key_map.c.e = 'reload-config'
|
||
|
|
||
|
" Edit vim config
|
||
|
noremap <Leader>ce :e $MYVIMRC<CR>
|
||
|
let g:which_key_map.c.e = 'edit-config'
|
||
|
|
||
|
" Disable highlight
|
||
|
noremap <silent> <leader>c<CR> :noh<CR>
|
||
|
let g:which_key_map.c.enter = 'disable-highlight'
|
||
|
|
||
|
" Theme
|
||
|
noremap <silent> <leader>ct :noh<CR>
|
||
|
let g:which_key_map.c.t = 'choose-theme'
|
||
|
#+END_SRC
|
||
|
|
||
|
** Insert
|
||
|
#+BEGIN_SRC conf
|
||
|
let g:which_key_map.i = { 'name' : '+insert' }
|
||
|
|
||
|
" Insert Snippet
|
||
|
noremap <Leader>is :Snippets<CR>
|
||
|
let g:which_key_map.i.s = 'insert-snippet'
|
||
|
#+END_SRC
|
||
|
|
||
|
** Save Which Key Configuration
|
||
|
#+BEGIN_SRC conf
|
||
|
call which_key#register('<Space>', "g:which_key_map")
|
||
|
#+END_SRC
|