반응형

 

작성일: 2024년 5월 8일

 

 

설치 작업을 시작하기 전에...

주의 - macOS에 기본 제공되는 VIM을 사용하는 경우 -> Homebrew로 재설치

모든 경우에 해당되는지 모르겠지만, 내 경우 macOS에 기본 제공되는 vim editor를 사용했더니

아래처럼 vim editor 화면에 E319 에러가 떴다.

VIM E319 Error

 

VIM E319 Error

 

아래와 같은 해결 방식이 정석인지는 모르겠지만, 내 경우에는 문제없이 vim과 vim-go 등 vim plugin들이 잘 동작했다.

따라서 macOS를 사용하는 사용자라면, Homebrew를 통해서 vim을 재설치하는 것을 추천한다.

 

$ brew remove vim
$ brew cleanup
$ brew install vim

 

그리고 macOS에 설치된 기본 vim editor보다 homebrew를 통해 설치된 vim editor의 실행 순서를 앞 당기기위 해서 아래와 같이 .zshrc 파일에 2줄을 추가한다.

 

$ cat ~/.zshrc
... 중간 생략 ...
alias vi=/opt/homebrew/Cellar/vim/9.1.0350/bin/vim
alias vim=/opt/homebrew/Cellar/vim/9.1.0350/bin/vim
... 중간 생략 ...

 

 

주의 - vim 버전 확인

$ brew info vim

 

만약, vim 8.0 이상이 아닌 경우라면 vim을 최신 버전으로 재설치

$ brew unlink vim
$ brew uninstall vim
$ brew install vim

 

 


 

 

 

공식 문서를 한번쯤 읽어주는 예절...  (Official Documents)

 

fatih/vimgo 공식 문서 열기

 

 


 

vim-plug 설치

vim-plug는 vim에서 사용할 수 있는 plugin manager로써 plugin을 설치하고 사용할 수 있게 해준다.

$ curl -fLo ~/.vim/autoload/plug.vim \
--create-dirs \
https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim

 

vim-go 및 기타 plugin 설치

${HOME}/.vimrc 파일에 설치할 plugin을 정의한다.

$ vi ~/.vimrc

... 중간 생략 ...

" ------------------------------------------
" vim-go 설정
" -----------------------------------------
filetype plugin indent on

" vim-Plug Plugin List
call plug#begin('~/.vim/plugged')

" 자동완성을 해주는 Plugin.
" :CoCInstall coc-<lang> 으로 지원되는 Language 설치가 가능
" NOTE: 내 경우는 아래 neoclide/coc.nvim을 설치하지 않았다.
"       왜냐하면, 나는 node.js를 사용하지 않기 때문.
" Plug 'neoclide/coc.nvim', {'branch': 'release'}

" 많이 사용되는 plugin list
Plug 'majutsushi/tagbar'
Plug 'vim-airline/vim-airline'
Plug 'tpope/vim-fugitive'

" vim-go 사용을 위한 Plugin
Plug 'fatih/vim-go', { 'do': ':GoUpdateBinaries' }

" 자동 완성 Plugin 이다.
Plug 'SirVer/ultisnips'
Plug 'maralla/completor.vim'

" Misc utilities
Plug 'milkypostman/vim-togglelist'
Plug 'AndrewRadev/splitjoin.vim'
Plug 'mhinz/vim-startify'

" preview plugin
Plug 'junegunn/fzf', { 'dir': '~/.fzf', 'do': './install --all' } " fzf 사용시 꼭 설치;  ~/.fzf 에서 ./install --all 실행해야 함.
Plug 'junegunn/fzf.vim'

" Initialize plugin system
call plug#end()

... 중간 생략 ...

 

 

${HOME}/.vimrc 파일을 저장하고, 아래와 vim 편집기를 실행 후 vim 내부 명령을 수행한다.

$ vim 

... 중간 생략 ...

:PlugInstall

 

수십 초 정도 시간이 흐르면서 plugin을 설치할 것이다. (시간이 많이 걸리니까 다른 일을 하면서 신경을 끄는게 좋다)

vim plugins 설치 화면

 

 

 

 

vim-go 관련 설정 (개인 취향에 따라 설정 값 정하기)

아래 vim-go 관련 설정은 개인 취향에 따라 값을 정하면 된다.

 

$ vim ~/.vimrc

... 중간 생략 ...

