dotconfs/.config/nvim/init.vim
2018-08-02 13:48:23 +02:00

275 lines
8.5 KiB
VimL

call plug#begin('~/.config/nvim/plugged')
" Plugins {
" ctrl-p is a fuzzy file finder.
Plug 'kien/ctrlp.vim'
" airline is a better status line and a tab-bar for nvim.
Plug 'bling/vim-airline'
" gruvbox colorscheme. Seems to work the best for me.
Plug 'morhetz/gruvbox'
" neomake is a code linting tool that runs in the background.
Plug 'neomake/neomake'
"autocompletion Plugin for Code autocomplete
Plug 'zchee/deoplete-jedi'
" Left side File Tree
"Plug 'scrooloose/nerdtree'
" install with nvim +PlugInstall +qall
" update with nvim +PlugUpgrade +PlugUpdate +PlugClean +qall
" you can also update it in nvim with syntax autocompletion and stuff - simply
" call PlugUpdate as an example
" }
call plug#end()
" Map the leader key to ,
let mapleader="\<SPACE>"
" General {
set noautoindent " I indent my code myself.
set nocindent " I indent my code myself.
"set smartindent " Or I let the smartindent take care of it.
set breakindent " Indent line-breaks at the same level as code.
set ttimeoutlen=100
set fileencoding=utf-8
set fileencodings=utf-8,gbk,chinese,cp936,gb18030,utf-16le,utf-16,big5,euc-jp,euc-kr,latin-1
" }
" Search {
set ignorecase " Make searching case insensitive
set smartcase " ... unless the query has capital letters.
set gdefault " Use 'g' flag by default with :s/foo/bar/.
" Use <C-L> to clear the highlighting of :set hlsearch.
if maparg('<C-L>', 'n') ==# ''
nnoremap <silent> <C-L> :nohlsearch<CR><C-L>
endif
" }
" Spellcorrection {
setlocal spell spelllang=en_us
"setlocal spell spelllang=de_20
map <F7> :setlocal spell spelllang=de_20 <return>
map <F8> :setlocal spell spelllang=en_us <return>
map <F9> :w!<CR>:!aspell check %<CR>:e! %<CR>
" Formatting {
set showmatch " Show matching brackets.
set number " Show the line numbers on the left side.
set formatoptions+=o " Continue comment marker in new lines.
set expandtab " Insert spaces when TAB is pressed.
set tabstop=4 " Render TABs using this many spaces.
set shiftwidth=4 " Indentation amount for < and > commands.
set nojoinspaces " Prevents inserting two spaces after punctuation on a join (J)
" More natural splits
set splitbelow " Horizontal split below current.
set splitright " Vertical split to right of current.
if !&scrolloff
set scrolloff=3 " Show next 3 lines while scrolling.
endif
if !&sidescrolloff
set sidescrolloff=5 " Show next 5 columns while side-scrolling.
endif
set nostartofline " Do not jump to first character with page commands.
" Tell Vim which characters to show for expanded TABs,
" trailing whitespace, and end-of-lines. VERY useful!
if &listchars ==# 'eol:$'
set listchars=tab:>\ ,trail:-,extends:>,precedes:<,nbsp:+
endif
set list " Show problematic characters.
" }
" Configuration {
set autochdir " Switch to current file's parent directory.
" Remove special characters for filename
set isfname-=:
set isfname-==
set isfname-=+
" Map ; to :
nnoremap ; :
" Path/file expansion in colon-mode.
set wildmode=list:longest
" Allow color schemes to do bright colors without forcing bold.
if &t_Co == 8 && $TERM !~# '^linux'
set t_Co=16
endif
" Remove trailing spaces.
function! TrimWhitespace()
let l:save = winsaveview()
%s/\s\+$//e
call winrestview(l:save)
endfunction
" FIXME: Do not call this on makefile and sv files.
autocmd BufWritePre * call TrimWhitespace()
nnoremap <leader>W :call TrimWhitespace()<CR>
" Diff options
set diffopt+=iwhite
"Enter to go to EOF and backspace to go to start
"nnoremap <CR> G
"nnoremap <BS> gg
" Stop cursor from jumping over wrapped lines
nnoremap j gj
nnoremap k gk
" Make HOME and END behave like shell
"inoremap <C-E> <End>
"inoremap <C-A> <Home>
" }
" UI Options {
" Colorscheme options.
set bg=dark
colorscheme gruvbox
" Also highlight all tabs and trailing whitespace characters.
highlight ExtraWhitespace ctermbg=darkgreen guibg=darkgreen
match ExtraWhitespace /\s\+$\|\t/
" Relative numbering
function! NumberToggle()
if(&relativenumber == 1)
set nornu
set number
else
set rnu
endif
endfunc
" Toggle between normal and relative numbering.
nnoremap <leader>r :call NumberToggle()<cr>
" Opaque Background (Comment out to use terminal's profile)
"set termguicolors
" Transparent Background (For i3 and compton)
"highlight Normal guibg=NONE ctermbg=NONE
"highlight LineNr guibg=NONE ctermbg=NONE
" }
" Keybindings {
" Save file
nnoremap <Leader>w :w<CR>
" Copy and paste from system clipboard (Might require xsel/xclip install)
vmap <Leader>y "+y
vmap <Leader>d "+d
nmap <Leader>p "+p
nmap <Leader>P "+P
vmap <Leader>p "+p
vmap <Leader>P "+P
" Move between buffers
nmap <Leader>h :bprevious<CR>
" Switch between Buffers
map <C-j> <C-w>j<C-w>_
map <C-k> <C-w>k<C-w>_
map <C-h> <C-w>h<C-w>_
map <C-l> <C-w>l<C-w>_
" Switch between tabs
map <A-h> :tabprevious<CR>
map <A-l> :tabnext<CR>
" Go to tab by number
noremap <A-1> 1gt
noremap <A-2> 2gt
noremap <A-3> 3gt
noremap <A-4> 4gt
noremap <A-5> 5gt
noremap <A-6> 6gt
noremap <A-7> 7gt
noremap <A-8> 8gt
noremap <A-9> 9gt
noremap <A-0> :tablast<cr>
" Open init.vim
map <silent> <leader>ee :e $HOME/.config/nvim/init.vim<cr>
" Open a File in new Tab
map <silent> <leader>t :tabnew
" }
" Experimental {
" Search and Replace
nmap <Leader>s :%s//g<Left><Left>
" write files as root (if you've forgotten to open it as root
" simply do :W instead of :w
command W :execute ':silent w !sudo tee % > /dev/null' | :edit!
" }
" Plugin Settings {
" Airline {
let g:airline#extensions#tabline#enabled = 1
let g:airline#extensions#tabline#buffer_idx_mode = 1
let g:airline#extensions#tabline#fnamemod = ':t'
let g:airline#extensions#tabline#left_sep = ''
let g:airline#extensions#tabline#left_alt_sep = ''
let g:airline#extensions#tabline#right_sep = ''
let g:airline#extensions#tabline#right_alt_sep = ''
let g:airline_left_sep = ''
let g:airline_left_alt_sep = ''
let g:airline_right_sep = ''
let g:airline_right_alt_sep = ''
let g:airline_theme= 'gruvbox'
" }
" CtrlP {
" Open file menu
nnoremap <Leader>o :CtrlP<CR>
" Open buffer menu
nnoremap <Leader>b :CtrlPBuffer<CR>
" Open most recently used files
nnoremap <Leader>f :CtrlPMRUFiles<CR>
" }
" neomake {
autocmd! BufWritePost * Neomake
nnoremap <Leader>l :lopen<CR>
" }
" netrw {
let g:netrw_liststyle=3 " tree (change to 0 for thin)
let g:netrw_banner=0 " no banner
let g:netrw_altv=1 " open files on right
let g:netrw_winsize=25 " only use 20% screen for netrw
" FIXME: Preview opens to left and is very narrow
let g:netrw_preview=1 " open previews vertically
let g:netrw_browse_split =3 " open files in new Tab
nmap <Leader>n :Vexplore<CR>
" }
" }
" Filetype-Specific Configurations {
" HTML, XML, Jinja
autocmd FileType html setlocal shiftwidth=2 tabstop=2 softtabstop=2
autocmd FileType css setlocal shiftwidth=2 tabstop=2 softtabstop=2
autocmd FileType xml setlocal shiftwidth=2 tabstop=2 softtabstop=2
autocmd FileType htmldjango setlocal shiftwidth=2 tabstop=2 softtabstop=2
autocmd FileType htmldjango inoremap {{ {{ }}<left><left><left>
autocmd FileType htmldjango inoremap {% {% %}<left><left><left>
autocmd FileType htmldjango inoremap {# {# #}<left><left><left>
" }
" Markdown and Journal {
autocmd FileType markdown setlocal shiftwidth=2 tabstop=2 softtabstop=2
autocmd FileType journal setlocal shiftwidth=2 tabstop=2 softtabstop=2
" }
" Trim Whitespaces {
function! TrimWhitespace()
let l:save = winsaveview()
%s/\\\@<!\s\+$//e
call winrestview(l:save)
endfunction
" }
" vim:set ft=vim sw=4 ts=4: