" ~/.vim/vimrc
" usando folding(dobra) para agrupar e recolher, minimizar e maximizar, blocos
" use as teclas Z e N minúsculo para expandir, maximizar, todo o arquivo
" Z N maiúsculo recolhe, minimiza, tudo
" A definição de compatibilidade não é necessária no Debian! {{{1
set nocompatible
" Definição das cores do terminal {{{1
if has('termguicolors')
set termguicolors
endif
" Plugins {{{1
call plug#begin('~/.vim/plugged')
Plug 'joshdick/onedark.vim'
Plug 'hashivim/vim-terraform'
Plug 'pearofducks/ansible-vim'
call plug#end()
" Configurações gerais {{{1
filetype plugin indent on
syntax on
set title
set encoding=utf-8
set backspace=indent,eol,start
set noerrorbells
set confirm
set hidden
set splitbelow
set splitright
" set mouse=a " Eu não gosto!
" Caminhos {{{1
set path+=**
set noswapfile
set nobackup
set undodir=~/.vim/undodir
set undofile
" Numeração de linhas {{{1
set number
set relativenumber
set scrolloff=2
set cursorline
" Mudança do cursor {{{1
let &t_SI="\e[6 q"
let &t_EI="\e[2 q"
" Indentação {{{1
set autoindent
set smartindent
" Tabulações {{{1
set expandtab
set tabstop=2
set softtabstop=2
set shiftwidth=2
" Busca {{{1
set ignorecase
set smartcase
set incsearch
set hls
let @/ = ""
" Menu da barra de status {{{1
set wildmenu
set wildmode=longest,full
set wildoptions=pum
" Barra de status {{{1
set noshowmode
set laststatus=2
" Quebra de linha {{{1
set nowrap
set linebreak
" Folding {{{1
set foldmethod=marker
" Caracteres de preenchimento {{{1
set nolist
set listchars=tab:›-,space:·,trail:⋯,eol:↲
set fillchars=vert:│,fold:\ ,eob:~,lastline:@
set wildcharm=<c-z>
" Ortografia {{{1
set nospell
set spelllang=pt_br,en
" Menu do modo insert {{{1
set complete+=kspell
set completeopt=menuone,longest
set shortmess+=c
" Esquema de cores {{{1
set background=dark
colorscheme onedark
" Reposiciona o cursor na última linha acessada ao reabrir um arquivo {{{1
au BufReadPost * if line("'\"") > 1 && line("'\"") <= line("$") | exe "normal! g'\"" | endif
" Cores personalizadas {{{1
" Fundo transparente...
hi Normal guibg=NONE ctermbg=NONE
" Linha do cursor...
hi CursorLine guibg=#242426
" Linha de coluna...
hi ColorColumn guibg=#202130
" Comentários em itálico...
hi Comment cterm=italic gui=italic
" Divisão vertical de janelas...
hi VertSplit ctermbg=NONE guibg=NONE ctermfg=7 guifg=#2C2C2E
" Barra de abas...
hi TabLine guifg=#9192a0 guibg=#2C2C2E gui=none
hi TabLineSel guifg=#a1a2b0 guibg=NONE gui=bold
hi TabLineFill guifg=#9192a0 guibg=#2C2C2E gui=none
" Seleção (modo visual)...
hi Visual guifg=NONE guibg=#303140
" Cores das dobras (folding)...
hi Folded guibg=NONE guifg=#505160 gui=italic cterm=italic
" Barra de status personalizada {{{1
hi statusline gui=bold guibg=#98C379 guifg=#101120
hi statuslinenc gui=NONE cterm=NONE guibg=#3E4452 guifg=#B0B1C0
augroup ModeEvents
autocmd!
au InsertEnter * hi statusline guibg=#61AFEF
au InsertLeavePre * hi statusline guibg=#98C379
au ModeChanged *:[vV\x16]* hi statusline guibg=#C678DD
au Modechanged [vV\x16]*:* hi statusline guibg=#98C379
au ModeChanged *:[R]* hi statusline guibg=#EB6E6E
au ModeChanged [R]* hi statusline guibg=#98C379
augroup end
function! ActiveStatusLine()
let g:currentmode={
\ 'n' : 'Normal',
\ 'no' : 'Normal-Operator Pending',
\ 'v' : 'Visual',
\ 'V' : 'V-Line',
\ "\<C-V>" : 'V-Block',
\ 's' : 'Select',
\ 'S' : 'S-Line',
\ "\<C-S>" : 'S-Block',
\ 'i' : 'Insert',
\ 'R' : 'Replace',
\ 'Rv' : 'V-Replace',
\ 'c' : 'Command',
\ 'cv' : 'Vim Ex',
\ 'ce' : 'Ex',
\ 'r' : 'Prompt',
\ 'rm' : 'More',
\ 'r?' : 'Confirm',
\ '!' : 'Shell',
\ 't' : 'Terminal'
\}
set statusline=%0*\ %{toupper(g:currentmode[mode()])}
set statusline+=\ %1*\ [%n]\ %t%{&modified!=''?'\ \|\ +':''}
set statusline+=\ %2*%=
set statusline+=%{&ff}\ \|\ %{&fenc!=''?&fenc:&enc}
set statusline+=\ \|\ %{&filetype!=''?tolower(&filetype):'no\ ft'}
set statusline+=\ %1*\ %p%%\ %0*\ \ %l:%c\ \
hi User1 gui=NONE cterm=NONE guifg=#b0b1c0 guibg=#2C2C2E
hi User2 gui=NONE cterm=NONE guifg=#b0b1c0 guibg=#1F1F21
endfunction
call ActiveStatusLine()