본문 바로가기
컴퓨터 이야기/우분투

[팁] vi 설정하기

by 노땅엔진니어 2022. 12. 28.

vi(Visual editor)는 1976년도에 UNIX 운영체제에서 사용하기 위한 오픈 소스 문서 편집기 입니다. 아직도 터미널에서 간단한 편집을 할 때 가장 많이 사용하는 편집기 입니다. 리눅스에서는 vi에 추가적 확장 기능을 추가한 vim(vi improved)을 주로 사용을 합니다. 요즘에는 우분투에서도 프로그래밍을 할 때 vim보다는 Microsoft사의 Visual Studio Code를 사용하지만 터미널로 연결 했을 때에는 어쩔 수 없이 vim을 사용하게 됩니다.

vim은 많은 플러그인(plug-in)을 지원하며 추가 패키지(package)를 설치하면 매우 유용 합니다. 먼저 다음과 같이 vim과 필수 패키지를 설치 합니다.

$ sudo apt install vim
$ sudo apt install exuberant-ctags cmake curl

다음은 잘 작성된 vim plug를 다운로드(download) 합니다.

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

위의 plug.vim 파일이 다운로드 되었으면 다음과 같이 vi로 .vimrc 파일을 생성 합니다.

$ vi ~/.vimrc

아래 내용을 복사하여 .vimrc 파일에 붙여넣기를 한 후에 저장을 합니다.

if has("syntax")
       syntax on
endif

set bg=dark
colorscheme gruvbox
highlight Normal ctermbg=black ctermfg=white          " 백그라운드의 안개낀 현상을 제거하여 더 선명 함

" =======================================================================================
set fileencodings=utf-8
set termencoding=utf-8
set encoding=utf-8

set nocompatible                " 오리지날 vi 호환하지 않음
set number                      " 줄번호
set hlsearch                    " 검색어 하이라이팅
set autoindent                  " 자동 들여쓰기
set scrolloff=2                 " scroll offset(최소 2줄 이하로는 자동 스크롤 : 개발 시 아랫줄 코드 확인 시 필요)
set wildmode=longest,list       " tab 사용시 자동완성 리스트 출력
set ts=4                        " tag select
set sts=4                       " st select
set sw=1                        " 스크롤바 너비
set autowrite                   " 다른 파일로 넘어갈 때 자동 저장
set bs=eol,start,indent         " 줄의 끝,시작,들여쓰기 지점에서 백스페이스로 이전줄과 연결됨 허용
set history=500                 " vim editor 에서 명령어 기록을 남길 갯수(vim 명령줄에서 Ctrl+p/n 으로 찾기)
set laststatus=2                " 상태바 표시 항상
set shiftwidth=3                " 자동 들여쓰기 너비 설정
set showmatch                   " 일치하는 괄호 하이라이팅
set softtabstop=3               " tab size
set tabstop=3                   " tab size
set ruler                       " 현재 커서 위치 표시
set paste                       " 붙여넣기 시 계단현상 없애기 default 값 지정(!= set nopaste)
set noexpandtab                 " tab 을 space로 확장하지 않음(!= set expandtab)
set autowrite                   " 다른 파일로 넘어갈 때 자동 저장
set smartindent
set expandtab
set mouse=a
" =======================================================================================

" 검색 시 대소문자 on/off
function! IgnoreCase()
  if(&ignorecase == 0)
       set ignorecase
  else
    set noignorecase
  endif
endfunc
nnoremap ,ic :call IgnoreCase()<cr>

" number 상대성 on/off
function! RelativeNumber()
  if(&relativenumber == 1)
    set norelativenumber
  else
    set relativenumber
  endif
endfunc
nnoremap ,rn :call RelativeNumber()<cr>

" 붙여넣기 시 autoindent 에 의한 계단현상 on/off(개발환경에서 autoindent 가 필요 함)
function! Paste()
  if(&paste == 0)
    set paste
  else
    set nopaste
  endif
endfunc
nnoremap ,pt :call Paste()<cr>

filetype off                  " required

" Specify a directory for plugins
" - For Neovim: stdpath('data') . '/plugged'
" - Avoid using standard Vim directory names like 'plugin'
call plug#begin('~/.vim/plugged')

" Make sure you use single quotes
" Shorthand notation; fetches https://github.com/junegunn/vim-easy-align
Plug 'junegunn/vim-easy-align'

"" Side tab(File Tree)
Plug 'scrooloose/nerdtree'
Plug 'scrooloose/nerdcommenter'
Plug 'jistr/vim-nerdtree-tabs'

"" 파일 찾기
Plug 'junegunn/fzf', { 'dir': '~/.fzf', 'do': './install --all' }
Plug 'junegunn/fzf.vim'

" tags area
Plug 'majutsushi/tagbar'

" colors-scheme
Plug 'morhetz/gruvbox'

" Initialize plugin system
call plug#end()

filetype plugin indent on     " required

let mapleader=','             " mapleader 를 [,]로 설정. default 는 [\]

"" fzf
nmap <F2> :Files<Cr>

"" scrooloose/NERDtree
nmap <F3> :NERDTreeToggle<CR>
let NERDTreeShowHidden=1

" toggle tagbar display
nmap <F4> :TagbarToggle<CR>

위 내용으로 .vimrc 파일을 저장한 후에 vi 명령창에서 다음과 같이 실행을 합니다.

:PlugInstall

vim은 필요한 플러그인(plug-in)을 설치 합니다. 플러그인 중에 gruvbox 플러그인은 패스가 맞지 않아 vi를 종료 한 후에 터미널 창에서 수동으로 복사를 하면 마무리가 됩니다.

$ cp -pr ~/.vim/plugged/gruvbox/colors ~/.vim/

 

댓글