2021-08-06 14:57:00 +09:00

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에서는 플러그인으로 문제를 해결한다. SudaReadSudaWrite 를 활용한다.

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