mirror of
http://github.com/JaeUs3792/dotfiles
synced 2025-12-15 00:21:35 +09:00
325 lines
9.8 KiB
Org Mode
325 lines
9.8 KiB
Org Mode
#+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 <F3> :NERDTreeToggle<cr>
|
|
#+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
|
|
변경점들을 하이라이트 해서 보여줌. =<F4>= 키로 하이라이트 토글 가능.
|
|
#+begin_src shell :tangle ~/.config/nvim/init.vim :mkdirp yes
|
|
""""""""""""""""""""""""""""""""""""""""""""""""""
|
|
" Git Gutter
|
|
""""""""""""""""""""""""""""""""""""""""""""""""""
|
|
let g:gitgutter_highlight_lines = 1
|
|
map <F4> :GitGutterLineHighlightsToggle<cr>
|
|
#+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
|
|
""""""""""""""""""""""""""""""""""""""""""""""""""
|
|
" <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)
|
|
#+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에서 제공하는 터미을 사용하기 위한 단축키 =<F12>= 와 레지스터 a를 매크로로 자주 활용하기 때문에 바인딩하여 활용성올 높였다.
|
|
#+begin_src shell :tangle ~/.config/nvim/init.vim :mkdirp yes
|
|
map <C-c> "+ygv"*y
|
|
map <C-n> "+p
|
|
map <F12> :cd %:p:h<cr>:term bash<cr>
|
|
map <F7> @a
|
|
#+end_src
|
|
|
|
*** Others
|
|
#+begin_src shell :tangle ~/.config/nvim/init.vim :mkdirp yes
|
|
""""""""""""""""""""""""""""""""""""""""""""""""""
|
|
" 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
|
|
#+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
|