" -------------------------------------------------------
" NOTE: *.go 파일을 저장할 때 Auto formatting하고, 
"       관련 go package를 자동으로 .go 소스 코드 파일에 추가해준다.
let g:go_fmt_command = "goimports"
let g:go_list_type = "quickfix"
let g:go_addtags_transform = "camelcase"

let g:go_autodetect_gopath = 1
let g:go_highlight_types = 1
let g:go_highlight_fields = 1
let g:go_highlight_functions = 1
let g:go_highlight_function_calls = 1
let g:go_highlight_extra_types = 1
let g:go_highlight_generate_tags = 1
let g:go_highlight_operators = 1
let g:go_auto_type_info = 1
let g:go_auto_sameids = 1

" NOTE: 문서를 Popup window 형태로 보여주기 (:GoDoc 명령)
let g:go_doc_popup_window = 1 

" NOTE: go source code 작성할 때, 실시간으로 자동 완성할 추천 문장을 보여줌.
let g:completor_filetype_map = {}
let g:completor_filetype_map.go = {'ft': 'lsp', 'cmd': 'gopls - remote=auto'}

" NOTE: quickfix 이동 및 open/close
nnoremap <C-n> :cnext<CR>
nnoremap <C-p> :cprevious<CR>
nnoremap <LocalLeader>q :call ToggleQuickfixList()<CR>

" NOTE: Coverage toggle
nnoremap <LocalLeader>c :GoCoverageToggle<CR>

" NOTE: Go 프로그램을 build, run, test하는 명령에 대한 설정
autocmd FileType go nnoremap <Tab>b :GoBuild<CR>
autocmd FileType go nnoremap <Tab>r :GoRun<CR>
autocmd FileType go nnoremap <Tab><Tab>r :GoRun %<CR>

autocmd FileType go nnoremap <Tab>t :GoTest<CR>
autocmd FileType go nnoremap <Tab><Tab>t :GoTestFunc<CR>
autocmd FileType go nnoremap <Tab>c :GoCoverageToggle<CR>
" -------------------------------------------------------

... 중간 생략 ...

 

 

vim-go 및 관련 plugin 설치 완료

 

 

간단하게 vim-go 동작 유무 확인하기

 

아래와 같이 새 파일 my-main.go 를 편집해보다.

$ vim  my-main.go

 

아래와 같이 기본 소스 코드 틀이 만들어진 .go 파일이 자동으로 생긴다.

vim-go가 자동으로 만들어준 새 소스 코드 파일

 

 

 

 

vim-go 사용법

 

 

많은 분이 잘 정리했으니까, 아래 문서를 보는 것을 추천!

 

A 문서 링크 열기

 

B 문서 링크 열기

 

 

 

 

 


 

반응형
작성일: 2024년 4월 12일

 

 

Jinja 파일(*.j2)과 YAML 파일(*.yml *.yaml)을 VIM으로 편집할 때

문서 내용이 적절한 Syntax Color로 보여지지 않는다면, 아래 절차를 따라서 VIM 편집기를 설정해보자.

 

 

Pathogen 설치하기

## 관련 폴더를 미리 만든다.
$ mkdir -p ~/.vim/autoload ~/.vim/bundle 

## pathogen.vim 파일을 다운로드한다.
$ curl -LSso ~/.vim/autoload/pathogen.vim https://tpo.pe/pathogen.vim

## ~/.vimrc 파일에 아래의 내용을 추가한다.
$ cat ~/.vimrc
... 중간 생략 ...
execute pathogen#infect()
syntax on
filetype plugin indent on
... 중간 생략 ...

 

 

VIM Bundle 추가하기

$ cd ~/.vim/bundle

## Ansible, YAML 관련 번들 파일을 다운로드
$ git clone https://github.com/chase/vim-ansible-yaml.git

## Jinja 관련 번들 파일을 다운로드
$ git clone https://github.com/lepture/vim-jinja.git

 

 

테스트하기

$ vim test.j2

 

Jinja 파일 하이라이트 기능

 

 


 

반응형

 

vi 또는 vim editor를 사용하다보면, 한글이 아래와 같이 이상하게 나오는 경우가 있다.

 

vim editor 한글 깨짐 현상

 

 

이럴 때는 .vimrc 파일에 아래와 같이 2줄을 추가해준다.

 

set encoding=utf-8
set fileencodings=utf-8,euc-kr,cp949

 

 

