9.8 KiB
Vim
Vim Configuration
Config file location
- on Windows : ~/AppData/Local/nvim/init.vim
- on Linux : ~/.config/nvim/init.vim
Basic Settings
General
" Vim Configuration
set nocompatible "move using arrow key
"filtype plugin on
set number
set ai "auto indent
set si "smart indent
set cindent " c style indent
set shiftwidth=4 "shift order 4step
set tabstop=4 "tab order 4step
set hlsearch "highlight empathize the word.
set history=1000 "history store depth
set nobackup "no generate swp file
set noswapfile
set nowritebackup
set backupdir=~/.backup/
set directory=~/.backup/
set ruler "display the cursor position
set title "display the title
set showmatch "display the matched bracket
"set nowrap "no auto linefeed
set wmnu "auto word finder
set autochdir " auto change working directory
set hidden "buffer hidden
set updatetime=300 " 300ms
set cmdheight=2 " Better display for messages
set shortmess+=c " don't give [ins-completion-menu] messages.
set signcolumn=yes " always show signcolumns
set backspace=indent,eol,start
set fencs=ucs-bom,utf-8,cp949
set clipboard^=unnamed,unnamedplus
set mouse=a
여기서 clipboard 문제가 발생할 수 있다. Windows계열에서는 쉽게 "+y "+p" 로 clipboard를 통한 복사 붙여넣기가 가능하며,
리눅스의 경우는 xclip을 이용하여 사용하는것이 편했다.
리눅스는 Ctrl+C/V로 관리 되는 + 레지스터와 Selection으로 관리되는 마우스 중간버튼의 * 레지스터가 따로 관리되는 듯하니 VIM레지스터 + 와 * 을 잘 확인해 봐야한다.
Plugin List
" PluginManager in vimrc
runtime plugList.vim
call plug#begin('~/.vim/plugged')
Suda
기존의 VIM에는 읽기 권한으로 파일을 열고 다음과 같은 커맨드로 sudo write가 가능했는데 Neovim에서는 불가능한 상황이다. (아마 비밀번호를 입력못했던걸로.)
:w !sudo tee %
Neovim에서는 플러그인으로 문제를 해결한다.
SudaRead 와 SudaWrite 를 활용한다.
Plug 'lambdalisue/suda.vim'
Clolor Scheme
"""""""""""""""""""""""""""""""""""""""""""""""""""
" Colorscheme
"""""""""""""""""""""""""""""""""""""""""""""""""""
"""""""""""""" One Dark
"colorscheme onedark
"""""""""""""" Grub_box
"let g:gruvbox_contrast_dark='soft'
"set background=dark
"colorscheme gruvbox
"let g:airline_theme='gruvbox'
"""""""""""""" Paper Color
"set background=light
"colorscheme PaperColor
"let g:airline_theme='hybrid'
"let g:PaperColor_Theme_Options = {
" \ 'theme': {
" \ 'default.light': {
" \ 'transparent_background': 1
" \ }
" \ }
" \ }
"""""""""""""" Molokai
"let g:molokai_original = 1
"colorscheme molokai
"""""""""""""" Solarized 8
"set background=light
"colorscheme solarized8_high
"let g:airline_theme='solarized8'
"""""""""""""" Challenger Deep
"colorscheme challenger_deep
colorscheme palenight
PluginManager
" color scheme
"Plug 'morhetz/gruvbox'
"Plug 'lifepillar/vim-solarized8'
"Plug 'NLKNguyen/papercolor-theme'
"Plug 'tomasr/molokai'
"Plug 'joshdick/onedark.vim'
"Plug 'challenger-deep-theme/vim', { 'as': 'challenger-deep' }
Plug 'drewtempelmeyer/palenight.vim'
Airline
VIM의 위아래에 Tab바와 같은것을 만들어 준다.
"""""""""""""""""""""""""""""""""""""""""""""""""""
" Air-line
"""""""""""""""""""""""""""""""""""""""""""""""""""
let g:airline#extensions#tabline#enabled = 1 " turn on buffer list
set laststatus=2 " turn on bottom bar
PluginManager
Plug 'vim-airline/vim-airline'
Plug 'vim-airline/vim-airline-themes'
NerdTree
예전에는 Nerdtree를 F3 Keybinding하여 Explorer와 같이 띄워 사용하였다.
""""""""""""""""""""""""""""""""""""""""""""""""""
" NERDTREE
""""""""""""""""""""""""""""""""""""""""""""""""""
"map <F3> :NERDTreeToggle<cr>
PluginManager
"Plug 'scrooloose/nerdtree'
현재는 순정으로 netrw 플러그인이 있기때문에 :Ex 커맨드와 :R 를 이용하여 사용한다.
VIM은 :Rx 였던걸로?
Unimpaired
그냥 버퍼이동 쉽게하려고 :bnext :bprev 대신에 이 플러그인에 바인딩된 [b ]b 를 사용한다.
PluginManager
Plug 'tpope/vim-unimpaired'
Commentary
Comment 쉽게 toggle, 키는 gcc 나 Visual로 라인선택 후 gc 사용한다.
PluginManager
Plug 'tpope/vim-commentary'
Git-fugitive
:Git commit 과 같은 명령어 사용 가능해짐.
PluginManager
Plug 'tpope/vim-fugitive' " git wrapper
Git-Gutter
변경점들을 하이라이트 해서 보여줌. <F4> 키로 하이라이트 토글 가능.
""""""""""""""""""""""""""""""""""""""""""""""""""
" Git Gutter
""""""""""""""""""""""""""""""""""""""""""""""""""
let g:gitgutter_highlight_lines = 1
map <F4> :GitGutterLineHighlightsToggle<cr>
PluginManager
Plug 'airblade/vim-gitgutter' " git modified view;
Surround
Visual로 선택하고 S} S] S) S" 와 같은 커맨드로 괄호 치기 가능.
사실 Verilog 쓰는입장에서는 잘 안쓰게됨.
PluginManager
Plug 'tpope/vim-surround'
Easy Motion
커서를 빠르게 이동함. \w 커맨드를 치면 워드단위로 하이라이트 되어 손쉽게 이동가능
""""""""""""""""""""""""""""""""""""""""""""""""""
" easymotion
""""""""""""""""""""""""""""""""""""""""""""""""""
" <Leader>f{char} to move to {char}
"map <Leader>f <Plug>(easymotion-bd-f)
"nmap <Leader>f <Plug>(easymotion-overwin-f)
" s{char}{char} to move to {char}{char}
nmap <Leader>s <Plug>(easymotion-overwin-f2)
" Move to line
"map <Leader>L <Plug>(easymotion-bd-jk)
"nmap <Leader>L <Plug>(easymotion-overwin-line)
" Move to word
map <Leader>w <Plug>(easymotion-bd-w)
nmap <Leader>w <Plug>(easymotion-overwin-w)
PluginManager
Plug 'easymotion/vim-easymotion'
COC(HDL-Checker가 시원찮음. 제거)
Language Server Protocol 연동가능해짐.
Configuration은 :CocConfig를 쳐서 수정하거나 아래와 같은 경로에 파일을 위치시키면됨.
- Windows는 ~/AppData/local/nvim/coc-settings.json
- Linux는 ~/.config/nvim/coc-settings.json
Configuration (hdlChecker는 윈도우에서 잘 동작안하는것 같음.)
Config 수정후 :CocInstall 을 통해 설치해야 적용됨.
{
"languageserver": {
"hdlChecker": {
"command": "hdl_checker",
"args": [
"--lsp"
],
"rootPatterns": [".git/"],
"filetypes": [
"vhdl",
"verilog",
"systemverilog"
],
"trace.server": "verbose"
},
"clangd": {
"command": "clangd",
"args": ["--background-index"],
"rootPatterns": ["compile_flags.txt", "compile_commands.json", ".vim/", ".git/", ".hg/"],
"filetypes": ["c", "cpp", "objc", "objcpp"]
},
"rust": {
"command": "ra_lsp_server",
"filetypes": ["rust"],
"rootPatterns": ["Cargo.toml"]
}
}
}
PluginManager
"Plug 'neoclide/coc.nvim', {'branch': 'release'}
Others
call plug#end()
Keybinding
Vim의 Yank가 아닌 클립보드 복사를 위해 Ctrl+C Ctrl+N 으로 설정하였다. VIM의 Visual Mode 단축키와 Tmux의 Prefix를 피하고자 N을 사용하였다.
또한 Neovim에서 제공하는 터미을 사용하기 위한 단축키 <F12> 와 레지스터 a를 매크로로 자주 활용하기 때문에 바인딩하여 활용성올 높였다.
map <C-c> "+ygv"*y
map <C-n> "+p
map <F12> :cd %:p:h<cr>:term bash<cr>
map <F7> @a
Others
""""""""""""""""""""""""""""""""""""""""""""""""""
" Visual-star (Search using * / in visual modde)
""""""""""""""""""""""""""""""""""""""""""""""""""
xnoremap * :<C-u>call <SID>VSetSearch('/')<CR>/<C-R>=@/<CR><CR>
xnoremap # :<C-u>call <SID>VSetSearch('?')<CR>?<C-R>=@/<CR><CR>
function! s:VSetSearch(cmdtype)
let temp = @s
norm! gv"sy
let @/ = '\V' . substitute(escape(@s, a:cmdtype.'\'), '\n', '\\n', 'g')
let @s = temp
endfunction
PluginManager
설치
Unix
sh -c 'curl -fLo "${XDG_DATA_HOME:-$HOME/.local/share}"/nvim/site/autoload/plug.vim --create-dirs \
https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim'
Windows
iwr -useb https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim |`
ni "$(@($env:XDG_DATA_HOME, $env:LOCALAPPDATA)[$null -eq $env:XDG_DATA_HOME])/nvim-data/site/autoload/plug.vim" -Force