티스토리 뷰
리눅스나 유닉스 환경에서 프로그래밍을 하게 된다면 가장 기본적인 도구인 vi와 친해질 필요가 있습니다. 시스템 환경마다 천차만별이기 때문에 가장 기본적인 도구에 대한 사용 경험은 작업의 효율성과 직결되기 때문입니다. 모든 작업 환경에서 이클립스나 비주얼스튜디오, 넷빈즈와 같은 IDE를 사용할 수 있는 것은 아니기 때문입니다.
많은 시스템에서 사용하는 vi는 사실 알고보면 많은 기능이 추가된 vim으로 링크되어 있습니다. 사용하다보면 어느 시스템에서는 화살표로 이동이 가능한데 어떤 시스템에서는 화살표를 누르면 이상한 컨트롤 문자만 나오고 정상적인 동작을 하지 않습니다. 이런 현상은 많은 경우 vim 설정이 준비되어 있지 않은 경우가 대부분이지만 어떤 경우에는 vim이 아니라 원래 vi 도구만 지원하는 경우도 있습니다.
vi는 내용을 입력하는 "편집모드"와 여러 명령을 수행하는 "컨트롤모드"에 대해서만 이해하면 사용은 아주 쉽습니다.
■ 편집 모드 들어가기
- i : 현재 커서 위치에서 편집 시작
- a : 현재 커서 다음위치에서 편집 시작
- A : 현재 줄 끝에서 편집 시작
- o : 다음줄에 새줄을 추가하여 편집 시작
- O : 현재위치에 새줄을 추가하여 편집 시작
내용을 입력하기 위해서는 적절한 위치로 이동한 다음 위와 같은 영문자를 누르는 것으로 편집모드로 진입해야 합니다. GUI 환경에서 코드를 편집만 해본 사람에게는 가장 이해되지 않는 부분이기는 합니다. 편집 모드에서 빠져 나오기는 ESC 키를 누르면 됩니다. 다른 대부분의 명령은 편집 모드에서 빠져나와 수행해야 합니다.
■ 이동 명령
커서의 위치를 이동시키는 명령들입니다.
- G : 맨 뒤로 이동
- 숫자G 또는 :숫자 : 숫자라인으로 이동
- % : 괄호, 중괄호, 대괄호, 주석, #if 에서 블록의 시작/끝 사이 이동
- 0 : 줄의 처음으로
- $ : 줄의 끝으로
- k j h l : 상하좌우로 이동
- w : 다음 단어로 이동
- b : 이전 단어로 이동
■ 편집 및 검색 명령
- :se nu : 라인번호 표시
- :se nonu : 라인번호 표시하지 않기
- dd 또는 숫자dd : 한줄 또는 숫자라인만큼 잘라내기(붙여넣기에 사용가능)
- x 또는 숫자x : 문자 1개 또는 숫자 개수 만큼 삭제
- j : 아래줄을 현재줄 뒤에 붙임(join)
- yy 또는 숫자yy : 한줄 또는 숫자라인만큼 복사
- p : 복사한 라인 아래로 붙여넣기
- P : 복사한 라인 위로 붙여넣기
- u : 직전 명령 취소
- Ctrl+r : 취소 명령 다시 수행
- . : 직전 명령 반복 수행
- /검색문자열 : 지정한 문자열 검색
- n : 찾기 계속
- /g/검색문자열/s//치환문자열/g : 검색문자열을 찾아 치환문자열로 일괄 치환
- # : 현재 단어 검색
- v : 선택(커서 이동으로 라인 범위 선택)
- > : 선택 영역 우측으로 밀기
- < : 선택 영역 좌측으로 밀기
- = : 선택영역 자동 맞춤
- :w : 저장
- :wq : 저장후 종료(!를 붙이면 묻지 않고 빠짐)
- :q : 현재창 닫기(!를 붙이면 묻지 않고 빠짐)
- :qa : 모든 창 닫기
■ ctags와 vim
ctags 도구는 소스 코드를 분석해서 특정한 함수나 구조체 멤버등을 손쉽게 찾아갈수 있도록 기반되는 정보를 만들어 주는 도구입니다.
ctags -R *
소스가 위치한 곳의 루트폴더에서 위의 명령을 입력하면 하위 폴더를 포함하여 모든 폴더의 파일을 분석하고 그 결과로 "tags"라는 파일을 생성합니다.
vim을 실행하면 현재 폴더에 tags 파일이 있는지 참조해서 함수나 변수가 정의된 곳을 쉽게 찾아갈 수 있도록 해줍니다. vim을 실행하지 위치에 구애 받지 않으려면 .vimrc등에 관련 내용을 설정해 두면 됩니다. tags 파일이 존재한다는 가정하에 사용할 수 있는 vim 명령은 아래와 같습니다.
Ctrl+] : 현재 단어가 정의된 곳으로 이동
Ctrl+t : 원래 위치로 복귀
:tselect 이름 : 이름으로 지정한 것이 여러개 일때 해당 목록을 확인해서 번호로 원하는 곳으로 이동할 수 있습니다.
:tprevious : 현재 단어가 정의된 곳이 여러개인 경우 목록의 이전 위치로 이동합니다.
:tnext : 현재 단어가 정의된 곳이 여러개인 경우 목록의 다음 위치로 이동합니다.
'컴퓨터 팁(Tip)' 카테고리의 다른 글
윈도우 원격 데스크톱으로 우분투 들어가기 (0) | 2016.06.16 |
---|---|
엑셀에서 CSV 파일의 한글 깨짐 현상 해결 방법 (30) | 2016.06.15 |
Easy Capture Manager의 정체와 설정하기 (1) | 2016.06.07 |
"터미널 서버에서 허용된 최대 연결 수를 초과했습니다" 대처법 (0) | 2016.02.26 |
PresentationFontCache가 CPU를 잡아먹는 이상 현상 해소 방법 (7) | 2015.10.01 |