.vimrc 파일을 저장하고 닫은 다음에 다시 vi 편집기로 한글을 작성해보면, 아래처럼 한글이 깨지지 않고 잘 보인다.

 

vim editor 한글 깨짐 해결

 

반응형

VIM 편집기를 사용할 때, .vimrc 파일을 잘 작성하면 IDE만큼 편하게 쓸 수 있다.

각 항목을 잘 이해하고 .vimrc 파일을 설정하면 좋겠지만, 귀찮으면 그냥 아래 내용을 copy & paste하면 된다. :D

 

"
" Filename: .vimrc
"

syntax on

color koehler
set expandtab   " tab character를 whitespace로 자동 변환

set tags=./tags,/root/tags

set fileencodings=utf8,euc-kr
set smartcase   " 대문자가 검색어 문자열에 포함될 때에는 noignorecase
set ignorecase  " 검색시 대소문자 무시
set hlsearch    " 검색시 하이라이트(색상 강조)
set incsearch   " 검색 키워드 입력시 한 글자 입력할 때마다 점진 검색

set ruler       " 현재 커서 위치 (row, col) 좌표 출력
set noerrorbells    " 에러 알림음 끄기

set bs=indent,eol,start " backspace 키 사용 가능
set background=dark  " 검정배경을 사용할 때, (이 색상에 맞춰 문법 하이라이트 색상이 달라짐.)

set wmnu            " tab 자동완성시 가능한 목록을 보여줌
set shiftwidth=4    " shift를 4칸으로 ( >, >>, <, << 등의 명령어)
set tabstop=4       " tab을 4칸으로
"set tabstop=4 softtabstop=4 shiftwidth=4

set noimd       " no imdisable 한글 입력기 관련

set ai              " autoindent 자동 들여쓰기
set smartindent     " 자동 들여쓰기 "
set cindent         " C언어 자동 들여쓰기
set laststatus=2    " 상태바를 언제나 표시할 것
set sm              " 매치되는 괄호 표시 (= showmatch)
set history=1000    " vi 편집기록 기억갯수 .viminfo에 기록



" 마지막으로 수정된 곳에 커서를 위치함
au BufReadPost *
\ if line("'\"") > 0 && line("'\"") <= line("$") |
\ exe "norm g`\"" |
\ endif


au BufNewFile,BufReadPost *.c,*.h set cindent
au BufNewFile,BufReadPost *.cpp,*.cc source $VIM/syntax/cpp.vim
au BufNewFile,BufReadPost *.cpp,*.cc set cindent
au BufNewFile,BufReadPost *.go source $HOME/Git/shell_config/go.vim
au BufNewFile,BufReadPost *.tex source $VIM/syntax/tex.vim
au BufNewFile,BufReadPost *.tex set autoindent
au BufNewFile,BufReadPost *.java source $VIM/syntax/java.vim
au BufNewFile,BufReadPost *.java set cindent
au BufNewFile,BufReadPost *.html,*.htm source $VIM/syntax/html.vim
au BufNewFile,BufReadPost *.html,*.htm set smartindent


" Move tab for multiple files open
nnoremap <TAB> <C-W>w
nnoremap <S-TAB> <C-W>W

" vim-commentary
map gc <Plug>Commentary
nmap gcc <Plug>CommentaryLine

imap ,for for (idx = 0; idx < ; idx++) {<ENTER>}
imap ,if if () {<ENTER>}<ESC>kf(a
imap ,wh while () {<ENTER>}<ESC>kf(a
imap ,pr printf("%s %s(%d) \n", __func__, __FILE__, __LINE__);

ab _a@  #if 0 /* I would not use the following code */ <CR>#else<CR>#endif


" ctrl-j 로 라인을 분리.
nnoremap <NL> i<CR><ESC>

" copy , paste , select 기능 보완 -------------------------------
noremap <Space>y    "+y
nnoremap <Space>p   "+p
nnoremap <Space>a   gg<S-v>G

" navigation 기능 보완 ---------------------------------
nnoremap <Space>h ^
nnoremap <Space>l $
noremap <Space>j 8j
noremap <Space>k 8k


ab _el      MYLOG_ERR("%s:: \n", __func__);
ab _sl      MYLOG_SVC("%s::success\n", __func__);
ab _dl      MYLOG_DBG("%s:: \n", __func__);

+ Recent posts