%주의% : 시작하기 전에 ~/.bashrc 에 alias vi ='vim' 을 추가하고 시작!! 특히 root.. ㅜ_ㅜ
1. vi 기본지식
more..
1. 입력모드
- 입력하고 싶은 글자를 타이핑하고 타이핑한
그대로 보여주는 모드
2. 명령어모드
- vi에 내장된 여러가지 명령들을 이용하여 커서를 이동하고
글자를 삭제하고, 교체하고, 문자열을 검색하는등
다양한 기능을 사용할 수 있다.
3. 라인모드 또는 ex모드
':'콜론 프롬프트에서 여러가지 명령을 입력하여 편집
4. 기본동작
vi 에디터를 시작하면 명령모드 상태에서 시작된다.
'i'를 눌러 끼워넣기(insert)모드로 갈 수 있다. 'ESC'를 누르면 명령모드로 돌아간다.
비주얼 모드는 vim에서 지원한다. 'v' , 'ctrl+v'(구간선택) 명령으로 비주얼 모드를 시작한다.
원하는 부분의 첫 위치에서 부터 커서를 움직여 선택한다.
참고로 대문자 소문자는 각각의 기능을 가지고 있으므로(대체로 반대?) 잘 구분해야 한다.
5. 컨닝페이퍼
- 입력하고 싶은 글자를 타이핑하고 타이핑한
그대로 보여주는 모드
2. 명령어모드
- vi에 내장된 여러가지 명령들을 이용하여 커서를 이동하고
글자를 삭제하고, 교체하고, 문자열을 검색하는등
다양한 기능을 사용할 수 있다.
3. 라인모드 또는 ex모드
':'콜론 프롬프트에서 여러가지 명령을 입력하여 편집
4. 기본동작
vi 에디터를 시작하면 명령모드 상태에서 시작된다.
'i'를 눌러 끼워넣기(insert)모드로 갈 수 있다. 'ESC'를 누르면 명령모드로 돌아간다.
비주얼 모드는 vim에서 지원한다. 'v' , 'ctrl+v'(구간선택) 명령으로 비주얼 모드를 시작한다.
원하는 부분의 첫 위치에서 부터 커서를 움직여 선택한다.
참고로 대문자 소문자는 각각의 기능을 가지고 있으므로(대체로 반대?) 잘 구분해야 한다.
5. 컨닝페이퍼
2. .vimrc
root 는 /root/ .vimrc , 사용자는 /home/사용자/.vimrc, 전체설정은 /etc/vimrc or /etc/vim/vimrc
more..
vi의 설정 파일은 /etc/vimrc 파일과 홈 디렉토리의 .vimrc 파일이다
" 는 주석처리!
set autoindent " 자동으로 들여쓰기를 한다.
set cindent " C 프로그래밍을 할때 자동으로 들여쓰기를 한다.
set smartindent " 좀더 똑똑한 들여쓰기를 위한 옵션이다.
set textwidth=79 " 만약 79번째 글자를 넘어가면
set wrap " 자동으로 를 삽입하여 다음 줄로 넘어간다.
set nowrapscan " 검색할 때 문서의 끝에서 다시 처음으로 돌아가지 않는다.
set nobackup " 백업 파일을 만들지 않는다.
set visualbell " 키를 잘못눌렀을 때 삑 소리를 내는 대신 번쩍이게 한다.
set ruler " 화면 우측 하단에 현재 커서의 위치(줄,칸)를 보여준다.
set tabstop=4 " Tab을 눌렀을 때 8칸 대신 4칸 이동하도록 한다.
set shiftwidth=4 " 자동 들여쓰기를 할때 4칸 들여쓰도록 한다.
set backspace=indent,eol,start "Backspace 작동하기 시작, 끝..
set statusline=%h%F%m%r%=[%l:%c(%p%%)] " 상태표시줄 포맷팅
set hlsearch " / ? 명령 등으로 찾은 문자열을 하일라이트 해준다.
set title " Tab에 현재 편집중인 문서의 제목을 표시해준다.
colorscheme blue " 배경색상 정하기.(blue)
"문법 강조 기능을 사용한다.
if has("syntax")
syntax on " Default to no syntax highlightning
endif
" 는 주석처리!
set autoindent " 자동으로 들여쓰기를 한다.
set cindent " C 프로그래밍을 할때 자동으로 들여쓰기를 한다.
set smartindent " 좀더 똑똑한 들여쓰기를 위한 옵션이다.
set textwidth=79 " 만약 79번째 글자를 넘어가면
set wrap " 자동으로 를 삽입하여 다음 줄로 넘어간다.
set nowrapscan " 검색할 때 문서의 끝에서 다시 처음으로 돌아가지 않는다.
set nobackup " 백업 파일을 만들지 않는다.
set visualbell " 키를 잘못눌렀을 때 삑 소리를 내는 대신 번쩍이게 한다.
set ruler " 화면 우측 하단에 현재 커서의 위치(줄,칸)를 보여준다.
set tabstop=4 " Tab을 눌렀을 때 8칸 대신 4칸 이동하도록 한다.
set shiftwidth=4 " 자동 들여쓰기를 할때 4칸 들여쓰도록 한다.
set backspace=indent,eol,start "Backspace 작동하기 시작, 끝..
set statusline=%h%F%m%r%=[%l:%c(%p%%)] " 상태표시줄 포맷팅
set hlsearch " / ? 명령 등으로 찾은 문자열을 하일라이트 해준다.
set title " Tab에 현재 편집중인 문서의 제목을 표시해준다.
colorscheme blue " 배경색상 정하기.(blue)
"문법 강조 기능을 사용한다.
if has("syntax")
syntax on " Default to no syntax highlightning
endif
3. 정보들
more..
포럼: http://vi.kldp.org/
완벽 사용법 : http://www.joinc.co.kr/modules/moniwiki/wiki.php/Site/Development/Env/UsedVim
VI 팁 소개(IBM) http://www.ibm.com/developerworks/kr/library/tutorial/l-vi/index.html
VI 단계별 단축키 : http://vi.kldp.org/step.html
색 참고 : http://www.cs.cmu.edu/~maverick/VimColorSchemeTest/index-c.html
완벽 사용법 : http://www.joinc.co.kr/modules/moniwiki/wiki.php/Site/Development/Env/UsedVim
VI 팁 소개(IBM) http://www.ibm.com/developerworks/kr/library/tutorial/l-vi/index.html
VI 단계별 단축키 : http://vi.kldp.org/step.html
색 참고 : http://www.cs.cmu.edu/~maverick/VimColorSchemeTest/index-c.html
4. VIM 팁모음
more..
팁1. 명령모드에서 gcc 하기(컴파일, 실행) F2, F3 단축키 설정
" 컴파일
map <F2> : !gcc % -o %<
" 실행if has("gui_running")
map <F3> : !%<
elseif has("unix")
map <F3> : !./%<
endif
팁2. :/ Search 후에 나오는 색 안보이게 하기 -_ㅡ 거슬리면 지워보잣..
You can use :noh to disable highlight search temporarily (until your next search). To make turning off the highlights after a search a little quicker and convenient, add something like this to your ~/.vimrc:
Code:
nmap <silent> <C-N> :silent noh<CR>
결론.. :noh 를 Ctrl-n 에 등록하거나 입력하기
팁 3. 외부에서 붙여넣기 할때 " 주석이 앞에 자동으로 추가 될때 /etc/vimrc 에서 filetype plugin on 주석처리
5. 명령어 모음!
more..
=% : 스퀘어 브래킷('{', '}' ) 사이의 코드를 자동으로 indent 형식에 맞게 들여쓰기 해준다.
ggVG= : 전체 들여쓰기 Sifht v + Shift G 를 사용하여 전체 선택후 들여쓰기
ctrl+p : 함수 및 변수명 자동 완성 기능 (입력모드용) ctrl+p로 목록선택가능...-_ㅡ;;
vi 이동명령 | |
명령 키 | 작업 내용 |
+ , enter | 다름 라인의 첫 번째 문자로 이동 |
e , E | 단어의 끝으로 이동 |
w , W | 다음 단어로 이동 |
b , B | 이전 단어로 이동 |
$ | 라인의 끝으로 이동 |
0(숫자) | 라인의 처음으로 이동 |
) , ( | 다음,이전 문장의 처음으로 이동 |
} , { | 다음,이전 문단의 처음으로 이동 |
Ctrl+F , Ctrl+G | 다음,이전 페이지로 이동 |
명령모드의 명령 | |
명령 키 | 작업 내용 |
y | 복사 |
x | 잘라내기 |
p | 붙여넣기(숫자를 입력하고 수행시 그만큼 붙여넣음) |
u | Undo기능 |
ctrl+r | Redo기능 |
i | 현재 위치에서 삽입 |
I | 라인의 처음 위치에서 삽입 |
a | 현재 위치에서 추가 |
A | 라인의 끝에서 추가 |
o | 새로운 한 라인을 커서 아래 라인에 연다. |
O | 새로운 한 라인을 커서 윗 라인에 연다. |
S | 라인을 지우고 삽입모드로 전환 |
R | 현재 위치에서 Replace모드로 전환 |
J | 다음 줄과 현재 줄을 합한다. |
~ | 대문자와 소문자 전환 |
. | 이전 명령을 반복 |
삭제,복사, 붙이기 | |
명령 키 | 작업 내용 |
x | 커서를 삭제하고 싶은 글자에 맞추고 x |
dd | 한 줄을 삭제하는 명령 |
r | 커서에 있는 글씨를 바꾸고자 할때 r누르고 글씨 입력 |
yy | 한 줄을 임시버퍼에 복사 |
p | paste기능 임시버퍼에 있는 내용을 붙여넣는다.(dd,yy) |
파일 조작하고 열고 닫기 | |
명령 키 | 작업 내용 |
vi [filename] | 파일 열기 |
vi [fname1][[fname2] .. | 여러 파일 열기 :n(다음) :N(이전) 여러파일보기 |
view[filename] vi -R [filename] |
읽기 전용으로 열기 |
vi + [filename] | 파일을 열고 마지막 라인에 커서가 위치 |
vi +n [filename] | 파일을 열고 n번째 라인에 커서가 위치 |
vi +/pattern [filename] | 패턴이 나타내는 라인에 커서가 위치 |
ZZ , :x | 변경된 파일이면 저장하고 종료 |
:wq :wq!(강제종료) :wq [filename] |
저장하고 종료하거나 파일이름을 지정하여 저장하고 종료 가능 |
:w :w [filename] |
저장하거나 파일이름을 지정하여 저장 가능 |
원하는 패턴 찾기(검색) | |
명령 키 | 작업 내용 |
/pattern | 문자열의 처음에서 앞으로 검색 |
?pattern | 문자열의 처음에서 뒤로 검색 |
n | 검색을 다시 반복(같은 방향) |
N | 검색을 다시 반복(반대 방향) |
nG | n행 이동 |
:n | n번째 줄로 이동(n이 생략되면 마지막 줄로) |
nl | 열 이동(n이 생략되면 처음 열로) |
* | 현재 커서가 위치한 단어 찾기(앞방향) |
# | 현재 커서가 위치한 단어 찾기(역방향) |
6. ctag 사용( 소스분석에 적합 )
more..
ctags
ctags를 이용하면, 사용자 정의 함수가 나왔을때, 함수가 정의되어 있는 쏘스파일로 바로 점프할수 있으며, 또한 바로 원래의 쏘스파일로 되돌아올수 있다. 이렇게 함으로써 쏘스분석에 드는 시간을 상당히 줄일수 있다.
이번 문서에는 사용자가 vi 를 사용하고 있다는 가정하에 ctags 의 사용법을 설명하도록 하겠다.
ctags는 공개 소프트웨어로 쉽게 얻을수 있을것이다. 리눅스의 경우 웬만한 배포판은 기본으로 포함되어 있으니, 바로 사용하면 된다. 만약 설치되어 있지 않다면 http://ctags.sourceforge.net 를 방문해보도록 한다.
사용방법은 간단하다. 분석하고자 하는 소스가 있는 디렉토리에서 ctags 명령을 실행시켜주면 된다.
# ctags *위에서 ctags 는 현재 디렉토리에 있는 모든 파일에 대해서 tags 정보를 작성하도록 했는데, 현재 디렉토리 뿐만 아니라 모든 하위디렉토리에 대해서 tags 정보를 작성하고자 한다면 "-R" 옵션을 사용하면 된다.
# ctags -Rctags 명령을 실행시키고 나면, ctags를 실행한 디렉토리에 tags 란 파일이 생길것이다. 여기에 각 함수가 어느파일에 설치되어 있는지에 대한 정보가 들어 있고, vi를 실행 시키면 tags 파일을 참조하여 해당 함수가 정의되어 있는 파일로 자동으로 이동하게 된다.
tags 파일은 아래와 같이 구성되어 있다.
hello hello.c /^void hello(void)$/;" f각필드는 "tab" 으로 구분된다.
- 첫번째 필드는 함수이름
- 두번째 필드는 함수가 정의된 파일의 이름
- 세번째 필드는 해당 파일에서 vi가 함수명을 찾아가도록 하기위한 정규표현식 이다.
- 네번째 필드는 해당 함수의 타입이다. "f" 라면 일반 C 함수라는 뜻이며, "c" 는 클래스에 선언된 멤버함수, "d" 는 define 된 값이란 뜻이다.
vi에서 사용되는 ctags 관련 커맨드를 정리해 보았다.
이상으로 ctags 와 vi 를 이용한 쏘쓰 분석에 대해서 알아보았다. emacs 용으로는 etags 를 사용하는데, 이에 관한 내용은 나중에 기회가 되면, 설명하도록 하겠다.
Tag Command | 설명 |
Ctrl+] | 함수가 정의된 파일로 이동 |
Ctrl+t | 이동하기 전 단계의 위치로 이동 |
:tselect <function-name> | 같은 이름의 function-name이 여러개 일때, 목록을 보여준다. 번호를 이용해서 선택할 수 있다 |
:tnext | 여러개의 함수이름이 존재할 때, 다음 함수를 선택한다. |
:tprevious | 이전 함수를 선택한다. |
:tfirst | 가장 처음에 찾았던 함수를 선택한다. |
:tlast | 가장 마지막 함수를 선택한다. |
이상으로 ctags 와 vi 를 이용한 쏘쓰 분석에 대해서 알아보았다. emacs 용으로는 etags 를 사용하는데, 이에 관한 내용은 나중에 기회가 되면, 설명하도록 하겠다.