#+TITLE: Vim * Vim Configuration ** Config file location - on Windows : ~/AppData/Local/nvim/init.vim - on Linux : ~/.config/nvim/init.vim ** Basic Settings *** General #+begin_src shell :tangle ~/.config/nvim/init.vim :mkdirp yes " 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 #+end_src 여기서 clipboard 문제가 발생할 수 있다. Windows계열에서는 쉽게 ="+y= ="+p"= 로 clipboard를 통한 복사 붙여넣기가 가능하며, 리눅스의 경우는 xclip을 이용하여 사용하는것이 편했다. 리눅스는 Ctrl+C/V로 관리 되는 =+= 레지스터와 Selection으로 관리되는 마우스 중간버튼의 =*= 레지스터가 따로 관리되는 듯하니 VIM레지스터 =+= 와 =*= 을 잘 확인해 봐야한다. ** Plugin List #+begin_src shell :tangle ~/.config/nvim/init.vim :mkdirp yes " PluginManager in vimrc runtime plugList.vim #+end_src #+begin_src shell :tangle ~/.config/nvim/plugList.vim :mkdirp yes call plug#begin('~/.vim/plugged') #+end_src *** Suda 기존의 VIM에는 읽기 권한으로 파일을 열고 다음과 같은 커맨드로 sudo write가 가능했는데 Neovim에서는 불가능한 상황이다. (아마 비밀번호를 입력못했던걸로.) #+begin_src shell :w !sudo tee % #+end_src Neovim에서는 플러그인으로 문제를 해결한다. =SudaRead= 와 =SudaWrite= 를 활용한다. #+begin_src shell :tangle ~/.config/nvim/plugList.vim :mkdirp yes Plug 'lambdalisue/suda.vim' #+end_src *** Clolor Scheme #+begin_src shell :tangle ~/.config/nvim/init.vim :mkdirp yes """"""""""""""""""""""""""""""""""""""""""""""""""" " 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 #+end_src PluginManager #+begin_src shell :tangle ~/.config/nvim/plugList.vim :mkdirp yes " 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' #+end_src *** Airline VIM의 위아래에 Tab바와 같은것을 만들어 준다. #+begin_src shell :tangle ~/.config/nvim/init.vim :mkdirp yes """"""""""""""""""""""""""""""""""""""""""""""""""" " Air-line """"""""""""""""""""""""""""""""""""""""""""""""""" let g:airline#extensions#tabline#enabled = 1 " turn on buffer list set laststatus=2 " turn on bottom bar #+end_src PluginManager #+begin_src shell :tangle ~/.config/nvim/plugList.vim :mkdirp yes Plug 'vim-airline/vim-airline' Plug 'vim-airline/vim-airline-themes' #+end_src *** NerdTree 예전에는 Nerdtree를 =F3= Keybinding하여 Explorer와 같이 띄워 사용하였다. #+begin_src shell :tangle ~/.config/nvim/init.vim :mkdirp yes """""""""""""""""""""""""""""""""""""""""""""""""" " NERDTREE """""""""""""""""""""""""""""""""""""""""""""""""" "map :NERDTreeToggle #+end_src PluginManager #+begin_src shell :tangle ~/.config/nvim/plugList.vim :mkdirp yes "Plug 'scrooloose/nerdtree' #+end_src 현재는 순정으로 netrw 플러그인이 있기때문에 =:Ex= 커맨드와 =:R= 를 이용하여 사용한다. VIM은 =:Rx= 였던걸로? *** Unimpaired 그냥 버퍼이동 쉽게하려고 =:bnext= =:bprev= 대신에 이 플러그인에 바인딩된 =[b= =]b= 를 사용한다. PluginManager #+begin_src shell :tangle ~/.config/nvim/plugList.vim :mkdirp yes Plug 'tpope/vim-unimpaired' #+end_src *** Commentary Comment 쉽게 toggle, 키는 =gcc= 나 Visual로 라인선택 후 =gc= 사용한다. PluginManager #+begin_src shell :tangle ~/.config/nvim/plugList.vim :mkdirp yes Plug 'tpope/vim-commentary' #+end_src *** Git-fugitive =:Git commit= 과 같은 명령어 사용 가능해짐. PluginManager #+begin_src shell :tangle ~/.config/nvim/plugList.vim :mkdirp yes Plug 'tpope/vim-fugitive' " git wrapper #+end_src *** Git-Gutter 변경점들을 하이라이트 해서 보여줌. == 키로 하이라이트 토글 가능. #+begin_src shell :tangle ~/.config/nvim/init.vim :mkdirp yes """""""""""""""""""""""""""""""""""""""""""""""""" " Git Gutter """""""""""""""""""""""""""""""""""""""""""""""""" let g:gitgutter_highlight_lines = 1 map :GitGutterLineHighlightsToggle #+end_src PluginManager #+begin_src shell :tangle ~/.config/nvim/plugList.vim :mkdirp yes Plug 'airblade/vim-gitgutter' " git modified view; #+end_src *** Surround Visual로 선택하고 =S}= =S]= =S)= =S"= 와 같은 커맨드로 괄호 치기 가능. 사실 Verilog 쓰는입장에서는 잘 안쓰게됨. PluginManager #+begin_src shell :tangle ~/.config/nvim/plugList.vim :mkdirp yes Plug 'tpope/vim-surround' #+end_src *** Easy Motion 커서를 빠르게 이동함. =\w= 커맨드를 치면 워드단위로 하이라이트 되어 손쉽게 이동가능 #+begin_src shell :tangle ~/.config/nvim/init.vim :mkdirp yes """""""""""""""""""""""""""""""""""""""""""""""""" " easymotion """""""""""""""""""""""""""""""""""""""""""""""""" " f{char} to move to {char} "map f (easymotion-bd-f) "nmap f (easymotion-overwin-f) " s{char}{char} to move to {char}{char} nmap s (easymotion-overwin-f2) " Move to line "map L (easymotion-bd-jk) "nmap L (easymotion-overwin-line) " Move to word map w (easymotion-bd-w) nmap w (easymotion-overwin-w) #+end_src PluginManager #+begin_src shell :tangle ~/.config/nvim/plugList.vim :mkdirp yes Plug 'easymotion/vim-easymotion' #+end_src *** 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= 을 통해 설치해야 적용됨. #+begin_src json { "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"] } } } #+end_src PluginManager #+begin_src shell :tangle ~/.config/nvim/plugList.vim :mkdirp yes "Plug 'neoclide/coc.nvim', {'branch': 'release'} #+end_src ** Others #+begin_src shell :tangle ~/.config/nvim/plugList.vim :mkdirp yes call plug#end() #+end_src *** Keybinding Vim의 Yank가 아닌 클립보드 복사를 위해 =Ctrl+C= =Ctrl+N= 으로 설정하였다. VIM의 Visual Mode 단축키와 Tmux의 Prefix를 피하고자 N을 사용하였다. 또한 Neovim에서 제공하는 터미을 사용하기 위한 단축키 == 와 레지스터 a를 매크로로 자주 활용하기 때문에 바인딩하여 활용성올 높였다. #+begin_src shell :tangle ~/.config/nvim/init.vim :mkdirp yes map "+ygv"*y map "+p map :cd %:p:h:term bash map @a #+end_src *** Others #+begin_src shell :tangle ~/.config/nvim/init.vim :mkdirp yes """""""""""""""""""""""""""""""""""""""""""""""""" " Visual-star (Search using * / in visual modde) """""""""""""""""""""""""""""""""""""""""""""""""" xnoremap * :call VSetSearch('/')/=@/ xnoremap # :call VSetSearch('?')?=@/ function! s:VSetSearch(cmdtype) let temp = @s norm! gv"sy let @/ = '\V' . substitute(escape(@s, a:cmdtype.'\'), '\n', '\\n', 'g') let @s = temp endfunction #+end_src * PluginManager ** 설치 *** Unix #+begin_src shell 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' #+end_src *** Windows #+begin_src shell 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 #+end_src