Vim
개요
가장 널리 사용되는 Vi clone 중 하나
자체 스크립트 언어를 지원하여 다양한 플러그인이 개발되어 있음
관련 링크
공식 홈페이지: http://www.vim.org/
플러그인 스크립트: http://www.vim.org/scripts/
Windows 용 최신 설치 패키지: https://tuxproject.de/projects/vim/
Vim Awesome (플러그인 랭킹 및 정보 제공): https://vimawesome.com/
Wikia Vim Tips 페이지: http://vim.wikia.com/
Vim과 관련한 다양한 팁과 정보를 제공함
특히 첫 페이지의 "Did you know?" 란에 알찬 정보가 많이 게재됨.
유용한 Tips
편집 모드 상태에서 클립보드 내용을 붙여 넣기 (register 응용)
<C-R> + 사용.
Ctrl-R 키를 누른 후 + 키를 누르는 것으로, 이 방식은 ex 명령줄에서도 동일하게 사용 가능.
'+' 키가 시스템 클립보드를 가리키는 레지스터임
y나 d 명령으로 복사한 내용은 default register(")로 들어가므로 <C-R> " 사용하여 붙여 넣기 가능
모든 register 내용은 ex 명령 :reg 로 가능
참고 LINK:
Macro 활용법
매크로 기록: q <letter> <기록할 일들...> q
매크로 실행: <number> @ <letter>
매크로 내용 편집창에 붙여 넣기는 " <letter> p 명령으로 가능
매크로 내용 설정 파일 저장하려면 .vimrc 또는 _vimrc 파일을 열어 아래 형식으로 입력하면 됨
let @<letter> = '<C-R> <letter>'
참고 LINK:
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 자동 완성과 같은 형태의 지원은 되지 않음.
C++ 코드 자동 완성
항상 참조하게 되는 C/C++ 소스나 헤더 파일 등에 대해 미리 tags를 만들어 두고 이것을 기반으로 현재 편집 중인 소스 코드 내에서 함수나 변수 등에 대한 자동 완성을 지원해주는 기능.
OmniCppComplete 플러그인 설치 필요. 아래 유용한 Plugins 참고.
설정 방법은 내용이 많아 여기서 더 이상의 자세한 설명은 생략한다. 아래 참고 LINK를...
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 고속 코딩을 위한 플러그인.
설치 및 사용에 대한 설명: https://github.com/mattn/emmet-vim
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에도 사용할 수 있음. 개인적으로 좋아하는 테마.