vim 설정
VIM 플러그인들을 관리 할 수 있도록 돕는 플러그인.
VIM 내에서 플러그인 검색, 설치, 업데이트, 삭제 등의 작업이 가능
git clone https://github.com/VundleVim/Vundle.vim.git ~/.vim/bundle/Vundle.vim
플로그인 검색 및 자동 설치 Keymap
: VundleSearch
Keymap
i : Install plugin
c : Clean up
s : Search
R : Reload list
수동 플러그인 설정
vi .vimrc
set nocompatible " be iMproved, required
filetype off " required
" set the runtime path to include Vundle and initialize
set rtp+=~/.vim/bundle/Vundle.vim
call vundle#begin()
" let Vundle manage Vundle, required
Plugin 'VundleVim/Vundle.vim'
" 바닥글
Plugin 'vim-airline/vim-airline'
" 바닥글 추가, 삭제, 변경 정보 확인.
Plugin 'tpope/vim-fugitive'
" 문법 체크
Plugin 'scrooloose/syntastic'
" IDE 파일 Tree
Plugin 'nerdtree'
" git 관리 파일 변경 부분 확인
Plugin 'airblade/vim-gitgutter'
" 색상 테마 적용
Plugin 'nanotech/jellybeans.vim'
" 커피스크립트 Synatx
Plugin 'kchmck/vim-coffee-script'
" vimshell
Plugin 'shougo/vimshell.vim'
Plugin 'vimproc.vim'
call vundle#end() " required
filetype plugin indent on " required
map <Leader>nt <ESC>:NERDTree<CR>
color jellybeans
플러그인 적용
vi vim
:PluginInstall
플로그인 삭제
vi .vimrc
Plugin 이름 삭제
:PluginClena
설치 플로그인 기능 활성화
:NERDTree
:NERDTreeToggle on/off
vimshell 설치
git clone https://github.com/Shougo/vimshell.vim.git ~/.vim/bundle/VimShell.vim
cd ~/.vim/bundle/VimShell.vim
sudo apt-get install ctags cscope exuberant-ctags
cscope: 코드를 탐색하는 데 사용됩니다 (함수 간 전환 등).
ctags: Tagbar플러그인을 위해 필요하고 그리고 Omni completion(vim의 자동 완성 메카니즘); 네비게이션에도 사용할 수 있음.
커널 소스 scripts/tags.sh 커널 분석 데이터베이스 스크립트.
============================================
스크립트를 직접 실행하는 대신 커널 작성 규칙 make cscope, make tags 규칙을 사용한다.
예:
make O=. ARCH=arm SUBARCH=omap2 COMPILED_SOURCE=1 cscope tags
옵션 설명
O=.
- 절대 경로를 사용
(생성 된 cscope/ctags 색인 파일을 커널 디렉토리 외부로 로드하려는 경우 유용함. 예: 트리 외부 커널 모듈 개발 용).
상대 경로 (즉, 커널 디렉토리에서만 개발)를 사용하려면 해당 매개 변수를 생략한다.
ARCH=...
- 인덱싱 할 CPU 아키텍처를 선택
- ARCH=arm, arch/arm/
SUBARCH=...
- 인덱싱 할 하위 아키텍처 (예: 보드 관련 파일)를 선택
- 예를 들어, 디렉토리 와 인덱스 SUBARCH=omap2만 인덱싱되면 나머지 머신과 플랫폼은 무시된다.
- arch/arm/mach-omap2/ arch/arm/plat-omap/ 이 플랫폼만 관련해 인덱싱 색인 정보를 만든다.
COMPILED_SOURCE=1
- 컴파일 된 파일 만 색인한다.
- 일반적으로 빌드에 사용 된 소스 파일에만 관심이 있으므로(따라서 컴파일 됨). 빌드되지 않은 파일도 같이 색인화하려면이 옵션을 생략한다.
cscope
- cscope 색인을 만드는 규칙
tags
- ctags 인덱스를 만드는 규칙
수동 생성 색인
=============
스크립트 동작에 문제가 있을 경우 수동으로 생성한다.
http://cscope.sourceforge.net/large_projects.html
먼저 cscope.files색인을 생성하려는 모든 파일을 나열하는 파일 을 작성한다.
예를 들어,
다음 명령을 사용하여 ARM 아키텍처(arch/arm)에 대한 파일을 나열 하고 특히 OMAP 플랫폼(나머지 플랫폼은 제외하고 탐색을 쉽게 유지할 수 있음)을 사용한다.
vi cscope.files
find $dir \
-path "$dir/arch*" -prune -o \
-path "$dir/tmp*" -prune -o \
-path "$dir/Documentation*" -prune -o \
-path "$dir/scripts*" -prune -o \
-path "$dir/tools*" -prune -o \
-path "$dir/include/config*" -prune -o \
-path "$dir/usr/include*" -prune -o \
-type f \
-not -name '*.mod.c' \
-name "*.[chsS]" -print > cscope.files
find $dir/arch/arm \
-path "$dir/arch/arm/mach-*" -prune -o \
-path "$dir/arch/arm/plat-*" -prune -o \
-path "$dir/arch/arm/configs" -prune -o \
-path "$dir/arch/arm/kvm" -prune -o \
-path "$dir/arch/arm/xen" -prune -o \
-type f \
-not -name '*.mod.c' \
-name "*.[chsS]" -print >> cscope.files
find $dir/arch/arm/mach-omap2/ \
$dir/arch/arm/plat-omap/ \
-type f \
-not -name '*.mod.c' \
-name "*.[chsS]" -print >> cscope.files
vi cscope.files
x86 아키텍처 (arch/x86)에서는 다음과 같은 것을 사용한다.
find $dir \
-path "$dir/arch*" -prune -o \
-path "$dir/tmp*" -prune -o \
-path "$dir/Documentation*" -prune -o \
-path "$dir/scripts*" -prune -o \
-path "$dir/tools*" -prune -o \
-path "$dir/include/config*" -prune -o \
-path "$dir/usr/include*" -prune -o \
-type f \
-not -name '*.mod.c' \
-name "*.[chsS]" -print > cscope.files
find $dir/arch/x86 \
-path "$dir/arch/x86/configs" -prune -o \
-path "$dir/arch/x86/kvm" -prune -o \
-path "$dir/arch/x86/lguest" -prune -o \
-path "$dir/arch/x86/xen" -prune -o \
-type f \
-not -name '*.mod.c' \
-name "*.[chsS]" -print >> cscope.files
변수 설명
dir변수는 다음 값 중 하나를 가질 수 있다:
- .: 커널 소스 코드 디렉토리에서만 작업한다면; 이 경우 해당 명령은 커널 소스 코드의 루트 디렉토리에서 실행해야 한다.
- 커널 소스 코드 디렉토리의 절대 경로: 트리를 벗어난 커널 모듈을 개발할 경우; 이 경우 스크립트는 어디서나 실행할 수 있다.
위의 첫 번째 옵션 (dir =.)을 사용하고 있다.
모듈을 개발하지 않기 때문에 dir =. 을 사용함.
cscope.files파일이 준비되면 실제 인덱싱을 실행한다.
cscope -b -q -k
옵션 설명
-k매개 변수는 C 표준 라이브러리를 색인하지 않도록 지시한다.(커널은 C 표준을 사용하지 않는다.)
ctags인덱스 데이터베이스 생성한다.
이 단계를 가속화하기 위해 이미 만들어 둔 cscope.files을 사용한다
ctags -L cscope.files
cscope및 ctags인덱스 데이터베이스가 새롭게 생성된다.
cscope.files은 더이상 필요하지 않기 때문에 삭제한다.
rm -f cscope.files
생성된 다음 파일에는 색인 데이터베이스(cscope및 ctags)가 들어 있다.
- cscope.in.out
- cscope.out
- cscope.po.out
- tags
커널 vim 플러그인 설치
=====================
참고: vim8 native package loading 사용 가능.
native package loading : https://shapeshed.com/vim-packages/
pathogen.vim 플러그인 설치
https://github.com/tpope/vim-pathogen
~/.vim/bundle/ 상태 유지 하면서 설치 한다.
mkdir -p ~/.vim/autoload && curl -LSso ~/.vim/autoload/pathogen.vim https://tpo.pe/pathogen.vim
vi .vimrc
execute pathogen#infect()
아무런 설정이 없다면 3줄 추가.
vi .vimrc
execute pathogen#infect()
syntax on
filetype plugin indent on
vim cscope 맵 설치
==================
현재 cscope 지원한다.
:help cscope
지정한 기호를 사용해 파일 이동 가능.
:cs f g kfree
단축키 사용.
cscope_maps.vim
https://github.com/joe-skb7/cscope-maps
git clone https://github.com/joe-skb7/cscope-maps.git ~/.vim/bundle/cscope-maps
커서를 일부 함수에 놓고 다음 키를 차례로 누르면 구현 부분으로 찾아간다.
Ctrl+\
g
키 맵핑에 관련해 다음 사이트를 참고한다.
https://github.com/joe-skb7/cscope-maps/blob/master/plugin/cscope_maps.vim#L52
ctags 참고
========
#define 선언을 찾을 때 탐색 하는 방법.
#define 커서 이동 후 다음 키를 순서대로 누른다.
g
Ctrl + ]
g
ctrl - ]
cscope 참고
===========
:cs f t struct device {
위의 명령은 특정 구조체 선언 스타일 (커널에서 사용됨)임.
다른 코딩 스타일을 가진 프로젝트에서는 작동하지 않을 수 있음.
out-of-tree 모듈 개발 노트
=========================
외부 트리 모듈을 개발할 경우 커널 디렉토리에서 데이터베이스 cscope와 ctags데이터베이스를 로드해야 한다.
외부 cscope 데이터베이스 로드:
:cs add /path/to/your/kernel/cscope.out
외부 ctags 데이터베이스 로드:
:set tags=/path/to/your/kernel/tags
커널 개발 지원 전용 vimrc 변경.
=============================
열 81 수직 적용(커널 코딩은 줄 길이를 최대 80 문자로 유지해야 함)
" 80 characters line
set colorcolumn=81
"execute "set colorcolumn=" . join(range(81,335), ',')
highlight ColorColumn ctermbg=Black ctermfg=DarkRed
80 열 이상을 강조 표시하려면 "execute "set colorcolumn=" . join(range(81,335), ',') 주석 처리 해제.
후행 공백은 커널 코딩 스타일에 의해 금지되므로 강조 표시 할 수 있다.
" Highlight trailing spaces
" http://vim.wikia.com/wiki/Highlight_unwanted_spaces
highlight ExtraWhitespace ctermbg=red guibg=red
match ExtraWhitespace /\s\+$/
autocmd BufWinEnter * match ExtraWhitespace /\s\+$/
autocmd InsertEnter * match ExtraWhitespace /\s\+\%#\@<!$/
autocmd InsertLeave * match ExtraWhitespace /\s\+$/
autocmd BufWinLeave * call clearmatches()
커널 코딩 스타일 플러그인
=======================
https://github.com/vivien/vim-linux-coding-style
vi .vimrc
Plugin 'vim-linux-coding-style'
Plugin 'bogado/file-line'
나중 커널용 구성시 참고해 볼 만한 플러그인
https://github.com/vim-syntastic/syntastic
https://github.com/Valloric/YouCompleteMe
Omni completion
Vim 7 (및 그 이상)은 이미 자동 완성 지원 기능을 내장하고 있다.
자세한 내용 http://vimdoc.sourceforge.net/htmldoc/version7.html#new-omni-completion
큰 프로제그에서는 느리게 동작한다.
만약 사용한다면 .vimrc 내용 추가.
" Enable OmniCompletion
" http://vim.wikia.com/wiki/Omni_completion
filetype plugin on
set omnifunc=syntaxcomplete#Complete
" Configure menu behavior
" http://vim.wikia.com/wiki/VimTip1386
set completeopt=longest,menuone
inoremap <expr> <CR> pumvisible() ? "\<C-y>" : "\<C-g>u\<CR>"
inoremap <expr> <C-n> pumvisible() ? '<C-n>' :
\ '<C-n><C-r>=pumvisible() ? "\<lt>Down>" : ""<CR>'
inoremap <expr> <M-,> pumvisible() ? '<C-n>' :
\ '<C-x><C-o><C-n><C-p><C-r>=pumvisible() ? "\<lt>Down>" : ""<CR>'
" Use Ctrl+Space for omni-completion
" https://stackoverflow.com/questions/510503/ctrlspace-for-omni-and-keyword-completion-in-vim
inoremap <expr> <C-Space> pumvisible() \|\| &omnifunc == '' ?
\ "\<lt>C-n>" :
\ "\<lt>C-x>\<lt>C-o><c-r>=pumvisible() ?" .
\ "\"\\<lt>c-n>\\<lt>c-p>\\<lt>c-n>\" :" .
\ "\" \\<lt>bs>\\<lt>C-n>\"\<CR>"
imap <C-@> <C-Space>
" Popup menu hightLight Group
highlight Pmenu ctermbg=13 guibg=LightGray
highlight PmenuSel ctermbg=7 guibg=DarkBlue guifg=White
highlight PmenuSbar ctermbg=7 guibg=DarkGray
highlight PmenuThumb guibg=Black
" Enable global scope search
let OmniCpp_GlobalScopeSearch = 1
" Show function parameters
let OmniCpp_ShowPrototypeInAbbr = 1
" Show access information in pop-up menu
let OmniCpp_ShowAccess = 1
" Auto complete after '.'
let OmniCpp_MayCompleteDot = 1
" Auto complete after '->'
let OmniCpp_MayCompleteArrow = 1
" Auto complete after '::'
let OmniCpp_MayCompleteScope = 0
" Don't select first item in pop-up menu
let OmniCpp_SelectFirstItem = 0
자동 완성 기능은 ctrl + space 사용.
색상 지정
=========
vi .bashrc
export TERM="xterm-256color"
vi .vimrc
set t_Co=256
색 구성 표 작성
==============
~/.vim/colors
현재 jellybeans.vim 구성 됨
cd .vim/colors
wget https://github.com/w0ng/vim-hybrid/blob/master/colors/hybrid.vim
cd ~/.vim/bundle
git clone git://github.com/altercation/vim-colors-solarized.git
mv vim-colors-solarized ~/.vim/bundle/
어두운 배경 설정
syntax enable
set background=dark
colorscheme solarized
밝은 배경 설정
syntax enable
set background=light
colorscheme solarized
원하는 색상 지정
vi .vimrc
Plugin 'mrkn256.vim'
Plugin 'hybrid.vim'
GUI eclipse IDE 사용 방법 분석
=============================
https://wiki.eclipse.org/HowTo_use_the_CDT_to_navigate_Linux_kernel_source
taglist 설치
============
wget http://vim-taglist.sourceforge.net/ 최신 버전 다운로드
플러그인 적용
$ mkdir ~/.vim
$ unzip taglist.zip
스크립트 생성
vim mktrace.sh
#!/bin/sh
rm -rf cscope.files cscope.files
rm -rf tags
find . \( -name '*.c' -o -name '*.cpp' -o -name '*.cc' -o -name '*.h' -o -name '*.s' -o -name '*.S' -o -name '*.asm' \) -print > cscope.files
ctags -R
cscope -i cscope.files
.vimrc 설정
vi .vimrc
" cscope 설정
set csprg=/usr/bin/cscope
set csto=0
set cst
set nocsverb
if filereadable("./cscope.out")
cs add cscope.out
else
cs add /usr/src/linux/cscope.out
endif
set csverb
vim 셀 접근
: VimShell
창 분할
vs, sp