woonizzooni

Windows10 환경에서 vim 환경 설정 본문

MISC

Windows10 환경에서 vim 환경 설정

woonizzooni 2019. 9. 17. 13:44

 

** MacOS / Linux 환경에서 환경 구성하는 것이 더 수월하고 더 많은 기능활용에 유리함 **

 

bash, zsh 등 cli 쉘 사용이 빈번한 Mac / Linux등과 달리

Windows환경에서는 컴파일 환경, 빌드 환경 별 전용(?) GUI 빌드 툴 실행이 보편적이니

적당선(?)의 환경 구성만 해두자.

 

o Vim 다운로드 & 설치

[공식]

공식 download 페이지 : https://www.vim.org/download.php

   - Windows 64bit용은 배포되지 않는다. (The 32-bit version of Vim runs fine on 64-bit windows. There was a 64-bit binary, but it wasn't used much and maintenance stopped.)

   - executable파일과 Runtime files를 다운받아 동일 디렉토리에 위치 시키면 된다.

 

 

[Nightly]

Vim Installer and Archives (Win32 and Win64) : https://github.com/vim/vim-win32-installer

 - 이 곳에 연동 가능한 인터프리터 목록이 작성되어 있는데(perl, python2, python3 등),

    자신이 사용하는 vim의 arch와 인터프리터의 arch가 같아야 함을 알고 있어야 하겠다.

   "Make sure that you install the same architecture (32bit/64bit) for those libraries that matches your Vim installation."

 - 아래와 같은 'nightly' 버전을 설치해봐도 된다.

 

 

o 실행 환경 조성

본인이 사용하고자 하는 플러그인 사용에 인터프리터 사용이 요구될 수 있다.

python2, python3등은 설치해두자.

 

git client : git 실행파일이 PATH에 잡혀 있어야 함.

 

 

o vim colorscheme

"colorscheme torte
"colorscheme jellybeans
colorscheme gruvbox (https://github.com/morhetz/gruvbox)
"color solarized

 

 

o 플러그인 매니저

git client가 설치되어 있는 상태에서 진행.

 

Plug : https://github.com/junegunn/vim-plug

plug.vim파일을 (https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim)
아래 경로에 다운로드 함.
%USERPROFILE%\vimfiles\autoload\plug.vim


%USERPROFILE%\.vimrc 파일 생성 후 아래와 같이 설정
  ..
  call plug#begin('~/.vim/plugged')
  "ex) 사용 희망 플러그인 구성
  Plug 'junegunn/vim-easy-align'
  Plug 'junegunn/fzf', { 'dir': '~/.fzf', 'do': './install --all' }
  call plug#end(
  ..

vim실행 후 (or .vimrc reload후) 아래 명령 실행
:PlugInstall
===> %USERPROFILE%\.vim\plugged\ 폴더에 사용 설정한 플러그인들이 git clone진행됨.

 

Vundle : https://github.com/VundleVim/Vundle.vim

Vundle.vim이 %USERPROFILE% 밑 다음과 같은 경로에 다운로드.
git clone https://github.com/VundleVim/Vundle.vim.git \
    %USERPROFILE%\.vim\bundle\Vundle.vim


%USERPROFILE%\.vimrc 파일 생성 후 아래와 같이 설정
  ...
  set nocompatible              " be iMproved, required
  filetype off                  " required

  set rtp+=~/.vim/bundle/Vundle.vim
  call vundle#begin()
  Plugin 'VundleVim/Vundle.vim'
  "ex) 사용 희망 플러그인 구성
  Plugin 'tpope/vim-fugitive'
  Plugin 'git://git.wincent.com/command-t.git'
  Plugin 'file:///home/gmarik/path/to/plugin'
  Plugin 'rstacruz/sparkup', {'rtp': 'vim/'}
  call vundle#end()            " required
  filetype plugin indent on    " required
  ...


vim실행 후 (or .vimrc reload후) 아래 명령 실행
:PluginInstall
===> %USERPROFILE%\.vim\bundle\ 폴더에 사용 설정한 플러그인들이 git clone됨

 

Dein : https://github.com/Shougo/dein.vim

minpac : https://github.com/k-takata/minpac/

Pathogen : https://github.com/tpope/vim-pathogen

NeoBundle : https://github.com/Shougo/neobundle.vim

VAM : https://github.com/MarcWeber/vim-addon-manager

 

o 플러그인 목록

call plug#begin('~/.vim/plugged') 

Plug 'junegunn/vim-easy-align' 
"Plug 'junegunn/fzf', { 'dir': '~/.fzf', 'do': './install --all' } 
Plug 'junegunn/fzf.vim' 
Plug 'scrooloose/nerdtree' 
Plug 'scrooloose/nerdcommenter' 
Plug 'vim-airline/vim-airline' 
Plug 'vim-airline/vim-airline-themes' 
Plug 'terryma/vim-multiple-cursors' 
Plug 'tpope/vim-surround' 

call plug#end()

 

vim-airline/vim-airline (https://github.com/vim-airline/vim-airline)

vim-airline/vim-airline-themes (https://github.com/vim-airline/vim-airline-themes)

--> 수려한 UI외에도, 버퍼 목록 탭 표시 편의로 선택.

let g:airline#extensions#tabline#enabled = 1          " 버퍼 목록 켜기
let g:airline#extensions#tabline#fnamemod = ':t'     " 파일명만 출력
let g:airline_theme='hybrid

 

scrooloose/nerdtree (https://github.com/scrooloose/nerdtree)

F2로 NERDTreeFind

리더키 + n으로 트리창 토글

let NERDTreeShowLineNumbers=1

autocmd StdinReadPre * let s:std_in=1
autocmd VimEnter * if argc() == 1 && isdirectory(argv()[0]) && !exists("s:std_in") | exe 'NERDTree' argv()[0] | wincmd p | ene | endif
nnoremap <F2>  :NERDTreeFind <CR>
nnoremap <Leader> n :NERDTreeToggle<CR>


scrooloose/nerdcommenter (
https://github.com/scrooloose/nerdcommenter)

영역선택 & 리더키 + cc

영역 선택 & 리더키 + c + space

let g:NERDSpaceDelims = 1
let g:NERDCompactSexyComs = 1
let g:NERDDefaultAlign = 'left'
let g:NERDAltDelims_java = 1
"let g:NERDCustomDelimiters = { 'c': { 'left': '/**','right': '*/' } }
let g:NERDCustomDelimiters = { 'c': { 'left': '//','right': '' } }
let g:NERDCommentEmptyLines = 1
let g:NERDTrimTrailingWhitespace = 1

map <Leader>cc <plug>NERDComToggleComment
map <Leader>c<space> <plug>NERDComCommen

 

fzf-vim (https://github.com/junegunn/fzf.vim)
  - fzf 설치(https://github.com/junegunn/fzf)

    이 글을 참고해서 chocolatecy를 설치.

    choco install fzf

    where fzf

  - ag 설치 (https://github.com/ggreer/the_silver_searcher)
    choco install ag

    where ag

  - rg 설치 (https://github.com/BurntSushi/ripgrep)

    choco install ripgrep

    where rg

  - find는 msys(이 글 참고)의 C:\msys64\usr\bin\find.exe를 사용 예정

    where find

call plug#begin('~/.vim/plugged')

Plug 'junegunn/fzf', { 'dir': '~/.fzf', 'do': './install --all' }
Plug 'junegunn/fzf.vim'

call plug#end()
......
Global options 예제 참고해서
let g:fzf_action = {
  \ 'ctrl-t': 'tab split',
  \ 'ctrl-x': 'split',
  \ 'ctrl-v': 'vsplit' 
let g:fzf_layout = { 'down': '~35%' }


예제로 안내된 내용 중 아래 5개 정도 설정. (기타 응용은 각자...)

" Select buffer (단축키 leader키 + Enter키) - :bp, :bn등이 아닌 ,(본인리더키) + enter & ctrl + j or k로 지정 선택 편의
" Simple MRU Search : Filtered v:oldfiles ... (:FZFMru 입력 + enter & ctrl + j or k로 목록 선택)
" Search Lines in all open buffers (:FZLines 입력 + enter & 검색원하는 문자 입력하면 버퍼 목록 내용에서 검색됨)

" Narrow ag results within vim (:Ag 검색어 입력 + enter & 결과에서 항목 선택 (방식 상동)
" Fuzzy search files in parent directory of current file (:FZFNeigh 입력 + enter & 방식 상동)

 

vim-easy-align (https://github.com/junegunn/vim-easy-align)

nmap ga <Plug>(EasyAlign)
xmap ga <Plug>(EasyAlign

 

terryma/vim-multiple-cursors (https://github.com/terryma/vim-multiple-cursors)

영역선택 (ex. vip or ctrl+v) & ctrl + n : 선택 영역에 멀티커서 위치됨. 이후 동시편집

ctrl + v로 특정 캐릭터(ex. 쉼표) 선택 + 'ctrl + n'으로 추가 선택 (반복)

원하는 단어 앞 부분에 커서 위치 & g + ctrl + n 으로 단어 선택 후 ctrl + n으로 추가 & 편집
  ** 한번 ESC누르면 단어 > 커서로 변경됨 > 한번 더 눌러야 취소

p, x, esc등 아래 참고

let g:multi_cursor_use_default_mapping=0
let g:multi_cursor_start_word_key = '<C-n>'
let g:multi_cursor_select_all_word_key = '<A-n>'
let g:multi_cursor_start_key = 'g<C-n>'
let g:multi_cursor_select_all_key = 'g<A-n>'
let g:multi_cursor_next_key='<C-n>'
let g:multi_cursor_prev_key='<C-p>'
let g:multi_cursor_skip_key='<C-x>'
let g:multi_cursor_quit_key='<ESC>'

tpope/vim-surround (https://github.com/tpope/vim-surround)

이건 차차 필요하면 보기로... 나야 뭐 s + regexp가 워낙 익숙하니까...

 

terryma/vim-smooth-scroll (https://github.com/terryma/vim-smooth-scroll)

 

 

o 단축키 (일부)

 

Windows용 gvim의 경우 mswin.vim파일을 source로 사용시 ctrl + c/v/x/f 등의  키조합에서 어색한(?) 상황이 생겼다.

 

gui모드와 cli모드간의 충돌(?)로 인한 어색함일 듯 한데 나름 이것도 장점이 있어 보여서 일단 써보자.

(예: 영역 선택시 ctrl+c로 복사 ctrl+v로 붙여넣기,

  i(nsert)모드 & ctrl+v로 붙여넣기 등, 마우스 우측 클릭 다이얼로그 창 등)

 

 

C-F, C-V, C-Y정도만 기존 vim 명령으로 해두자.

source $VIMRUNTIME/mswin.vim
unmap <C-Y>
unmap <C-F>
cunmap <C-F>
unmap <C-V>
iunmap <C-V>
vunmap <C-V>

 

기타 : c(ommand-line)모드에서의 이력 확인 단축키.

q: == : + "ctrl + f" 
q/ == / + "ctrl + f"

 

insert모드에서 ctrl + p 혹은 ctrl + n : 자동 완성 목록 선택 창 (vim기본 제공 기능)

 

visual모드에서 영역 선택 후 zf : fold만들기

zo : fold펼치기

zR : 전체 펼치기

 

zc : fold 접기

zM : 모든 fold 닫기

zE : 모든 fold 제거

 

 

:bn (다음 버퍼 열기 : 다음 파일 탭 이동으로 보임)

:bp (이전 버펴 열기 : 이전 파일 탭 이동으로 보임)

--> fzf-vim의 '리더키 + enter' 로 버퍼 선택 더 편하게.

:list : 버퍼 목록 확인

:b 버퍼번호

:bd! : 편집중 닫을 때

 

ctrl + w + v = :vs : 화면 세로로 나누기

:sp : 화면 가로로 나누기

ctrl + w + n = 화면 위쪽 split윈도우 빈 버퍼 

 

leader 키를 ,로 설정해둔상태.

 

, + s + o : vimrc 리로드

, + n : nerdtree 토글

, + 

 

split 윈도우간 이동 단축키, 그외 기타 등록

 

 

 

 

 

 

[참고]

Using command-line history : https://vim.fandom.com/wiki/Using_command-line_history

Mapping keys in Vim : https://vim.fandom.com/wiki/Mapping_keys_in_Vim_-_Tutorial_(Part_1)

VimAwesome : https://vimawesome.com/

 fzf.vim examples   : https://github.com/junegunn/fzf/wiki/Examples-(vim)

vimcolors : http://vimcolors.com/

 

Comments