2015. 1. 31. 22:35



vim plugin 관련 좋은 블로그 펌! 



출처 : http://www.iamroot.org/xe/Kernel_10_ARM/104190




1. 커널 소스 받기

https://www.kernel.org/ 에 접속하여 커널 소스를 받습니다. 저는 3.9.2를 받았습니다.(https://www.kernel.org/pub/linux/kernel/v3.x/linux-3.9.2.tar.xz)



2. 소스 압축 풀기

받은 소스 파일을 한글 경로가 안들어가있는 적절한 곳으로 옮깁니다. 저같은 경우는 ~/kernel_study/ 밑으로 옮겼습니다.

그리고 해당 파일의 압축을 풉니다. 압축 풀때는..


$ xz -d linux-3.9.2.tar.xz  

위와 같이 압축을 풀면 tar 파일이 나옵니다. tar 파일을 한번 더 풀어줍니다.

$ tar -xvf linux-3.9.2.tar

그러면 아카이빙이 풀리면서 폴더가 만들어집니다.



3. ctags로 소스 코드 태그 만들기

일단 ctags를 설치합니다.

$ sudo apt-get install ctags

기본적으로 태그를 생성하는 명령은 ctags -R인데 ctags -R은 모든 아키텍처에 대한 태그를 만들어 준다고 합니다. 

우리는 ARM아키텍쳐만 다루기 때문에 ARM으로 한정하여 생성해야 합니다.

이때 리눅스 커널 소스에 아키텍처별 ctags용 태그를 생성할 수 있는 스크립트가 제공된다고 합니다.

스크립트가 있나 없나 한번 확인해봅니다.

$ ls -al ./scripts/tags.sh

tags.sh가 있는 것이 확인되면 make 명령으로 ARM용 태그를 생성합니다.

$ make tags ARCH=arm
만드는데 시간이 좀 걸립니다. 


4. cscope 태그 데이터베이스 만들기
다음으로는 ctags를 보완해주기 위해 cscope를 설치해줍니다.
$ sudo apt-get install cscope
cscope DB를 생성하기 위해서는 분석할 파일들의 목록을 cscope.files 파일에 저장 한 후 생성해야되는데
리눅스 커널 소스에서는 이를 자동으로 구성해주는 스크립트를 내장하고 있습니다.
$ make cscope ARCH=arm


5. vim 플러그인설치
OB들의 책에서는 ctags와 cscope에 익숙하지 않다면 vim 플러그인을 추천합니다.
플러그인으로 Source Explorer, NERD Tree, Tag List를 추천하고 있습니다.
3개는 http://www.vim.org/ 에서 다운받을 수 있습니다.
vim사이트에서 좌측을 보시면 Download 밑에 Scripts라고 메뉴가 있습니다.
그것을 클릭 후 거기서 Browse all을 누릅니다.
그러면 하단부에 플러그인을 검색 할 수 있는 keywords와 type, sort by가 뜨는 것을 볼 수 있습니다.
keywords에서 검색하여 각각의 플러그인들을 다운받습니다.
각각의 주소는
입니다.

플러그인들을 설치하고 환경을 설정하기 위해 홈디렉토리로 가서 .vim 폴더를 만들어 줍니다.
그리고 다운받은 파일들을 홈디렉토리로 옮겨 줍니다.
그리고 .vim 폴더로 가서 하위폴더로 plugin폴더를 만들어 줍니다.
그 다음 각각의 파일들을 압축을 해제하여 줍니다.
압축을 풀면 각각의 플러그인마다 거시기.vim파일들이 나오는데
NERD_tree.vim  srcexpl.vim  taglist.vim
이 3개의 파일들을 ~/.vim/plugin/ 밑으로 복사 또는 이동합니다.
그러면 설치는 완료되고 환경설정이 남았습니다.

6. 환경설정
아까 설치한 ctag와 cscope를 연동하기 위해 vim 환경 파일인 .vimrc를 수정해야 합니다.
먼저 ctags와 cscope 데이터베이스 파일의 위치와 실행파일의 위치를 확인해봅니다.
$ whereis ctags
ctags: /usr/bin/ctags /usr/bin/X11/ctags /usr/share/man/man1/ctags.1.gz
$ whereis cscope
cscope: /usr/bin/cscope /usr/bin/X11/cscope /usr/share/man/man1/cscope.1.gz

