Skip to main content

터미널을 더 예쁘게 볼까?

Neovim 설치

먼저 neovim을 설치합니다.

neovim 설치
brew install neovim

쉘 단축키 적용

저는 zsh를 사용하므로 ~/.zshrc 파일에 단축키 설정을 하였습니다.

Bash

단축키 적용
vi ~/.bash_profile
alias vim=”nvim”
alias vi=”nvim”
alias vimdiff=”nvim -d”
source ~/.bash_profile

zsh

단축키 적용
vi ~/.zshrc
alias vim=”nvim”
alias vi=”nvim”
alias vimdiff=”nvim -d”
source ~/.zshrc

아래 구조로 폴더를 생성합니다.

폴더 생성
- 📁 .config
- 📁 nvim
- 📁 autoload


mkdir -p .config/nvim && cd .config/nvim
mkdir autoload && cd autoload

plug.vim을 다운로드 받습니다.

plug.vim 생성
- 📁 .config
- 📁 nvim
- 📄 init.vim
- 📁 autoload
- 📄 plug.vim


curl [https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim](https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim) -o plug.vim
cd ~/.config/nvim
nvim init.vim

아래 vim 파일은 기본적인 플러그인만 작성되어 있습니다. 제가 사용하는 플러그인과 설정 내용을 사용하신다면 아래 "나의 vim 플러그인 설정" 파일을 참고해주세요.

~/.config/nvim/init.vim 파일에 아래와 같이 작성합니다.

~/.config/nvim/init.vim

set nocompatible
filetype off

call plug#begin('~/.config/nvim/plugged')
Plug 'preservim/tagbar'
Plug 'vim-airline/vim-airline'
Plug 'vim-airline/vim-airline-themes'
Plug 'Shirk/vim-gas'
Plug 'morhetz/gruvbox'
Plug 'tpope/vim-fugitive'
Plug 'preservim/nerdtree'
Plug 'ctrlpvim/ctrlp.vim'
Plug 'neoclide/coc.nvim', {'branch': 'release'}
Plug 'folke/tokyonight.nvim', { 'branch': 'main' }
Plug 'nvim-treesitter/nvim-treesitter', {'do': ':TSUpdate'}
Plug 'fatih/vim-go', { 'do': ':GoInstallBinaries' }
call plug#end()

아래 명령을 실행할 경우 플러그인이 설치됩니다.

플러그인 설치
source init.vim
:PlugInstall # vim 플러그인 설치
상단에 플러그인을 설치하셨다면 nvim에 plugged 폴더가 생성됩니다.
- 📁 .config
- 📁 nvim
- 📄 init.vim
- 📁 autoload
- 📄 plug.vim
- 📁 plugged
- 📁 coc.nvim
- 📁 ctrlp.vim
- 📁 gruvbox
- 📁 nerdtree
- 📁 nvim-treesitter
- 📁 tagbar
- 📁 tokyonight.nvim
- 📁 vim-airline
- 📁 vim-airline-themes
- 📁 vim-fugitive
- 📁 vim-gas
- 📁 vim-go
- 📁 vim-plug
vim-go 플러그인, Go 개발을 위해 필요한 바이너리 툴 설치
:GoInstallBinaries
neoclide/coc.nvim 플러그인 node.js 설치
curl -sL install-node.now.sh/lts | sudo $SHELL

나의 vim 플러그인 설정

각 플러그인에 대한 설정값을 입력하여 입맛에 맞게 UI 환경을 구성합니다. 아래 내용은 제가 사용하고 있는 설정입니다.
set nocompatible
filetype off

call plug#begin('~/.config/nvim/plugged')
Plug 'preservim/tagbar'
Plug 'vim-airline/vim-airline'
Plug 'vim-airline/vim-airline-themes'
Plug 'Shirk/vim-gas'
Plug 'morhetz/gruvbox'
Plug 'tpope/vim-fugitive'
Plug 'preservim/nerdtree'
Plug 'ctrlpvim/ctrlp.vim'
Plug 'neoclide/coc.nvim', {'branch': 'release'}
Plug 'folke/tokyonight.nvim', {'branch': 'main'}
Plug 'nvim-treesitter/nvim-treesitter', {'do': ':TSUpdate'}
Plug 'fatih/vim-go', {'do': ':GoInstallBinaries'}
Plug 'AndrewRadev/splitjoin.vim'
Plug 'junegunn/vim-plug'
Plug 'neoclide/coc.nvim', {'branch': 'release'}
Plug 'SirVer/ultisnips'
Plug 'jiangmiao/auto-pairs'
Plug 'davidhalter/jedi-vim'
Plug 'nvie/vim-flake8'
Plug 'dense-analysis/ale'
Plug 'ryanoasis/vim-devicons'
Plug 'plasticboy/vim-markdown'
Plug 'hashivim/vim-terraform'
Plug 'hashivim/vim-vagrant'
Plug 'stephpy/vim-yaml'
Plug 'jvirtanen/vim-hcl'
call plug#end()


filetype plugin on
set encoding=utf-8
set number
set showmatch
set path+=**
set hlsearch
set clipboard=unnamedplus
set mouse=a
set termguicolors
set viewoptions-=options
set autowrite

if has('nvim') " nvim 을 사용 중이라면
set inccommand=nosplit " nvim live %s substitute (실시간 강조)
endif

" =========================================================================
" = python3, go exec settings
" =========================================================================
" F9 파이썬 코드 실행하기
"autocmd FileType python map <buffer> <F9> :w<CR>:exec '!python3' shellescape(@%, 1)<CR>
"autocmd BufRead,BufNewFile *.py nnoremap <F5> :exec '!python' shellescape(@%, 1)<cr>

