Vim FuzzyFinder Plugin - 파일명으로 찾아 열기 리눅스/Unix 이야기

Vim을 사용하면서 제일 짜증 나는 점은 파일 네비게이션이다.
파일 네비게이션이 별로라서 IDE로써 활용하기엔 좀 힘들다.
그나마 조금 네비게이션을 편하게 해주는 것으로 나는 NERD Tree를 사용하고 있다. 이것은 Eclipse에서 프로젝트의 파일과 디렉토리 목록을 보여주는 역할을 한다.

그런데, 내가 제일 필요로 하는 기능은 Eclipse의 Ctrl-Shift-R/Ctrl-Shift-T 단축키의 기능이다. 이 단축키를 누른뒤에 파일명을 치면 파일명에 해당 문자열을 포함하고 있는 모든 파일 목록이 순차적으로 나오고, 이름을 계속 칠 수록 매칭되는 목록이 줄어들면서 최종적으로 파일을 선택해서 열 수 있게 해준다.
또다른 특징중의 하나는 MAC 처럼 대문자를 연속으로 치면 MultiActionController.java 같은 클래스를 자동으로 찾아주기도 한다.
이러한 기능이 유명한 Mac용 에디터인 TextMate에도 있다.

특히, Ruby On Rails나 Java 처럼 디렉토리가 많아지는 프레임워크나 언어를 사용하게되면 이러한 파일명 기반의 검색이 매우 절실하다. 그래서 나는 Java 개발을 할 때거의 vim을 사용하지 않았다.

그러다가 FuzzyFinder라는 기막힌 플러그인을 찾았다. 내가 위에서 묘사한 대로, 파일명을 치면 현재 디렉토리/가장 최근에 읽었던 파일목록/현재 열려있는 버퍼 목록에서 일치하는 파일 목록을 보여주고 해당 파일을 열게 해준다.
http://photozou.jp/photo/photo_only/175590/10747828에서 이미지를 볼 수 있다.

:FuzzyFinderFile 명령을 내린후 **/파일명을 치면 현재 디렉토리 이하의 파일중에서 해당 문자열이 포함된 파일 목록이 나온다.
예를들어 **/mac 라고 치면 m, a, c 가 들어간 모든 파일명이 나온다. 여기에는 macintosh 라는 단어도 되고 MultiActionController 처럼 띄엄띄엄 일치하는 것도 해당돤다.

아래는 나의 ~/.vimrc 파일이다.
let g:FuzzyFinderOptions = { 'Base':{}, 'Buffer':{}, 'File':{}, 'Dir':{}, 'MruFile':{}, 'MruCmd':{}, 'FavFile':{}, 'Tag':{}, 'TaggedFile':{}}
" 특정 파일 제외
let g:FuzzyFinderOptions.File.excluded_path = '\v\~$|\.o$|\.exe$|\.bak$|\.swp$|\.class$|\.settings$|CVS|((^|[/\\])\.[/\\]$)'
" 대소문자 구분하기 (0 : 대소문자 구분, 1 : 대소문자 구분 안함)
let g:FuzzyFinderOptions.Base.ignore_case = 0

" 현재 디렉토리 이하에서 파일명으로 검색해서 읽어오기
map <Leader>ff <ESC>:FuzzyFinderFile \*\*\/<CR>

" 버퍼 목록에서 검색해서 이동하기
map <Leader>fb <ESC>:FuzzyFinderBuffer<CR>


여기서 나는 <Leader>ff를 누르면 자동으로 현재 디렉토리 이하의 모든 디렉토리에서 검색하도록 하였다. **/ 로 지정하지 않으면 현재 디렉토리 이하에서만 찾는다.
<Leader>fb 는 현재 열려있는 버퍼 목록에서 찾게 된다.
그리고 대소문자를 철저히 구분하도록 변경하였는데, 이렇게 한 것은 MAC 처럼 찾을 때 대문자 MAC만을 정확하게 찾고 싶기 때문이다. 바로... MultiActionController 처럼 자바의 클래스를 검색하기 위함이다.

즐 Vim~