그리고 vim 환경설정 파일을 엽니다.
$ vi ~/.vimrc
그리고 아래를 입력 해 줍니다.
 

  "vim환경설정
       set nu "line number
       set ai "auto indent
       set ts=4 "tab size
       set bg=dark "background color
   
   "ctags database path 설정
       set tags=~/kernel_study/linux-3.9.2/tags "각자 자신의 위치로..
   
  "cscope database path 설정
      set csprg=/usr/bin/cscope "whereis로 나온 cscope위치
      set csto=0 "cscope DB serch first
      set cst "cscope DB tag DB search
      set nocsverb "verbose off
  
      "cscope DB의 위치 설정
      cs add ~/kernel_study/linux-3.9.2/cscope.out ~/kernel_study/linux-3.9.2
      set csverb "verbose off
  
  "Tag List 환경설정
      filetype on "vim filetype on
      nmap <F7> :TlistToggle<CR> "F7 key = Tag List Toggling
      let Tlist_Ctags_Cmd = "/usr/bin/ctags"  "ctags 프로그램 위치
      let Tlist_Inc_Winwidth = 0 "window width change off
      let Tlist_Exit_OnlyWindow = 0 "tag/file 선택 완료 시 taglist
                      "window close =off
      let Tlist_Auto_Open = 0 "vim 시작 시 window open = off
      let Tlist_Use_Right_Window = 1 "vim 시작 시 window open = off
  
  "Source Explorer 환경설정
      nmap <F8> :SrcExplToggle<CR> "F8 key = SrcExpl Toggling
      nmap <C-H> <C-W>h "왼쪽 창으로 이동
      nmap <C-J> <C-W>j "하단(preview) 창으로 이동
      nmap <C-K> <C-W>k "상단 창으로 이동
      nmap <C-L> <C-W>l "오른쪽 창으로 이동
  
      let g:SrcExpl_winHeight = 8 "SrcExpl 윈도우 높이 지정
      let g:SrcExpl_refreshTime = 100 "refreshing time = 100ms
      let g:SrcExpl_jumpKey = "<ENTER>" "해당 definition으로 jump
      let g:SrcExpl_gobackKey = "<SPACE>" "back
      let g:SrcExpl_isUpdateTags = 0 "tag file update = off
  
  "NERD Tree
      let NERDTreeWinPos = "left" "NERD Tree위치 = 왼쪽
      nmap <F9> :NERDTreeToggle<CR> "F9 key = NERD Tree Toggling



CTAG 단축키 
ctag -R
1 :h [ 접두어 ] | [ 접미어 ] 해당명령어의 도움말 
2 Ctrl + Z  , fg  쉘로 빠져나가고 복귀
3 :ascii 현재 커서의 아스키값을 알아냄
4 yy + p 한줄 복사하여 붙여 넣기
5 "=G" 들여쓰기 재정렬 G는 재정렬을 적용할 범위를 나타냄
6 set autoindent  자동 들여쓰기
7 set smartindent 지능적인 들여쓰기?
8 set ruler 행 열번호,
9 set hlsearch 검색어 강조
10 vi -t < keyword > 태그 파일에서 keyword 와 일치하는 첫번째 위치로 이동
11 :ta < keyword > 실행중 특정태그를 검색
12 :tn , :tp 이전, 이후 태그로 이동
13 :tj 태그가 여러개일 경우 목록을 출력, 선택하면 이동가능
14 Ctrl + ] 커서가 위치한 keyword 의 정의부분으로 이동
15 Ctrl + t 이동후 이전 위치로 복귀 
CSCOPE 
# find . \( -name '*.c' -o -name '*.h' -o -name '*.s' -o -name '*.S' \) -print > cscope.files
cscope -i <filelist file>    : cscope.out 으로 데이터베이스 파일ㅇ ㅣ생성된다.
: cs add /usr/src/linux-3.0.4/cscope.out
cscope 사용 :cs find <검색유형> <검색어>
1 s 심볼을 검색
2 g global 변수를 검색
3 d 함수에 의해 호출되는 함수들을 검색
4 함수를 호출하는 함수들을 검색
5 t 텍스트 문자열을 검색
6 e 확장 정규식을 사용하여 검색
7 f 파일이름을 검색
8 i include 파일을 검색
9 :cn, :cp 다음 검색, 이전 검색


Posted by k1rha