Vim

개요

  • 가장 널리 사용되는 Vi clone 중 하나

  • 자체 스크립트 언어를 지원하여 다양한 플러그인이 개발되어 있음

관련 링크

유용한 Tips

  • 편집 모드 상태에서 클립보드 내용을 붙여 넣기 (register 응용)

  • Macro 활용법

  • ctags를 활용한 태깅 및 소스 코드 분석

    • ctags: http://ctags.sourceforge.net/

      • ctags는 대부분의 Linux 배포판에 포함되어 있다. 만약 없다면 소스를 받아 직접 빌드해서 사용하면 됨.

      • Windows 용 바이너리는 위 공식 홈페이지에서 바로 내려 받을 수 있음.

    • taglist 플러그인을 설치해야 함. 아래 유용한 Plugins 내용 참고.

    • Google에서 "vim ctags 설정"으로 검색하면 잘 정리된 내용들이 많이 있음.

    • 단축키

      • <C-]> 현재 커서가 위치한 심볼이 정의된 위치로 이동

      • g ] 현재 커서가 위치한 심볼의 검색 결과를 목록으로 보여줌

      • g <C-]> 현재 커서가 위치한 심볼의 검색 결과가 하나이면 즉시 이동하고 그렇지 않으면 검색 결과 목록을 보여줌

      • <C-t> 이전 위치로 복귀. <C-]> 명령으로 이동한 순서의 역순으로 이동

    • ex 명령

      • :tj <심볼이름> 심볼을 검색하고 첫 번째 검색 결과 항목으로 이동

      • :sts <심볼이름> 창을 수평 분할하여 검색 결과를 보여줌

      • :tselect <심볼이름> 심볼을 검색하여 여러 개일 경우 그 목록을 보여주고 번호를 눌러서 선택이 가능함

      • :tnext 검색한 심볼이 여러 개 존재할 경우 다음 심볼의 위치로 이동

      • :tprev 검색한 심볼이 여러 개 존재할 경우 이전 심볼의 위치로 이동

      • :tfirst 검색된 가장 처음 심볼 위치로 이동

      • :tlast 검색된 가장 마지막 심볼 위치로 이동

  • 단어 자동 완성

    • 입력 모드에서 <C-N> 또는 <C-P> 키를 눌러 입력 중인 단어의 자동 완성이 가능함.

    • 파일, tags, 열려 있는 버퍼 등 다양한 내용을 기반으로 자동 완성이 가능하지만, 코딩을 위한 기능이 아니므로 함수 prototype 자동 완성과 같은 형태의 지원은 되지 않음.

    • 참고 LINK: http://vim.wikia.com/wiki/Any_word_completion

  • C++ 코드 자동 완성

    • 항상 참조하게 되는 C/C++ 소스나 헤더 파일 등에 대해 미리 tags를 만들어 두고 이것을 기반으로 현재 편집 중인 소스 코드 내에서 함수나 변수 등에 대한 자동 완성을 지원해주는 기능.

    • OmniCppComplete 플러그인 설치 필요. 아래 유용한 Plugins 참고.

    • 설정 방법은 내용이 많아 여기서 더 이상의 자세한 설명은 생략한다. 아래 참고 LINK를...

    • 참고 LINK: http://vim.wikia.com/wiki/C%2B%2B_code_completion

  • Vim / Cscope 연동

    • ctags보다 더 정밀한 소스 코드 태깅이 가능한 Cscope를 Vim과 연동하여 사용할 수 있다.

    • 단축키

      • <C-\> <질의종류> 질의종류에 따라 검색 실행

      • <C-t> 이전 위치 복귀

    • ex 명령

      • :cs find <질의종류> <심볼>

    • 질의 종류

      • 0 또는 s 이 C 심볼 찾기

      • 1 또는 g 이 정의 찾기

      • 2 또는 d 이 함수가 부르는 함수 찾기

      • 3 또는 c 이 함수를 부르는 함수 찾기

      • 4 또는 t 이 변수에 대입하는 부분 찾기

      • 6 또는 e egrep 패턴 찾기

      • 7 또는 f 이 파일 찾기

      • 8 또는 i 이 파일을 #include 하는 파일 찾기

    • 참고 LINK: http://cscope.sourceforge.net/cscope_vim_tutorial.html

  • Makefile을 이용한 빌드

    • :make Vi를 빠져 나가지 않고 바로 make 명령을 수행함. 옵션으로 target을 주는 것도 가능

    • :copen 빌드 실행 결과에서 발생한 에러 목록창을 보여줌

    • :cclose 에러 목록창을 닫음

    • :cw 에러 목록창 토글 (에러가 있을 경우만)

    • :set makeprg=<실행파일명> 빌드 시 사용할 명령을 설정. 기본값은 'make'

  • Vertical Visual Block 모드

    • <C-v> 세로 비주얼 블럭 선택 모드로 전환

    • h, j, k, l 또는 <커서키>를 이용해 블럭 범위 선택

    • 다양한 명령키 조합이 가능

      • d 선택한 블럭 삭제. 이렇게 삭제한 내용은 다시 p, P 명령으로 오려진 형태 그대로 붙여 넣기 가능.

      • <S-i> 텍스트 입력 <ESC> 선택한 블럭 앞쪽에 입력한 텍스트를 일괄 추가

유용한 Plugins

  • Vundle: Vim의 플러그을 쉽게 설치/업데이트/삭제가 가능하도록 도와주는 플러그인.

  • taglist: ctags로 생성한 tags 파일을 내용을 바탕으로 소스 코드 탐색을 도와주는 플러그인. 자세한 내용은 유용한 Tips 참고.

  • Trinity: taglist, NERDtree, SrcExpl, 세 가지를 합쳐서 Source Insight와 유사한 IDE 환경을 만들어주는 플러그인.

    • 아름답다! 그렇지만 태그 파일이 너무 크면 커서 한 번 이동하는 것도 고역이 될 것임.

    • 설치 및 사용에 대한 설명: https://github.com/wesleyche/Trinity

  • BufExplorer: 여러 개의 파일을 오가며 편집할 때 버퍼 히스토리를 관리해주고 버퍼 간 빠른 전환을 가능하게 해주는 플러그인.

  • OmniCppComplete: ctags 태깅 파일을 이용한 C++ 코드 자동 완성 지원 플러그인.

  • Emmet: 구 ZenCoding. HTML과 CSS 고속 코딩을 위한 플러그인.

  • Sokoban: Vim에서 소코반 게임을 즐길 수 있는 플러그인. 코딩하다가 잠시 머리 식히고 싶을 때 할 만함.

Color Scheme

  • Vim Colorscheme Gallery: 다양한 Color Scheme을 스크린샷으로 직접 볼 수 있고 마음에 드는 것을 클릭하면 상세 정보와 함께 그 Color Scheme을 받을 수 있는 링크를 보여줌.

    • Dark와 Light 두 가지 종류로 구분해서 보여주기 때문에 선호하는 테마를 쉽게 고를 수 있음.

    • 화면 우측 상단에 언어별 Syntax Highlighting을 선택할 수 있도록 되어 있는 것이 특징

  • vim-colorschemes: 무려 480 개가 넘는 Color Scheme을 제공하는 패키지. 다양한 설치 방법을 제공하며 Vundle을 사용한 설치 방법도 제공함.

  • 10 Vim Color Schemes You Need to Own: 엄선된 10 가지의 Color Scheme을 소개하는 페이지.

  • vim-color-solarized: Solarized 컬러 테마를 Vim에도 사용할 수 있음. 개인적으로 좋아하는 테마.

vim-color-solarized screenshot