" (ctrl + shift + p) autocomplete :! python3
"map <C-S-p> :!python3<Space>
autocmd FileType python map <C-S-p> :w<CR>:exec '!python3' shellescape(@%, 1)<CR>
autocmd FileType go map <C-S-p> :w<CR>:exec ':GoRun'<CR>
autocmd FileType go map <C-S-l> :w<CR>:exec ':GoTest'<CR>
autocmd FileType go map <C-S-k> :w<CR>:exec ':GoTestFunc'<CR>
autocmd FileType go map <C-S> :w<CR>:exec ':w'<CR>


" =========================================================================
" = UltiSnipsExpandTrigger settings
" =========================================================================
let g:UltiSnipsExpandTrigger = "<tab>"
let g:UltiSnipsJumpForwardTrigger = "<tab>"
let g:UltiSnipsJumpBackwardTrigger = "<s-tab>"


" =========================================================================
" = NERDTreeToggle settings
" =========================================================================
nnoremap <silent><C-\> :NERDTreeToggle<CR><bar>:TagbarToggle <CR>
if has("syntax")
syntax on
endif

let g:NERDTreeWinSize=30

" =========================================================================
" = theme settings
" =========================================================================
let g:lightline = {'colorscheme': 'tokyonight'}
let g:tokyonight_style = "night"
let g:tokyonight_italic_functions = 1
let g:tokyonight_sidebars = [ "qf", "vista_kind", "terminal", "packer" ]
let g:tokyonight_colors = {
\ 'hint': 'orange',
\ 'error': '#f7768e'
\}
let g:tagbar_position = 'rightbelow'
let g:airline_powerline_fonts = 1
let g:airline#extensions#tabline#show_tabs = 1
colorscheme tokyonight
highlight ColorColumn guibg=White


" =========================================================================
" = vim-go settings
" =========================================================================
set updatetime=100
let g:go_list_type="quickfix"
let g:go_highlight_fields=1
let g:go_highlight_functions=1
let g:go_highlight_function_calls=1
let g:go_highlight_operators=1
let g:go_highlight_extra_types=1
let g:go_highlight_build_constraints=1
let g:go_highlight_generate_tags=1
let g:go_highlight_types=1
let g:go_metalinter_enabled = ['vet', 'golint', 'errcheck']
let g:go_metalinter_autosave_enabled=1
let g:go_def_mode='godef'
let g:go_auto_type_info=1
let g:go_auto_sameids=1
let g:go_fmt_command = "goimports"


autocmd Filetype go command! -bang A call go#alternate#Switch(<bang>0, 'edit')
autocmd Filetype go command! -bang AV call go#alternate#Switch(<bang>0, 'vsplit')
autocmd Filetype go command! -bang AS call go#alternate#Switch(<bang>0, 'split')
autocmd Filetype go command! -bang AT call go#alternate#Switch(<bang>0, 'tabe')
autocmd FileType go nmap <Leader>c <Plug>(go-coverage-toggle):
autocmd FileType go nmap <Leader>i <Plug>(go-info)
autocmd FileType go nmap <leader>b <Plug>(go-build)
autocmd FileType go nmap <leader>r <Plug>(go-run)
autocmd FileType go nmap <leader>t <Plug>(go-test)
autocmd FileType go nmap <leader>b :<C-u>call <SID>build_go_files()<CR>
autocmd BufNewFile, BufRead *.go setlocal noexpandtab tabstop=4 shiftwidth=4


" run :GoBuild or :GoTestCompile based on the go file
function! s:build_go_files()
let l:file = expand('%')
if l:file =~# '^\f\+_test\.go$'
call go#test#Test(0, 1)
elseif l:file =~# '^\f\+\.go$'
call go#cmd#Build(0)
endif
endfunction

아래 깃허브 링크에서도 확인하실 수 있습니다.


Go 언어 설정하기

Go 언어 설치
brew install go
gvm 설치
bash < <(curl -s -S -L https://raw.githubusercontent.com/moovweb/gvm/master/binscripts/gvm-installer)
~/.zshrc 적용
[[ -s "$HOME/.gvm/scripts/gvm" ]] && source "$HOME/.gvm/scripts/gvm"
gvm 및 go 버전 확인
gvm list
gvm use system --default
gvm list all
gvm install go1.18.4
go version
GoPath 변경하기 위해서는 배쉬 설정파일에 원하는 디렉토리 경로를 설정합니다.
export GOROOT=/usr/local/go
export GOPATH=$HOME/dev/go_work
👨🏻‍💻 Trouble Shooting

go 버전이 다를 경우 아래와 같은 에러가 발생할 수 있습니다.

.go 파일 오픈시 하단 에러 발생
vim-go: could not find 'gotags'. Run :GoInstallBinaries to fix it
vim-go: could not find 'gopls'. Run :GoInstallBinaries to fix it
vim-go: could not find 'gopls'. Run :GoInstallBinaries to fix it
vim-go: could not find 'gopls'. Run :GoInstallBinaries to fix it
vim-go: could not find 'gopls'. Run :GoInstallBinaries to fix it

문제 해결

~/.config/nvim/init.vim 파일 열고 :GoInstallBinaries 실행

아래 링크는 vim-go 또는 vim을 사용하는 데 참고자료로 활용할 수 있는 링크이며 특히 vim으로 go 언어를 개발한다면 fn + tab과 같은 단축키로 fmt.Println("")을 생성할 수 있습니다. 이런 단축 기능은 개발할 때 매우 유용하게 사용하실 수 있습니다. fn 외에도 다른 단축키들은 아래 vim-go 단축키 링크에서 확인하실 수 있습니다.

참고로 vim에서 자동완성 기능은 <C-p> 또는 <C-n>으로 사용 가능합니다.