# Vim Settings
## Plugin Manager - vim-plug
https://github.com/junegunn/vim-plug
Type the following command:
```bash=
curl -fLo ~/.vim/autoload/plug.vim --create-dirs https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim
```
For Windows, type the following command:
```bash=
iwr -useb https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim | ni $HOME/vimfiles/autoload/plug.vim -Force
```
Add/Create a vim-plug section to your `~/.vimrc`.
1. Begin the section with call plug#begin()
2. List the plugins with Plug commands
3. call plug#end() to update &runtimepath and initialize plugin system
- Automatically executes filetype plugin indent on and syntax enable. You can revert the settings after the call. e.g. filetype indent off, syntax off, etc.
Example
```
" Specify a directory for plugins
" - For Neovim: stdpath('data') . '/plugged'
" - Avoid using standard Vim directory names like 'plugin'
call plug#begin('~/.vim/plugged')
" Make sure you use single quotes
" Shorthand notation; fetches https://github.com/junegunn/vim-easy-align
Plug 'junegunn/vim-easy-align'
" Any valid git URL is allowed
Plug 'https://github.com/junegunn/vim-github-dashboard.git'
" Multiple Plug commands can be written in a single line using | separators
Plug 'SirVer/ultisnips' | Plug 'honza/vim-snippets'
" On-demand loading
Plug 'scrooloose/nerdtree', { 'on': 'NERDTreeToggle' }
Plug 'tpope/vim-fireplace', { 'for': 'clojure' }
" Using a non-default branch
Plug 'rdnetto/YCM-Generator', { 'branch': 'stable' }
" Using a tagged release; wildcard allowed (requires git 1.9.2 or above)
Plug 'fatih/vim-go', { 'tag': '*' }
" Plugin options
Plug 'nsf/gocode', { 'tag': 'v.20150303', 'rtp': 'vim' }
" Plugin outside ~/.vim/plugged with post-update hook
Plug 'junegunn/fzf', { 'dir': '~/.fzf', 'do': './install --all' }
" Unmanaged plugin (manually installed and updated)
Plug '~/my-prototype-plugin'
" Initialize plugin system
call plug#end()
```
Reload `.vimrc` and type `:PlugInstall` in vim to install plugins.
## NERDTree
The NERDTree is a file system explorer for the Vim editor. Using this plugin, users can visually browse complex directory hierarchies, quickly open files for reading or editing, and perform basic file system operations.
```
call plug#begin('~/.vim/plugged')
Plug 'preservim/nerdtree'
call plug#end()
" Automatic start nerdtree
autocmd VimEnter * NERDTree
" Start NERDTree and put the cursor back in the other window.
autocmd VimEnter * NERDTree | wincmd p
```
Use Ctrl + w and left/right arrow to switch between windows.
Use Ctrl + w and Ctrl + o to close the other window.
## Theme: gruvbox
```
call plug#begin('~/.vim/plugged')
Plug 'morhetz/gruvbox'
call plug#end()
" Automatic enable theme
colorscheme gruvbox
```
## Some setting
Type the following command into `~/.vimrc`
```
set tabstop=4
set shiftwidth=4
" Show Line Number
set nu
" Set Auto Indent
set ai
" Attach mouse, you can choose with mouse
" Use Ctrl+Insert to copy and Shift+Insert to paste
set mouse=a
```
## Terminal
To use terminal in vim, type `:term`.
Type the following command into `~/.vimrc`
```
set splitbelow
set termwinsize=15x0
```
## You Complete Me
https://wiki.archlinux.org/title/Vim/YouCompleteMe#Installation