" c: Automatically break comments using the textwidth value.
" r: Automatically insert the comment leader when hitting <Enter> in insert mode.
" o: Automatically insert the comment leader when hitting 'o' or 'O' in normal mode.
" n: Recognize numbered lists. When hitting <Enter> in insert mode.
" m: Automatically break the current line before inserting a new comment line.
set formatoptions+=cronm

" This sets the width of a tab character to 4 spaces.
set tabstop=4

" This sets the number of spaces used when the <Tab> key is pressed in insert
" mode to 4.
set softtabstop=4

" This sets the number of spaces used for each indentation level when using
" the '>' and '<' commands, as well as the autoindent feature.
set shiftwidth=4

" This setting enables automatic indentation, which will copy the indentation
" of the current line when starting a new line.
set autoindent
set smartindent

" This disables the automatic conversion of tabs to spaces when you press the
" <Tab> key.
set expandtab
set smarttab

" Save 1,000 items in history
set history=1000

" Show the line and column number of the cursor position
set ruler

" Display the incomplete commands in the bottom right-hand side of your screen.  
set showcmd

" Display completion matches on your status line
set wildmenu

" Show a few lines of context around the cursor
set scrolloff=5

" Highlight search matches
set hlsearch

" Enable incremental searching
set incsearch

" Ignore case when searching
set ignorecase

" Override the 'ignorecase' option if the search pattern contains upper case characters.
set smartcase

" This enables the use of the mouse in all modes (normal, visual, insert,
" command-line, etc.).
set mouse=a

" This displays line numbers in the left margin.
set number

" This disables the creation of backup files.
set nobackup

set hidden


" This disables the creation of swap files.
set noswapfile

" Automatically reload files when they change
set autoread

" Enable spell checking
set spell
set spelllang=en

" Highlight the current line
set cursorline

" Highlight the 100th column
set colorcolumn=100

" Set text width to 100
set textwidth=100

" This maps the '<' and '>' keys in visual mode to shift the selected text one
" shift width to the left or right and reselect the shifted text.
vnoremap < <gv
vnoremap > >gv

" The next four lines define key mappings for switching between windows using
" Ctrl + hjkl keys
nmap <silent> <c-k> :wincmd k<CR>
nmap <silent> <c-j> :wincmd j<CR>
nmap <silent> <c-h> :wincmd h<CR>
nmap <silent> <c-l> :wincmd l<CR>

" The next four lines define key mappings for resizing windows using Alt +
" hjkl keys:
map <a-l> :vertical res -5<CR>
map <a-h> :vertical res +5<CR>
map <a-j> :res -5<CR>
map <a-k> :res +5<CR>

" These lines define key mappings for moving the cursor 10 spaces at a time
" using Shift + arrow keys:
nmap <S-l> 10l<CR>
nmap <S-h> 10h<CR>
nmap <S-j> 10j<CR>
nmap <S-k> 10k<CR>

" Enable folding
set foldenable
" Configure fold method
set foldmethod=marker
" Set the fold level to start with all folds open
set foldlevelstart=99
" Set the fold nesting level (default is 20)
set foldnestmax=10
" Automatically close folds when the cursor leaves them
set foldclose=all
" Open folds upon all motion events
set foldopen=all





" To install vim-plug
let data_dir = has('nvim') ? stdpath('data') . '/site' : '~/.vim'
if empty(glob(data_dir . '/autoload/plug.vim'))
  silent execute '!curl -fLo '.data_dir.'/autoload/plug.vim --create-dirs  https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim'
  autocmd VimEnter * PlugInstall --sync | source $MYVIMRC
endif



" To install the plugin


call plug#begin()

     Plug 'dense-analysis/ale' " linting and fixing code.
     Plug 'airblade/vim-gitgutter' " a git diff in the sign colomn.
     Plug 'habamax/vim-asciidoctor' " Feature-full environment for ASCII Docs.
     Plug 'majutsushi/tagbar'       " Utility to easily browse the tag.
     Plug 'mbbill/undotree'         " Utility to view undo history
     Plug 'morhetz/gruvbox'         " retro-inspired color scheme
     Plug 'luochen1990/rainbow'     " For rainbow coloring of Parentheses

call plug#end()


" Plugin enable option

" For rainbow coloring of Parentheses
let g:rainbow_active = 1 "set to 0 if you want to enable it later via :RainbowToggle
