Minimal .vimrc setup

" ===============================================================
" VIMRC - Setup with NERDTree, CoC, ALE, and optimized navigation
" ===============================================================

" -------------------------------
" Plugins
" -------------------------------
call plug#begin()
  Plug 'dense-analysis/ale'                        " Async linting
  Plug 'preservim/nerdtree' tes/2026-03-05-minimal-vim-script/                       " File explorer
  Plug 'tiagofumo/vim-nerdtree-syntax-highlight'   " Highlight file types in NERDTree
  Plug 'neoclide/coc.nvim', {'branch': 'release'}  " Autocomplete + IntelliSense
call plug#end()

" -------------------------------
" General settings
" -------------------------------
set nocompatible
filetype plugin indent on
syntax on
set encoding=UTF-8
set clipboard=unnamedplus
colorscheme wildcharm
if has('termguicolors')
  set termguicolors
endif

" -------------------------------
" Appearance
" -------------------------------
set number
set showcmd
set showmatch
set laststatus=2

" Status line
set statusline=%F\ %M\ %Y\ %R
set statusline+=%=
set statusline+=row:\ %l\ col:\ %c\ percent:\ %p%%

" -------------------------------
" Tabs and Indentation
" -------------------------------
set tabstop=2
set shiftwidth=2
set expandtab
set smarttab
set autoindent
set smartindent

" -------------------------------
" Searching
" -------------------------------
set incsearch
set ignorecase
set smartcase
set hlsearch
set wildmenu
set wildmode=list:longest
set wildignore=*.docx,*.jpg,*.png,*.gif,*.pdf,*.pyc,*.exe,*.flv,*.img,*.xlsx

" -------------------------------
" Buffer and Split Navigation
" -------------------------------
nnoremap <Leader>bn :bnext<CR>
nnoremap <Leader>bp :bprevious<CR>
nnoremap <Leader>bd :bdelete<CR>

nnoremap <C-h> <C-w>h
nnoremap <C-j> <C-w>j
nnoremap <C-k> <C-w>k
nnoremap <C-l> <C-w>l

" -------------------------------
" NERDTree Configuration
" -------------------------------
let NERDTreeShowHidden=1
let g:NERDTreeFileExtensionHighlightFullName = 1
let g:NERDTreeExactMatchHighlightFullName = 1
let g:NERDTreePatternMatchHighlightFullName = 1
let g:NERDTreeSyntaxEnabledExtensions = ['*']
let g:NERDTreeSyntaxHideIcons = 1

nnoremap <F2> :NERDTreeToggle<CR>
nnoremap <F3> :NERDTreeFind<CR>
autocmd VimEnter * if !argc() | NERDTree | endif

" -------------------------------
" CoC - Autocomplete / IntelliSense
" -------------------------------
inoremap <silent><expr> <Tab> pumvisible() ? "\<C-n>" : "\<Tab>"
inoremap <silent><expr> <S-Tab> pumvisible() ? "\<C-p>" : "\<S-Tab>"
inoremap <silent><expr> <C-Space> coc#refresh()
inoremap <silent><expr> <CR> pumvisible() ? coc#_select_confirm() : "\<CR>"

nnoremap <silent> [g <Plug>(coc-diagnostic-prev)
nnoremap <silent> ]g <Plug>(coc-diagnostic-next)
nnoremap <silent> gd <Plug>(coc-definition)
nnoremap <silent> gy <Plug>(coc-type-definition)
nnoremap <silent> gi <Plug>(coc-implementation)
nnoremap <silent> gr <Plug>(coc-references)

" -------------------------------
" ALE - Linting / Fixing
" -------------------------------
let g:ale_lint_on_text_changed = 'always'
let g:ale_lint_on_insert_leave = 1
let g:ale_lint_on_save = 1
let g:ale_fix_on_save = 1

" Define fixers per language
let g:ale_fixers = {
\   'javascript': ['prettier', 'eslint'],
\   'typescript': ['prettier', 'eslint'],
\   'css': ['prettier'],
\   'html': ['prettier'],
\}

" Key mappings for ALE
nnoremap <Leader>en :ALENext<CR>      " Next error
nnoremap <Leader>ep :ALEPrevious<CR>  " Previous error
nnoremap <Leader>f :ALEFix<CR>        " Fix current file

" Show ALE results in a window
nnoremap <Leader>el :ALEResults<CR>

" -------------------------------
" Auto-reload external changes
" -------------------------------
set autoread
autocmd FocusGained,BufEnter * checktime

" ===============================================================
" End of Vim configuration
" ===============================================================