VI 실전에서 사용했던 테크닉 정리 by SWSSM 17기 구도훈

예전 수원 멤버십에서 신입회원 세미나 당시에 도훈이가 했던 내용인데 유용하게 정리된것 같아 blog에 따로 정리해 둡니다. 허락은 받지 않았습니다. 😛

SWSSM 17기 구도훈 2007.11.2 실전에 사용했던 테크닉 정리

1. 시작

이번 세미나에서는 vi를 다루려고 합니다. 기초적인 부분은 생략하기로 하고 코딩 시 유용한 것에 대해서 언급하려 합니다.
실제로 vi를 돌려서 어떻게 사용하는지 알아 볼 텐데 , 쓸만한 것은 체크를 해서 자기 것으로 만들었으면 좋겠습니다.

2. 화면 분할/이동, 버퍼이동

vi 고수처럼 보이게 만드는 화면 분할입니다.
모니터를 한 개 혹은 두 개 이상 쓰더라도, 가끔씩은 화면을 분할 할 필요가 있는 것 같습니다.
여기서는 윈도우를 어떻게 분할하는지 설명합니다.

윈도우 수직분할(vs)
윈도우 수평분할(sp)

윈도우 간 이동 CTRL-w + ( i, j, k,l)
윈도우 끄기 CTRL- q

윈도우 height 조정 CTRL – w – (+,-)
윈도우 width 조정 CTRL – w – (<,>)
윈도우 사이즈 같게 CTRL – w – =

다른 윈도우 화면에 놔두면서, 현 윈도우 최대한 크게 CTRL – w – |

버퍼 보기(ls)

해당 버퍼로 이동 예):1b
따라 해보기) 40vs .

3. mark 사용하기

현재 파일의 커서 위치에 마크를 해놓고 언제든지 다시 돌아올 수 있다.

마크된 리스트 보기 :marks
마크하는 방법 m{a-zA-Z}
해당 마크로 이동 ‘{a-zA-Z}

단 a-z 와 A-Z에는 차이가 있다.
‘a – ‘z 소문자는 현재파일안에서, ‘A – ‘Z 대문자는 파일들간에
A-Z 에 프로젝트에서 자주 사용하는 소스 파일을 맵핑 해놓고 바로 찾아갈 수 있다.

vi에서 특정 파일에 저장하는지 A-Z 마크내용은 vi를 재실행해도 볼수 있다.
아래의 내용을 .vimrc에 추가하면 현재 에디팅 되는 파일위치로 path가 자동 이동된다.
if(has(“autocmd”)

” Change to the directory the file in your current buffer is in
autocmd BufEnter * :cd %:p:h

endif ” has(“autocmd”)

4. 레코딩

vi를 사용하다 보면 단순 반복 작업을 할 때가 있습니다. 이때 레코딩 명령을 이요하면 유용합니다.
레코딩 시작과 끝은 q로 시작합니다

1. 레지스터에 레코딩 하는 법
명령 모드 상태에서 q 로 시작
q누르고 레지스터에 저장 가능(vi 레지스터에는 0-9a-zA-Z)
명령 모드 상태에서 q 로 끝

2. 레지스터에 저장된것 불러오는 방법
@누르고 저장된 레지스터입력
@@ 방금전 불러온 레지스터에서 불러오기

5. ctags와 같이 vi 활용하기

ctags에 여래개의 .c .h의 함수/변수/정의/선언 내용을 기록해놓고 vi에서 활용함.

따라해보세요 )
1. tags 파일 생성(c와 h파일에 해당)
ctags -R *.[ch]
2. vi가 tag파일 읽어올수 있도록 ~/.vimrc에 세팅
set tags=./tags,tags
set tags+=/usr/src/linux/tags
set tags+=../tags
set tags+=../../tags
set tags+=../../../tags
3. 사용하기
tags 파일 참조하여 함수/변수/정의/선언 위치로 이동 g], ctrl+]
돌아오기 ctrl + t
태그 스택 보기 – tag
4. 기타
cscope도 vi와 연동해서 사용합니다만 ctags랑 약간 차이가 있으니 한번 돌려보세요.

6. make 사용하기

컴파일 – :make
컴파일 결과보기:cw
!! 결과 창에서 에러 라인 선택하면 해당소스의 해당 라인으로 이동함.

90. 나머지 유용한것들

folding zf, zo
다음 괄호({},(),[])찾기 %
함수 프로토 타입 혹은 define내용을 한 줄로 보기 [i
현 파일 내에서 함수/변수/정의/선언 위치로 이동 gd,gD
현재 커서 밑에 있는 파일 에디트 – gf
이전 버퍼로 이동 ctrl-6
자동완성 ctrl + p
glibc 레퍼런스 – 함수위에서 2K(system call), 3K(standard library)
현재 라인에서 글자찾기 f(F) – 예를 들어 3을 찾는 다면 3f
대소문자 전환 u,U
정렬하기 -선택하고 sor(sor!)
현재커서위치에 있는 값 증가시키기 CTRL – A
아스키 코드 보는 방법 – ga
쉘 명령 사용 – 예제 !pwd
잠깐 쉘로 빠져 나오기 ctrl – z, 복귀는 fg
복사 붙이기 할때 사용해보세요. set paste
검색 시 대소문자 구분 무시 – set ignorecase

정말 모를 때는 help

99. 끝

추가 팁

마우스 스크롤이나 선택 복사를 하고 싶다면
:set mouse=a
특정 줄부터 줄까지 단어를 바꾸고 싶다면
:#,#s:/old/new/g
커서가 위치한 곳의 단어 찾기
Shift + 8
터미널에서 줄이 길어서 안보이면
:set wrap
Tab대신 space 사용
:set expandtab
Tab문자 간격
:set ts=8
Shif width
:set sw=8
한번에 다중 윈도우에 각각의 파일 열면서 시작하기
sp로? vim -o a b c
또는 vs로? vim -O a b c