2019-01-31 09:41:03 +01:00
#+TITLE : Vim Config
2021-01-01 20:12:34 +01:00
#+SETUPFILE : ./setup/org-setup-file.org
2020-11-05 17:04:10 +01:00
#+PROPERTY : header-args :comments none
2019-01-31 09:41:03 +01:00
#+PROPERTY : header-args+ :mkdirp yes
#+PROPERTY : header-args+ :tangle ~/.vimrc
* Plugins Install
** Plug start
2019-12-16 11:38:48 +01:00
#+BEGIN_SRC vimrc
2021-01-08 01:26:27 +01:00
call plug#begin('~/.vim/plugged')
2019-12-16 11:38:48 +01:00
#+end_src
2019-01-31 09:41:03 +01:00
** Manage Files
2022-05-13 16:35:09 +02:00
File Manager:
2019-12-16 11:38:48 +01:00
#+begin_src vimrc
2022-05-13 16:35:09 +02:00
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' }
2019-12-16 11:38:48 +01:00
#+end_src
2019-01-31 09:41:03 +01:00
** Text Objects
2019-12-16 11:38:48 +01:00
#+begin_src vimrc
2021-01-08 01:26:27 +01:00
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
2019-12-16 11:38:48 +01:00
#+end_src
2019-01-31 09:41:03 +01:00
** Git
2019-12-16 11:38:48 +01:00
#+begin_src vimrc
2022-05-13 16:35:09 +02:00
" Plug 'mhinz/vim-signify' " Show a diff using Vim its sign column
Plug 'TimUntersberger/neogit'
2019-12-16 11:38:48 +01:00
#+end_src
2019-01-31 09:41:03 +01:00
** Motions, Search
2019-12-16 11:38:48 +01:00
#+begin_src vimrc
2021-01-08 01:26:27 +01:00
Plug 'justinmk/vim-sneak' " The missing motion for Vim
2022-05-13 16:35:09 +02:00
Plug 'haya14busa/is.vim' " Automatically clear highlight after search
2019-12-16 11:38:48 +01:00
#+end_src
2019-01-31 09:41:03 +01:00
** Manipulate Things
2019-12-16 11:38:48 +01:00
#+begin_src vimrc
2021-01-08 01:26:27 +01:00
Plug 'tpope/vim-surround' " Quoting/parenthesizing made simple
Plug 'tpope/vim-commentary' " Comment stuff out
Plug 'junegunn/vim-easy-align' " A Vim alignment plugin
2022-05-13 16:35:09 +02:00
#+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', '<plug >(GrepperOperator)'] } "
2019-12-16 11:38:48 +01:00
#+end_src
2019-01-31 09:41:03 +01:00
** Utils
2019-12-16 11:38:48 +01:00
#+begin_src vimrc
2021-01-08 01:26:27 +01:00
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
2019-12-16 11:38:48 +01:00
#+end_src
2019-01-31 09:41:03 +01:00
** Visual
2019-12-16 11:38:48 +01:00
#+begin_src vimrc
2021-01-08 01:26:27 +01:00
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
2019-12-16 11:38:48 +01:00
#+end_src
2019-01-31 09:41:03 +01:00
** Themes
2019-12-16 11:38:48 +01:00
#+begin_src vimrc
2021-01-08 01:26:27 +01:00
Plug 'morhetz/gruvbox' " Retro groove color scheme for Vim
2019-12-16 11:38:48 +01:00
#+end_src
2019-01-31 09:41:03 +01:00
2020-11-03 16:45:31 +01:00
Other nice themes are [[https://github.com/mhartington/oceanic-next ][oceanic-next ]] and [[https://github.com/jacoborus/tender.vim ][tender ]].
2022-05-13 16:35:09 +02:00
** TODO Language Server Protocol
2019-12-16 11:38:48 +01:00
#+begin_src vimrc
2022-05-13 16:35:09 +02:00
" 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'
2019-08-23 10:02:52 +02:00
#+end_src
2019-12-16 11:38:48 +01:00
#+begin_src vimrc
2022-05-13 16:35:09 +02:00
Plug 'nvim-treesitter/nvim-treesitter', {'do': ':TSUpdate'}
2019-12-16 11:38:48 +01:00
#+end_src
2019-01-31 09:41:03 +01:00
2022-05-13 16:35:09 +02:00
** Snippnets and autocompletion
2019-12-16 11:38:48 +01:00
#+begin_src vimrc
2022-05-13 16:35:09 +02:00
" Plug 'SirVer/ultisnips' " The ultimate snippet solution for Vim
" Plug 'honza/vim-snippets' " Vim-snipmate default snippets
2019-12-16 11:38:48 +01:00
#+end_src
2019-01-31 09:41:03 +01:00
2022-05-13 16:35:09 +02:00
** Syntax Checking and Build Utils
2019-12-16 11:38:48 +01:00
#+begin_src vimrc
2022-05-13 16:35:09 +02:00
" Plug 'neomake/neomake' " Asynchronous linting and make framework for Neovim/Vim
2019-12-16 11:38:48 +01:00
#+end_src
2019-01-31 09:41:03 +01:00
** Tmux
2019-12-16 11:38:48 +01:00
#+begin_src vimrc
2021-01-08 01:26:27 +01:00
Plug 'christoomey/vim-tmux-navigator' " Seamless navigation between tmux panes and vim splits
Plug 'jpalardy/vim-slime' " Used to type text into a REPL
2019-12-16 11:38:48 +01:00
#+end_src
2019-01-31 09:41:03 +01:00
** Syntax
2019-12-16 11:38:48 +01:00
#+begin_src vimrc
2022-05-13 16:35:09 +02:00
" Plug 'sheerun/vim-polyglot' " A solid language pack for Vim
2019-12-16 11:38:48 +01:00
#+end_src
2019-01-31 09:41:03 +01:00
** LaTeX
2019-12-16 11:38:48 +01:00
#+begin_src vimrc
2022-05-13 16:35:09 +02:00
" Plug 'lervag/vimtex', { 'for': 'tex' } " A modern vim plugin for editing LaTeX files.
2019-12-16 11:38:48 +01:00
#+end_src
2019-01-31 09:41:03 +01:00
** Matlab
2019-12-16 11:38:48 +01:00
#+begin_src vimrc
2021-01-08 01:26:27 +01:00
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
2019-12-16 11:38:48 +01:00
#+end_src
2019-01-31 09:41:03 +01:00
** Plug End
2019-12-16 11:38:48 +01:00
#+begin_src vimrc
2021-01-08 01:26:27 +01:00
call plug#end()
2019-12-16 11:38:48 +01:00
#+end_src
2019-01-31 09:41:03 +01:00
* Basic
** General
2019-12-16 11:38:48 +01:00
#+begin_src vimrc
2021-01-08 01:26:27 +01:00
set runtimepath+=~/.vim
2019-01-31 09:41:03 +01:00
2021-01-08 01:26:27 +01:00
" Sets how many lines of history VIM has to remember
set history=500
2019-01-31 09:41:03 +01:00
2021-01-08 01:26:27 +01:00
" Enable filetype plugins
filetype plugin on
filetype indent on
2019-01-31 09:41:03 +01:00
2021-01-08 01:26:27 +01:00
" Set to auto read when a file is changed from the outside
set autoread
2019-01-31 09:41:03 +01:00
2021-01-08 01:26:27 +01:00
" writes the content of the file automatically if you call :make
set autowrite
2019-01-31 09:41:03 +01:00
2021-01-08 01:26:27 +01:00
" Share clipboard with system
set clipboard+=unnamedplus
2019-01-31 09:41:03 +01:00
2021-01-08 01:26:27 +01:00
" Define Leader Key as Space key
let mapleader = "\<Space >"
let g:mapleader = "\<Space >"
let maplocalleader = ","
2019-12-16 11:38:48 +01:00
#+end_src
2019-01-31 09:41:03 +01:00
** VIM user interface
2019-12-16 11:38:48 +01:00
#+begin_src vimrc
2021-01-08 01:26:27 +01:00
" Set 7 lines to the cursor - when moving vertically using j/k
set so=7
2019-01-31 09:41:03 +01:00
2021-01-08 01:26:27 +01:00
" Avoid garbled characters in Chinese language windows OS
let $LANG='en'
set langmenu=en
2019-01-31 09:41:03 +01:00
2021-01-08 01:26:27 +01:00
" Set Timeout config
set timeout
set ttimeout
set timeoutlen=500
set ttimeoutlen=50
2019-01-31 09:41:03 +01:00
2021-01-08 01:26:27 +01:00
" Turn on the wild menu
set wildmenu
2019-01-31 09:41:03 +01:00
2021-01-08 01:26:27 +01:00
" 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
2019-01-31 09:41:03 +01:00
2021-01-08 01:26:27 +01:00
set wildmode=full
2019-01-31 09:41:03 +01:00
2021-01-08 01:26:27 +01:00
"Always show current position
set ruler
2019-01-31 09:41:03 +01:00
2021-01-08 01:26:27 +01:00
" Height of the command bar
set cmdheight=1
2019-01-31 09:41:03 +01:00
2021-01-08 01:26:27 +01:00
" A buffer becomes hidden when it is abandoned
set hid
2019-01-31 09:41:03 +01:00
2021-01-08 01:26:27 +01:00
" Configure backspace so it acts as it should act
set backspace=eol,start,indent
set whichwrap+=<, >,h,l
2019-01-31 09:41:03 +01:00
2021-01-08 01:26:27 +01:00
" Ignore case when searching
set ignorecase
2019-01-31 09:41:03 +01:00
2021-01-08 01:26:27 +01:00
" When searching try to be smart about cases
set smartcase
2019-01-31 09:41:03 +01:00
2021-01-08 01:26:27 +01:00
" Option for smarter completions that will be case aware
set infercase
2019-01-31 09:41:03 +01:00
2021-01-08 01:26:27 +01:00
" Highlight search results
set hlsearch
2019-01-31 09:41:03 +01:00
2021-01-08 01:26:27 +01:00
" Makes search act like search in modern browsers
set incsearch
2019-01-31 09:41:03 +01:00
2021-01-08 01:26:27 +01:00
" Don't redraw while executing macros (good performance config)
set lazyredraw
2019-01-31 09:41:03 +01:00
2021-01-08 01:26:27 +01:00
" For regular expressions turn magic on
set magic
2019-01-31 09:41:03 +01:00
2021-01-08 01:26:27 +01:00
" Show matching brackets when text indicator is over them
set showmatch
2019-01-31 09:41:03 +01:00
2021-01-08 01:26:27 +01:00
" Don't show tab line if there is only one tab
set showtabline=1
2019-01-31 09:41:03 +01:00
2021-01-08 01:26:27 +01:00
" How tany tenths of a second to blink when matching brackets
set mat=2
2019-01-31 09:41:03 +01:00
2021-01-08 01:26:27 +01:00
" No annoying sound on errors
set noerrorbells
set novisualbell
set t_vb=
set tm=500
2019-01-31 09:41:03 +01:00
2021-01-08 01:26:27 +01:00
" Add a bit extra margin to the left
set foldcolumn=0
2019-01-31 09:41:03 +01:00
2021-01-08 01:26:27 +01:00
" Improve VIM scrolling
set ttyfast
2019-01-31 09:41:03 +01:00
2021-01-08 01:26:27 +01:00
" Relative Numbers
set relativenumber
2019-01-31 09:41:03 +01:00
2021-01-08 01:26:27 +01:00
" 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'
2019-05-16 21:13:08 +02:00
2021-01-08 01:26:27 +01:00
" Splits open at the bottom and right, which is non-retarded, unlike vim defaults.
set splitbelow splitright
2019-12-16 11:38:48 +01:00
#+end_src
2019-01-31 09:41:03 +01:00
** Foldings
2019-12-16 11:38:48 +01:00
#+begin_src vimrc
2021-01-08 01:26:27 +01:00
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
2019-12-16 11:38:48 +01:00
#+end_src
2019-01-31 09:41:03 +01:00
** Colors and Fonts
2019-12-16 11:38:48 +01:00
#+begin_src vimrc
2021-01-08 01:26:27 +01:00
syntax enable
2019-01-31 09:41:03 +01:00
2021-01-08 01:26:27 +01:00
set background=dark
2019-01-31 09:41:03 +01:00
2021-01-08 01:26:27 +01:00
let base16colorspace=256
2019-01-31 09:41:03 +01:00
2021-01-08 01:26:27 +01:00
let g:gruvbox_contrast_dark = 'soft'
2019-05-16 21:13:08 +02:00
2021-01-08 01:26:27 +01:00
try
colorscheme gruvbox
catch
endtry
2019-04-10 16:53:26 +02:00
2021-01-08 01:26:27 +01:00
" set cursor shapes for insert and replace modes
set guicursor=n-v-c-sm:block,i-ci-ve:ver25,r-cr-o:hor20
2019-01-31 09:41:03 +01:00
2021-01-08 01:26:27 +01:00
" Set utf8 as standard encoding
set encoding=utf-8
set fileencoding=utf-8
2019-01-31 09:41:03 +01:00
2021-01-08 01:26:27 +01:00
" Use Unix as the standard file type
set ffs=unix,dos,mac
2019-01-31 09:41:03 +01:00
2021-01-08 01:26:27 +01:00
" Do not highlight the cursor line : http://vim.wikia.com/wiki/Highlight_current_line
set nocursorline
set nocursorcolumn
2019-01-31 09:41:03 +01:00
2021-01-08 01:26:27 +01:00
" Always show the status line
set laststatus=2
2019-01-31 09:41:03 +01:00
2021-01-08 01:26:27 +01:00
" Underline for bad spelled words
hi clear SpellBad
hi SpellBad cterm=underline
" Set style for gVim
hi SpellBad gui=undercurl
2019-12-16 11:38:48 +01:00
#+end_src
2019-01-31 09:41:03 +01:00
** Files, backups and undo
2019-12-16 11:38:48 +01:00
#+begin_src vimrc
2021-01-08 01:26:27 +01:00
" Turn backup off, since most stuff is in SVN, git et.c anyway...
set nobackup
set nowb
set noswapfile
2019-12-16 11:38:48 +01:00
#+end_src
2019-01-31 09:41:03 +01:00
** Text, tab and indent related
2019-12-16 11:38:48 +01:00
#+begin_src vimrc
2021-01-08 01:26:27 +01:00
" Use spaces instead of tabs
set expandtab
2019-01-31 09:41:03 +01:00
2021-01-08 01:26:27 +01:00
" Be smart when using tabs
set smarttab
2019-01-31 09:41:03 +01:00
2021-01-08 01:26:27 +01:00
" 1 tab == 4 spaces
set shiftwidth=4
set tabstop=4
2019-01-31 09:41:03 +01:00
2021-01-08 01:26:27 +01:00
" Enable Line Number
set number
2020-11-05 17:04:10 +01:00
#+end_src
2019-01-31 09:41:03 +01:00
2020-11-05 17:04:10 +01:00
From https://stackoverflow.com/questions/36950231/auto-wrap-lines-in-vim-without-inserting-newlines.
#+begin_src vimrc
2021-01-08 01:26:27 +01:00
" Word wrap without line breaks
set textwidth=0
set wrapmargin=0
set wrap
set linebreak
" set columns=160
2020-11-05 17:04:10 +01:00
#+end_src
#+begin_src vimrc
2021-01-08 01:26:27 +01:00
set autoindent " Auto Indentation
set nosmartindent " No Smart Indentation
2019-12-16 11:38:48 +01:00
#+end_src
2019-01-31 09:41:03 +01:00
** Moving around, tabs, windows and buffers
2019-12-16 11:38:48 +01:00
#+begin_src vimrc
2021-01-08 01:26:27 +01:00
" Specify the behavior when switching between buffers
try
set switchbuf=useopen,usetab
catch
endtry
2019-01-31 09:41:03 +01:00
2021-01-08 01:26:27 +01:00
" Return to last edit position when opening files (You want this!)
au BufReadPost * if line("'\"") > 1 && line("'\"") <= line("$") | exe "normal! g'\"" | endif
2019-01-31 09:41:03 +01:00
2021-01-08 01:26:27 +01:00
set splitbelow
set splitright
2019-01-31 09:41:03 +01:00
2021-01-08 01:26:27 +01:00
" This enables mouse in all modes
set mouse=a
2019-01-31 09:41:03 +01:00
2021-01-08 01:26:27 +01:00
" Automatically equalize splits when Vim is resized
autocmd VimResized * wincmd =
2019-12-16 11:38:48 +01:00
#+end_src
2019-01-31 09:41:03 +01:00
** Misc
2019-12-16 11:38:48 +01:00
#+begin_src vimrc
2021-01-08 01:26:27 +01:00
" Speed up cursor movments : http://superuser.com/a/625994/587300
set regexpengine=1 " https://github.com/xolox/vim-easytags/issues/88
2019-01-31 09:41:03 +01:00
2021-01-08 01:26:27 +01:00
" Set the maximum column for syntax highlighting
set synmaxcol=250
2019-12-16 11:38:48 +01:00
#+end_src
2019-01-31 09:41:03 +01:00
** Helper functions
2019-12-16 11:38:48 +01:00
#+begin_src vimrc
2021-01-08 01:26:27 +01:00
function! CmdLine(str)
exe "menu Foo.Bar :" . a:str
emenu Foo.Bar
unmenu Foo
endfunction
2019-01-31 09:41:03 +01:00
2021-01-08 01:26:27 +01:00
function! VisualSelection(direction, extra_filter) range
let l:saved_reg = @"
execute "normal! vgvy"
2019-01-31 09:41:03 +01:00
2021-01-08 01:26:27 +01:00
let l:pattern = escape(@", '\\/.*$^~[]')
let l:pattern = substitute(l:pattern, "\n$", "", "")
2019-01-31 09:41:03 +01:00
2021-01-08 01:26:27 +01:00
if a:direction == 'gv'
call CmdLine("Ag \"" . l:pattern . "\" " )
elseif a:direction == 'replace'
call CmdLine("%s" . '/'. l:pattern . '/ ')
endif
2019-01-31 09:41:03 +01:00
2021-01-08 01:26:27 +01:00
let @/ = l:pattern
let @" = l:saved_reg
endfunction
2019-01-31 09:41:03 +01:00
2021-01-08 01:26:27 +01:00
" Don't close window, when deleting a buffer
command! Bclose call <SID >BufcloseCloseIt()
function! <SID >BufcloseCloseIt()
let l:currentBufNum = bufnr("%")
let l:alternateBufNum = bufnr("#")
2019-01-31 09:41:03 +01:00
2021-01-08 01:26:27 +01:00
if buflisted(l:alternateBufNum)
buffer #
else
bnext
endif
2019-01-31 09:41:03 +01:00
2021-01-08 01:26:27 +01:00
if bufnr("%") == l:currentBufNum
new
endif
2019-01-31 09:41:03 +01:00
2021-01-08 01:26:27 +01:00
if buflisted(l:currentBufNum)
execute("bdelete! ".l:currentBufNum)
endif
endfunction
2019-12-16 11:38:48 +01:00
#+end_src
2019-01-31 09:41:03 +01:00
** GUI related
2019-12-16 11:38:48 +01:00
#+begin_src vimrc
2021-01-08 01:26:27 +01:00
set guifont=Hack\ Nerd\ Font\ Mono:h13
set gfn=Hack\ Nerd\ Font\ Mono:h13
2019-01-31 09:41:03 +01:00
2021-01-08 01:26:27 +01:00
" Disable scrollbars
set guioptions-=r
set guioptions-=R
set guioptions-=l
set guioptions-=L
2019-12-16 11:38:48 +01:00
#+end_src
2019-01-31 09:41:03 +01:00
** Turn persistent undo on
2019-12-16 11:38:48 +01:00
#+begin_src vimrc
2021-01-08 01:26:27 +01:00
try
set undodir=~/.vim_runtime/temp_dirs/undodir
set undofile
catch
endtry
2019-12-16 11:38:48 +01:00
#+end_src
2019-01-31 09:41:03 +01:00
* Mappings
** Normal mode related
2019-12-16 11:38:48 +01:00
#+begin_src vimrc
2021-01-08 01:26:27 +01:00
" 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
2019-12-16 11:38:48 +01:00
#+end_src
2019-01-31 09:41:03 +01:00
** Insert mode related
2019-12-16 11:38:48 +01:00
#+begin_src vimrc
2021-01-08 01:26:27 +01:00
" Paste while in insert mode
inoremap <C-v > <C-r >*
2019-01-31 09:41:03 +01:00
2021-01-08 01:26:27 +01:00
" Go to the end of line
inoremap <C-e > <Esc >A
2019-01-31 09:41:03 +01:00
2021-01-08 01:26:27 +01:00
" Go to the beginning of line
inoremap <C-a > <Esc >I
2019-12-16 11:38:48 +01:00
#+end_src
2019-01-31 09:41:03 +01:00
** Visual mode related
2019-12-16 11:38:48 +01:00
#+begin_src vimrc
2021-01-08 01:26:27 +01:00
" 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 >
2019-01-31 09:41:03 +01:00
2021-01-08 01:26:27 +01:00
" Re-select visual block after indenting
vnoremap < <gv
vnoremap > >gv
2019-01-31 09:41:03 +01:00
2021-01-08 01:26:27 +01:00
" Move visual block
vnoremap J :m '>+1<CR >gv=gv
vnoremap K :m '<-2<CR >gv=gv
2019-12-16 11:38:48 +01:00
#+end_src
2019-01-31 09:41:03 +01:00
** Add some delimiters
2019-12-16 11:38:48 +01:00
#+begin_src vimrc
2021-01-08 01:26:27 +01:00
" 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 >
2019-12-16 11:38:48 +01:00
#+end_src
2019-01-31 09:41:03 +01:00
** Command mode related
2019-12-16 11:38:48 +01:00
#+begin_src vimrc
2021-01-08 01:26:27 +01:00
" Bash like keys for the command line
cnoremap <C-A > <Home >
cnoremap <C-E > <End >
cnoremap <C-K > <C-U >
2019-01-31 09:41:03 +01:00
2021-01-08 01:26:27 +01:00
cnoremap <C-P > <Up >
cnoremap <C-N > <Down >
2019-12-16 11:38:48 +01:00
#+end_src
2019-01-31 09:41:03 +01:00
** Terminal mode related
2019-12-16 11:38:48 +01:00
#+begin_src vimrc
2021-01-08 01:26:27 +01:00
" tnoremap <Esc > <C-\ ><C-n >
2019-01-31 09:41:03 +01:00
2021-01-08 01:26:27 +01:00
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
2019-12-16 11:38:48 +01:00
#+end_src
2019-01-31 09:41:03 +01:00
2019-05-16 21:13:08 +02:00
** Correct misspelled works
Taken from: https://vi.stackexchange.com/questions/68/autocorrect-spelling-mistakes
2019-12-16 11:38:48 +01:00
#+begin_src vimrc
2021-01-08 01:26:27 +01:00
" Go back to last misspelled word and pick first suggestion.
2021-10-25 14:26:02 +02:00
inoremap <C-L > <c-g >u<Esc >[s1z=`]a<c-g >u
2019-05-16 21:13:08 +02:00
2021-01-08 01:26:27 +01:00
" Select last misspelled word (typing will edit).
nnoremap <C-K > <Esc >[sve<C-G >
inoremap <C-K > <Esc >[sve<C-G >
snoremap <C-K > <Esc >b[sviw<C-G >
2019-12-16 11:38:48 +01:00
#+end_src
2019-05-16 21:13:08 +02:00
2019-01-31 09:41:03 +01:00
* Filetypes
2019-05-16 21:13:08 +02:00
** Mails
2019-12-16 11:38:48 +01:00
#+begin_src vimrc
2021-01-08 01:26:27 +01:00
autocmd FileType mail set spell spelllang=en_us,fr
2021-02-14 19:14:10 +01:00
autocmd FileType mail set textwidth=0
2021-10-25 14:26:02 +02:00
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")
2019-05-16 21:13:08 +02:00
#+end_src
2020-11-05 17:04:10 +01:00
2019-01-31 09:41:03 +01:00
** MarkDown
2019-12-16 11:38:48 +01:00
#+begin_src vimrc
2021-01-08 01:26:27 +01:00
" Automatically turn on spell-checking for Markdown files
au BufRead,BufNewFile *.md setlocal spell spelllang=fr,en
2019-12-16 11:38:48 +01:00
#+end_src
2019-01-31 09:41:03 +01:00
** LaTeX
2019-12-16 11:38:48 +01:00
#+begin_src vimrc
2021-01-08 01:26:27 +01:00
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={'(':')', '[':']', '{':'}',"'":"'",'"':'"', '`':'`', '$':'$'}
2019-01-31 09:41:03 +01:00
2021-01-08 01:26:27 +01:00
au BufRead,BufNewFile *.tex set iskeyword+=-
2019-01-31 09:41:03 +01:00
2021-01-08 01:26:27 +01:00
" " 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 /[\^]/
2019-01-31 09:41:03 +01:00
2021-01-08 01:26:27 +01:00
" 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)
2019-01-31 09:41:03 +01:00
2021-01-08 01:26:27 +01:00
" " Make Tikz
" nnoremap <leader >mt :Make pdf t=tikz f= %:t:r<cr >
" nnoremap <leader >mto :make open t=tikz f= %:t:r<cr >
2019-01-31 09:41:03 +01:00
2021-01-08 01:26:27 +01:00
" " Make LaTeX
" nnoremap <leader >ml :Make pdf f=%:t:r<cr >
" nnoremap <leader >mlo :make open f=%:t:r<cr >
2019-12-16 11:38:48 +01:00
#+end_src
2019-01-31 09:41:03 +01:00
** Arduino
2019-12-16 11:38:48 +01:00
#+begin_src vimrc
2021-01-08 01:26:27 +01:00
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
2019-12-16 11:38:48 +01:00
#+end_src
2019-01-31 09:41:03 +01:00
** Python
2019-12-16 11:38:48 +01:00
#+begin_src vimrc
2021-01-08 01:26:27 +01:00
let g:slime_python_ipython = 1
2019-01-31 09:41:03 +01:00
2021-01-08 01:26:27 +01:00
au FileType python setlocal expandtab
au FileType python setlocal tabstop=4
au FileType python setlocal shiftwidth=4
2019-01-31 09:41:03 +01:00
2021-01-08 01:26:27 +01:00
" Run Section
au FileType python nmap <buffer > <localleader ><localleader > <Plug >SlimeParagraphSend
2019-01-31 09:41:03 +01:00
2021-01-08 01:26:27 +01:00
" Run Selected text
au FileType python vmap <buffer > <localleader ><localleader > <Plug >SlimeRegionSend
2019-01-31 09:41:03 +01:00
2021-01-08 01:26:27 +01:00
" CD to directory of current file
au FileType python nmap <buffer > <localleader >c :SlimeSend0('cd '.expand('%:p:h'))<CR >
2019-12-16 11:38:48 +01:00
#+end_src
2019-01-31 09:41:03 +01:00
** Matlab
2019-12-16 11:38:48 +01:00
#+begin_src vimrc
2021-01-08 01:26:27 +01:00
" Run Section (delimited by %%)
au FileType matlab nmap <buffer > <localleader >mm <Plug >SlimeParagraphSend
2019-01-31 09:41:03 +01:00
2021-01-08 01:26:27 +01:00
" Run either Selected text
au FileType matlab vmap <buffer > <localleader >mm <Plug >SlimeRegionSend
2022-05-13 16:35:09 +02:00
#+end_src
2019-01-31 09:41:03 +01:00
2022-05-13 16:35:09 +02:00
#+begin_src vimrc
2021-01-08 01:26:27 +01:00
func! GetSelectedText()
normal gv"xy
let result = getreg("x")
normal gv
return result
endfunc
2019-01-31 09:41:03 +01:00
2021-01-08 01:26:27 +01:00
" Help on the current selection
au FileType matlab vmap <buffer > <localleader >mh :<C-U >SlimeSend0('help '.expand(GetSelectedText()))<CR >
2019-01-31 09:41:03 +01:00
2021-01-08 01:26:27 +01:00
" Documentation on the current selection
au FileType matlab vmap <buffer > <localleader >mH :<C-U >SlimeSend0('doc '.expand(GetSelectedText()))<CR >
2019-01-31 09:41:03 +01:00
2021-01-08 01:26:27 +01:00
" Open the current file in the Matlab Editor (usefull for debuging)
au FileType matlab nmap <buffer > <localleader >me :SlimeSend0('edit '.expand('%:p'))<CR >
2019-01-31 09:41:03 +01:00
2021-01-08 01:26:27 +01:00
" Run all the file
au FileType matlab nmap <buffer > <localleader >mr :SlimeSend0('run '.expand('%:t'))<CR >
2019-01-31 09:41:03 +01:00
2021-01-08 01:26:27 +01:00
" Send "cd filepath" to matlab
au FileType matlab nmap <buffer > <localleader >mc :SlimeSend0('cd '.expand('%:p:h'))<CR >
2019-01-31 09:41:03 +01:00
2021-01-08 01:26:27 +01:00
" Open workspace
au FileType matlab nmap <buffer > <localleader >mw :SlimeSend0('workspace')<CR >
2019-12-16 11:38:48 +01:00
#+end_src
2019-01-31 09:41:03 +01:00
2022-05-13 16:35:09 +02:00
* Plugins Config
** Treesitter
2019-12-16 11:38:48 +01:00
#+begin_src vimrc
2022-05-13 16:35:09 +02:00
lua <<EOF
require'nvim-treesitter.configs'.setup {
highlight = {
enable = true,
additional_vim_regex_highlighting = false,
},
}
EOF
2019-12-16 11:38:48 +01:00
#+end_src
2019-01-31 09:41:03 +01:00
2021-10-25 14:26:02 +02:00
** =junegunn/fzf=
2019-12-16 11:38:48 +01:00
#+begin_src vimrc
2022-05-13 16:35:09 +02:00
" " 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()
2019-12-16 11:38:48 +01:00
#+end_src
2019-01-31 09:41:03 +01:00
2021-10-25 14:26:02 +02:00
** =autozimu/LanguageClient-neovim=
2019-12-16 11:38:48 +01:00
#+begin_src vimrc
2022-05-13 16:35:09 +02:00
" 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'],
" \ }
2019-08-23 10:02:52 +02:00
2022-05-13 16:35:09 +02:00
" nnoremap <F5 > :call LanguageClient_contextMenu()<CR >
" " Or map each action separately
" nnoremap <silent > K :call LanguageClient#textDocument_hover()<CR >
" nnoremap <silent > gd :call LanguageClient#textDocument_definition()<CR >
" nnoremap <silent > <F2 > :call LanguageClient#textDocument_rename()<CR >
2019-08-23 10:02:52 +02:00
#+end_src
2021-10-25 14:26:02 +02:00
** =JamshedVesuna/vim-markdown-preview=
2019-12-16 11:38:48 +01:00
#+begin_src vimrc
2022-05-13 16:35:09 +02:00
" let vim_markdown_preview_github=1
" let vim_markdown_preview_browser='Google Chrome'
" let vim_markdown_preview_temp_file=1
2021-01-08 01:26:27 +01:00
" let vim_markdown_preview_pandoc=1
2019-12-16 11:38:48 +01:00
#+end_src
2019-01-31 09:41:03 +01:00
2021-10-25 14:26:02 +02:00
** =mhinz/vim-signify=
2019-12-16 11:38:48 +01:00
#+begin_src vimrc
2021-01-08 01:26:27 +01:00
let g:signify_vcs_list = ['git']
2019-01-31 09:41:03 +01:00
2021-01-08 01:26:27 +01:00
let g:signify_disable_by_default = 1
2019-12-16 11:38:48 +01:00
#+end_src
2019-01-31 09:41:03 +01:00
2021-10-25 14:26:02 +02:00
** =Deoplete=
2019-12-16 11:38:48 +01:00
#+begin_src vimrc
2022-05-13 16:35:09 +02:00
" let g:deoplete#enable_at_startup = 1
2019-12-16 11:38:48 +01:00
2021-01-08 01:26:27 +01:00
" 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'])
2019-12-16 11:38:48 +01:00
#+end_src
2019-01-31 09:41:03 +01:00
2021-10-25 14:26:02 +02:00
** =SirVer/ultisnips=
2019-12-16 11:38:48 +01:00
#+begin_src vimrc
2022-05-13 16:35:09 +02:00
" let g:UltiSnipsSnippetsDir = '~/.vim/UltiSnip'
2019-01-31 09:41:03 +01:00
2022-05-13 16:35:09 +02:00
" " inoremap <silent ><expr ><TAB > pumvisible() ? "\<C-n >" : "\<TAB >"
" let g:UltiSnipsExpandTrigger="<C-j >"
" let g:UltiSnipsJumpForwardTrigger="<tab >"
" let g:UltiSnipsJumpBackwardTrigger="<s-tab >"
2019-12-16 11:38:48 +01:00
#+end_src
2019-01-31 09:41:03 +01:00
2021-10-25 14:26:02 +02:00
** =honza/vim-snippets=
2019-12-16 11:38:48 +01:00
#+begin_src vimrc
2021-01-08 01:26:27 +01:00
let g:snipMate = {}
let g:snipMate.scope_aliases = {}
2019-12-16 11:38:48 +01:00
#+end_src
2019-01-31 09:41:03 +01:00
2021-10-25 14:26:02 +02:00
** =itchyny/lightline.vim=
2019-12-16 11:38:48 +01:00
#+begin_src vimrc
2021-01-08 01:26:27 +01:00
" \ 'colorscheme': 'gruvbox',
let g:lightline = {
\ 'colorscheme': 'solarized',
\ 'active': {
\ 'left': [ [ 'mode', 'paste' ],
2022-05-13 16:35:09 +02:00
\ [ 'filename', 'modified', 'fugitive' ] ]
2021-01-08 01:26:27 +01:00
\ },
\ 'component': {
\ 'fugitive': '%{exists("*fugitive#head")?fugitive#head():""}'
\ },
\ 'component_visible_condition': {
\ 'fugitive': '(exists("*fugitive#head") && ""!=fugitive#head())'
\ },
\ 'separator': { 'left': '', 'right': '' },
\ 'subseparator': { 'left': "|", 'right': "|" }
\ }
2019-12-16 11:38:48 +01:00
#+end_src
2019-01-31 09:41:03 +01:00
2022-05-13 16:35:09 +02:00
** Git
#+begin_src vimrc
lua <<EOF
local neogit = require('neogit')
neogit.setup {}
EOF
#+end_src
** LSP
#+begin_src vimrc
lua <<EOF
local lsp = require('lsp-zero')
lsp.preset('recommended')
lsp.setup()
EOF
#+end_src
2021-10-25 14:26:02 +02:00
** =Autopairs=
2019-12-16 11:38:48 +01:00
#+begin_src vimrc
2021-01-08 01:26:27 +01:00
" Incompatibilité entre auto-pairs et clang-complete
let g:AutoPairsMapCR = 0
imap <silent ><CR > <CR ><Plug >AutoPairsReturn
2019-12-16 11:38:48 +01:00
#+end_src
2019-01-31 09:41:03 +01:00
2021-10-25 14:26:02 +02:00
** =Yggdroot/indentLine=
2019-12-16 11:38:48 +01:00
#+begin_src vimrc
2021-01-08 01:26:27 +01:00
" :IndentLinesToggle toggles lines on and off.
let g:indentLine_color_term = 239
2019-12-16 11:38:48 +01:00
#+end_src
2019-01-31 09:41:03 +01:00
2021-10-25 14:26:02 +02:00
** =ryanoasis/vim-devicons=
2019-12-16 11:38:48 +01:00
#+begin_src vimrc
2021-01-08 01:26:27 +01:00
let g:webdevicons_enable_ctrlp = 1
2019-12-16 11:38:48 +01:00
#+end_src
2019-01-31 09:41:03 +01:00
2021-10-25 14:26:02 +02:00
** =tpope/vim-surround=
2019-12-16 11:38:48 +01:00
#+begin_src vimrc
2021-01-08 01:26:27 +01:00
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__"
2019-12-16 11:38:48 +01:00
#+end_src
2019-01-31 09:41:03 +01:00
2021-10-25 14:26:02 +02:00
** =Neomake=
2019-12-16 11:38:48 +01:00
#+begin_src vimrc
2022-05-13 16:35:09 +02:00
" " 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']
2019-12-16 11:38:48 +01:00
#+end_src
2019-01-31 09:41:03 +01:00
2021-10-25 14:26:02 +02:00
** =lervag/vimtex=
2019-12-16 11:38:48 +01:00
#+begin_src vimrc
2021-01-08 01:26:27 +01:00
" let g:tex_conceal=""
" autocmd FileType tex let b:vimtex_main = 'main.tex'
" let g:vimtex_mappings_enabled=0
2019-12-16 11:38:48 +01:00
#+end_src
2019-01-31 09:41:03 +01:00
2021-10-25 14:26:02 +02:00
** =jpalardy/vim-slime=
2019-12-16 11:38:48 +01:00
#+begin_src vimrc
2021-01-08 01:26:27 +01:00
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
2019-12-16 11:38:48 +01:00
#+end_src
2019-01-31 09:41:03 +01:00
2021-10-25 14:26:02 +02:00
** =mhinz/vim-grepper=
2019-12-16 11:38:48 +01:00
#+begin_src vimrc
2021-01-08 01:26:27 +01:00
" nnoremap <leader >G :Grepper -tool ag<cr >
" nmap gs <plug >(GrepperOperator)
" xmap gs <plug >(GrepperOperator)
2019-12-16 11:38:48 +01:00
#+end_src
2019-01-31 09:41:03 +01:00
** Editor config
2019-12-16 11:38:48 +01:00
#+begin_src vimrc
2021-01-08 01:26:27 +01:00
" To ensure that this plugin works well with Tim Pope's fugitive, use the following patterns array:
let g:EditorConfig_exclude_patterns = ['fugitive://.*']
2019-12-16 11:38:48 +01:00
#+end_src
2019-01-31 09:41:03 +01:00
2022-05-13 16:35:09 +02:00
** Telescope
2019-12-16 11:38:48 +01:00
#+begin_src vimrc
2022-05-13 16:35:09 +02:00
lua <<EOF
require('telescope').load_extension('fzf')
EOF
2019-12-16 11:38:48 +01:00
#+end_src
2019-01-31 09:41:03 +01:00
2022-05-13 16:35:09 +02:00
* Key Bindings
2019-01-31 09:41:03 +01:00
** Quit
2019-12-16 11:38:48 +01:00
#+begin_src vimrc
2021-01-08 01:26:27 +01:00
" Quit
nnoremap <leader >qq :qa<cr >
2019-01-31 09:41:03 +01:00
2021-01-08 01:26:27 +01:00
" Quit - Force
nnoremap <leader >qQ :qa!<cr >
2019-12-16 11:38:48 +01:00
#+end_src
2019-01-31 09:41:03 +01:00
** Files
2019-12-16 11:38:48 +01:00
#+begin_src vimrc
2021-01-08 01:26:27 +01:00
" Fast saving
nnoremap <leader >fs :w!<cr >
2019-01-31 09:41:03 +01:00
2021-01-08 01:26:27 +01:00
" Find Files
2022-05-13 16:35:09 +02:00
nnoremap <leader >ff <cmd >Telescope find_files<cr >
nnoremap <leader ><space > <cmd >Telescope find_files<cr >
2019-12-16 11:38:48 +01:00
#+end_src
2019-01-31 09:41:03 +01:00
** Buffers
2019-12-16 11:38:48 +01:00
#+begin_src vimrc
2021-01-08 01:26:27 +01:00
" Buffer Create
noremap <leader >bc :enew<cr >
2019-01-31 09:41:03 +01:00
2021-01-08 01:26:27 +01:00
" Buffer Delete
noremap <leader >bd :Bclose<cr >
2019-01-31 09:41:03 +01:00
2021-01-08 01:26:27 +01:00
" Buffer Next
noremap <leader >bn :bnext<cr >
2019-01-31 09:41:03 +01:00
2021-01-08 01:26:27 +01:00
" Buffer Previous
noremap <leader >bp :bprevious<cr >
2019-01-31 09:41:03 +01:00
2021-01-08 01:26:27 +01:00
" Find Buffers
2022-05-13 16:35:09 +02:00
nnoremap <leader >bb <cmd >Telescope buffers<cr >
2019-12-16 11:38:48 +01:00
#+end_src
2019-01-31 09:41:03 +01:00
** Tabs
2019-12-16 11:38:48 +01:00
#+begin_src vimrc
2021-01-08 01:26:27 +01:00
" Let 'tt' toggle between this and the last accessed tab
let g:lasttab = 1
au TabLeave * let g:lasttab = tabpagenr()
2019-01-31 09:41:03 +01:00
2021-01-08 01:26:27 +01:00
" Tab New
nnoremap <leader >tc :tabnew<cr >
2019-01-31 09:41:03 +01:00
2021-01-08 01:26:27 +01:00
" Tab Delete
nnoremap <leader >td :tabclose<cr >
2019-01-31 09:41:03 +01:00
2021-01-08 01:26:27 +01:00
" Tab Move Left
nnoremap <leader >tH :tabmove -1<cr >
2019-01-31 09:41:03 +01:00
2021-01-08 01:26:27 +01:00
" Tab Move Right
nnoremap <leader >tL :tabmove +1<cr >
2019-01-31 09:41:03 +01:00
2021-01-08 01:26:27 +01:00
" Tab Toggle
nnoremap <Leader >tt :exe "tabn ".g:lasttab<CR >
2019-12-16 11:38:48 +01:00
#+end_src
2019-01-31 09:41:03 +01:00
** Terminals
2019-12-16 11:38:48 +01:00
#+begin_src vimrc
2021-01-08 01:26:27 +01:00
" Quickly create a new terminal in a new tab
nnoremap <Leader >Tc :tab new<CR >:term<CR >
2019-01-31 09:41:03 +01:00
2021-01-08 01:26:27 +01:00
" Quickly create a new terminal in a vertical split
2022-05-13 16:35:09 +02:00
nnoremap <Leader >Tv :vsplit<CR >:term<CR >
2019-01-31 09:41:03 +01:00
2021-01-08 01:26:27 +01:00
" Quickly create a new terminal in a horizontal split
2022-05-13 16:35:09 +02:00
nnoremap <Leader >Th :split<CR >:term<CR >
2019-12-16 11:38:48 +01:00
#+end_src
2019-01-31 09:41:03 +01:00
** Splits / Windows
2019-12-16 11:38:48 +01:00
#+begin_src vimrc
2021-01-08 01:26:27 +01:00
" Split Horizontal
2022-05-13 16:35:09 +02:00
nnoremap <leader >ws :split<cr >
2021-01-08 01:26:27 +01:00
" Split Vertical
2022-05-13 16:35:09 +02:00
nnoremap <leader >wv :vsplit<cr >
2021-01-08 01:26:27 +01:00
" Split Maximize
2022-05-13 16:35:09 +02:00
nnoremap <leader >wm <C-w >o
2021-01-08 01:26:27 +01:00
" Split Delete
nnoremap <leader >wd <C-w >q
" Split Go Left
nnoremap <leader >wh :wincmd h<CR >
" Split Go Down
nnoremap <leader >wj :wincmd j<CR >
" Split Go Up
nnoremap <leader >wk :wincmd k<CR >
" Split Go Right
nnoremap <leader >wl :wincmd l<CR >
2022-05-13 16:35:09 +02:00
" Split Move Left
nnoremap <leader >wH <C-w >H
" Split Move Down
nnoremap <leader >wJ <C-w >J
" Split Move Up
nnoremap <leader >wK <C-w >K
" Split Move Right
nnoremap <leader >wL <C-w >L
2019-12-16 11:38:48 +01:00
#+end_src
2019-01-31 09:41:03 +01:00
2022-05-13 16:35:09 +02:00
** TODO Check Spell
2019-12-16 11:38:48 +01:00
#+begin_src vimrc
2021-01-08 01:26:27 +01:00
" CheckSpell Toggle
noremap <leader >St :setlocal spell!<cr >
2019-01-31 09:41:03 +01:00
2021-01-08 01:26:27 +01:00
" CheckSpell Correct
noremap <leader >Sc z=
2019-01-31 09:41:03 +01:00
2021-01-08 01:26:27 +01:00
" CheckSpell Do first
noremap <leader >SC 1z=
2019-01-31 09:41:03 +01:00
2021-01-08 01:26:27 +01:00
" CheckSpell Language
noremap <leader >Sl :set spelllang=
2019-01-31 09:41:03 +01:00
2021-01-08 01:26:27 +01:00
" CheckSpell Next
noremap <leader >Sn ]s
2019-01-31 09:41:03 +01:00
2021-01-08 01:26:27 +01:00
" CheckSpell Next and correct
noremap <leader >SN ]s1z=
2019-01-31 09:41:03 +01:00
2021-01-08 01:26:27 +01:00
" CheckSpell Previous
noremap <leader >Sp [s
2019-01-31 09:41:03 +01:00
2021-01-08 01:26:27 +01:00
" CheckSpell Previous and correct
noremap <leader >SP [s1z=
2019-01-31 09:41:03 +01:00
2021-01-08 01:26:27 +01:00
" CheckSpell Add to dictionnary
noremap <leader >Sa zg
2019-12-16 11:38:48 +01:00
#+end_src
2019-01-31 09:41:03 +01:00
2022-05-13 16:35:09 +02:00
** TODO Make
2019-12-16 11:38:48 +01:00
#+begin_src vimrc
2021-01-08 01:26:27 +01:00
" Make Make
nnoremap <leader >mm :Make -B<CR >
2019-01-31 09:41:03 +01:00
2021-01-08 01:26:27 +01:00
" Make Clean
nnoremap <leader >mc :Make clean<CR >
2019-01-31 09:41:03 +01:00
2021-01-08 01:26:27 +01:00
" Make Force
nnoremap <leader >mf :Make! -B<CR >
2019-01-31 09:41:03 +01:00
2021-01-08 01:26:27 +01:00
" Make Run
nnoremap <leader >mr :Make! run<cr >
2019-01-31 09:41:03 +01:00
2021-01-08 01:26:27 +01:00
" Make Open
nnoremap <leader >mo :make! open<cr >
2019-12-16 11:38:48 +01:00
#+end_src
2019-01-31 09:41:03 +01:00
** Search
2019-12-16 11:38:48 +01:00
#+begin_src vimrc
2022-05-13 16:35:09 +02:00
nnoremap <leader >s <cmd >Telescope live_grep<cr >
2019-12-16 11:38:48 +01:00
#+end_src
2019-01-31 09:41:03 +01:00
2020-03-22 23:21:26 +01:00
** GIT
2019-12-16 11:38:48 +01:00
#+begin_src vimrc
2022-05-13 16:35:09 +02:00
nnoremap <silent ><leader >g :Neogit<cr >
2019-12-16 11:38:48 +01:00
#+end_src
2019-01-31 09:41:03 +01:00
2022-05-13 16:35:09 +02:00
** TODO Errors
2019-12-16 11:38:48 +01:00
#+begin_src vimrc
2021-01-08 01:26:27 +01:00
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 >
" Error Open
nnoremap <silent ><leader >eo :lopen<CR >
" Error Close
nnoremap <silent ><leader >ec :lclose<CR >
" Error Next
nnoremap <silent ><leader >en :lnext<CR >
" Error Previous
nnoremap <silent ><leader >ep :lprevious<CR >
2019-12-16 11:38:48 +01:00
#+end_src
2019-01-31 09:41:03 +01:00
** Text
2019-12-16 11:38:48 +01:00
#+begin_src vimrc
2021-01-08 01:26:27 +01:00
" Start interactive EasyAlign in visual mode (e.g. vipga) and for a motion
xmap <leader >xa <Plug >(EasyAlign)
nmap <leader >xa <Plug >(EasyAlign)
2019-01-31 09:41:03 +01:00
2021-01-08 01:26:27 +01:00
" Indent all file
nnoremap <leader >x= mzgg=G`z
2019-01-31 09:41:03 +01:00
2021-01-08 01:26:27 +01:00
" 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 >"
2019-01-31 09:41:03 +01:00
2021-01-08 01:26:27 +01:00
" Multiple Cursor
nnoremap <leader >xm *``cgn
vnoremap <expr > <leader >xm g:mc . "``cgn"
2019-01-31 09:41:03 +01:00
2021-01-08 01:26:27 +01:00
" Multiple Cursor - reserve direction
nnoremap <leader >xM *``cgN
vnoremap <expr > <leader >xM g:mc . "``cgN"
2019-01-31 09:41:03 +01:00
2021-01-08 01:26:27 +01:00
" Delete trainling Whitespaces
fun! TrimWhitespace()
let l:save = winsaveview()
keeppatterns %s/\s\+$/ /e
call winrestview(l:save)
endfun
nnoremap <leader >xt :call TrimWhitespace()<CR >
2019-12-16 11:38:48 +01:00
#+end_src
2019-01-31 09:41:03 +01:00
** Config
2019-12-16 11:38:48 +01:00
#+begin_src vimrc
2021-01-08 01:26:27 +01:00
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 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 >
" Reload vim config
noremap <Leader >cr :source $MYVIMRC<CR >
" Edit vim config
noremap <Leader >ce :e $MYVIMRC<CR >
" Disable highlight
noremap <silent > <leader >c<CR > :noh<CR >
" Theme
noremap <silent > <leader >ct :noh<CR >
2019-12-16 11:38:48 +01:00
#+end_src