본문 바로가기

Linux and Unix

.vimrc 파일 설정 팁 및 자질구레한 정보

자질구레한 tip

K (대문자)    manpage보기

G (대문자)    파일의 마지막줄로 커서이동

^6 or :e#    열어봤던 이전파일 열기

zf        fold - 한줄로 접기 ex) :23,29zf

zo        fold - 펴기

^p or ^n     변수명, 함수명 자동완성

<<       tab 안으로 밀기

>>       tab 밖으로 밀기

{        한 단락 위로 이동

}        한 단락 아래로 이동

[i        함수의 프로토타입보기


한 vi 안에 여러개로 창 나누어(split) 작업하기

:vs <파일명>    세로로 창 나누어 파일열기

:sp <파일명>    가로로 창 나누어 파일열기

:20vs ./      왼쪽에 파일 탐색기 열기 <탐색기에 대한 도움말 = ?>

O         탐색기 파일 열기

^wn        새로운 창 나누기

^wo        현재 커서가 있는 창을 전체창으로..(여러개 창으로 나뉘어 있을때)

^ww        시계방향으로 창 사이를 이동

^w<방향키>    두개의 창 사이를 방향키의 방향으로 이동

^w+        창 크게

^w-        창 작게

z<숫자><enter>    창 높이설정

^w=        열려있는 창들의 크기를 모두 같게

^wc or ^w_    현재창 닫기

:help split    창 나누기에 대한 도움말


열려있는 파일보기

명령) :marks

설명) 원래는 a-z,A-Z,0-9까지의 마크를 각각의 문서에 대해 할수 있는기능

그냥 marks라고 하면 기본적으로 vim이 저장하는 최근 10개 문서(0-9마크)를 보여줌. 이동은 `0 또는 `3


명령) :args

설명) 명령행 인자로 여러개의 파일을 열었을 경우, 이들을 보여주고, 문서간 이동시 편리(:N , :n)


명령) :ls

설명) 현재 열려있는 버퍼들을 확인

편집중에 다른 화일들을 여러개 연경우, 이미 열린화일을 찾기 쉽게 함. 이동은 :b1 또는 :b3 등으로.


치환

:/pattern/replace/        현재 줄의 치환

:lines/pattern/replace/      지정한 줄의 치환

:line,lines/pattern/replace/    지정한 범위의 치환

:%s/pattern/replace       모든 줄의 치환


위의 팁들을 이용하여 현재 재연이의 .vimrc에 키매핑한 것들..

map <F1> K               도움말 보기

map <F2> :25vs ./<CR>:set nonu<CR>   탐색기 열기

map <F3> O^Ww<CR>           탐색기 안에서 파일 열기

map <F4> ^6               이전에 열었던 파일 열기

map <F5> v%zf              폴딩 - 함수 접기(함수의 { 위치에서 F5를 눌러야 함)

map <F6> zo               폴딩한 것 다시 풀기

map <F7> :marks<CR>          최근에 열었던 파일 보기


map <F8> [i               함수 프로토타입보기

map <F9> :set nonu<CR>         줄번호 없애기

map <F10> :set nu<CR>         줄번호 보기



일반적인 기능

명령: map <F1> K

-> 이 문장은 펑션키 F1 을 shift+k 로 맵핑시켜줍니다. 코딩하다가 ANSI/POSIX 표준함수의 이름위에 커서를두고 F1 을 누르면 그 함수의 man 페이지를 보여줍니다. 마치 VisualStudio 의 MSDN 과 비슷한 기능이죠.


명령: map <F2> :w!<CR>

-> 이 문장은 펑션키 F2 를 ":w!"+ENTER 로 맵핑시켜줍니다. 잘 아시겠지만, 현재 편집중인 파일을 저장하는 기능입니다.



소스코드 이쁘게 보기

명령: map <F3> v]}zf

-> 이 문장은 펑션키 F3 을 v]}zf 로 맵핑시켜줍니다. 코딩을 하다보면 함수를 정의하는 부분이나 if() 문같은곳에 아래처럼 생긴 코드를 볼 수 있습니다.

1: int function( void )

2: {

... 중간 200라인 생략 ...

201: }

이때 커서를 '{' 위치에 갖다두고 F3 을 누르면 { ~ } 를 통채로 Fold 해서, 한줄로 표시해줍니다. 이렇게 폴드된 문장은 아래와 같이 생겼습니다.

1: int function( void )

201: ---- 201 Line folded ----------


명령: map <F4> zo

-> 이 문장은 펑션키 F4 를 zo 에 맵핑시켜줍니다. 위에서 F3 키로 Fold 된 라인에 커서를 두고 F4 를 누르면, 폴드된 내용을 복구시켜줍니다.



파일 브라우징

명령: map <F5> :25vs ./<CR>:set nunumber<CR>^Ww

명령: map <F6> ^Ww

명령: map <F7> O

-> 이 문장은 아래에 어떤분이 올려주신 팁을 수정해서 만든겁니다. F5 키를 누르면 화면을 양분해서 프레임을 나눠주고, 왼쪽 프레임에 현 디렉토리의 파일 목록을 보여줍니다. 커서를 좌우프레임으로 왔다갔다 할때에는 F6 을 누릅니다. 왼쪽에 브라우징된 파일 목록에서 어떤 파일을 열고싶을때에는 열고싶은 파일에 커서를 두고 F7 을 누르면 됩니다. F5 와 F6 의 맵핑내용중 ^Ww 라는것은, 차례대로 이렇게 누릅니다. Ctrl+v, Ctrl+w, w 이렇게 세번을 차례대로 누르면 써집니다. F7 의 맵핑내용은 shift+o ( O )입니다. 열려진 양쪽 프레임중 하나를 닫고싶을때에는 닫고싶은 프레임에 커서를 두고 :q! 하시면 닫아집니다.



소스코드 코딩/분석에 도움되는 기능

명령: map <F8> [i

-> 이 문장은 펑션키 F8 을 [i 에 맵핑시켜줍니다. 어떤 함수의 이름에 커서를 두고 F8 을 누르면, 화면 하단에 그 함수의 prototype 을 보여줍니다. 약간은 미흡하게 어긋날때도 있습니다만..^^;


명령: map <F9> gd

명령: map <F10> ''

-> 어떤 함수 안에서 지역변수를 추적해주는 기능입니다. 가령 어떤 함수의 중간에서 var1 이라는 변수가 사용되었는데, 이게 어떤 변수였는지 잘 기억이 안난다면 변수의 이름에 커서를 두고 F9 를 누릅니다. 그러면 var1 변수가 선언된 문장으로 찾아가줍니다. 그리고 var1 변수의 이름을 모두 반전시켜서, var1 이 사용된 곳을 표시해줍니다. 이렇게 보다가 다시 원래의 위치로 되돌아가고 싶을때 F10 을 누르면 됩니다. F10 의 맵핑내용은 ';' 키의 오른쪽 옆에있는 키를 두번 누른것입니다.


명령: map <F11> ^]

명령: map <F12> ^T

-> 위의 F9, F10 기능은 오직 지역 변수만을 추적할 수 있는 기능인데, F11 과 F12 는 전역변수/구조체/정의상수/함수정의를 추적해줍니다. 어떤 사용자정의함수 func() 이 있다고 가정할때, 함수의 이름에 커서를 두고 F11 을 누르면 그 파일이 선언된 문장으로 추적해 찾아가줍니다. 이렇게 추적된 상태에서 또 어떤 구조체의 내용을 보고싶으면 구조체 테그이름에 커서를 두고 F11 을 누르면 됩니다. 이런식으로 함수나 전역변수나 구조체나 #define 으로 정의된 상수를 계속 추적해 들어갈 수 있습니다. 추적에 들어간 상태에서 이전위치로 되돌아오려면 F12 를 누르면 됩니다. 즉, 원래위치부터 시작해서 F11 을 이용해 10번을 추적해 들어갔다면, 다시 원래위치로 오기위해 F12 를 10번 눌러야 합니다. 맵핑 내용중 ^] 는 Ctrl+v, Ctrl+] 를 차례로 눌러 입력합니다. 마찬가지로 ^T 는 Ctrl+v, Ctrl+t 를 차례로 눌러 입력합니다. F11, F12 의 추적기능을 이용하기 위해서는 현 디렉토리에 tag 파일이 존재해야만 합니다. tag 파일은 "어떤 함수가 어느 파일의 몇번째줄에 있다, 어느 구조체가 어느 파일의 몇번째 줄에있다" 하는 정보를 담고있는 파일입니다. tag 파일을 만드는 방법은 아주 간단합니다. 소스코드가 있는 디렉토리에서 ctags * -R 하셔도 되고, VIM 에서 :!ctags * -R 하셔도 됩니다.


개발자 추가 활용법~!

Shift + k

함수 이름 위에서 누르면 그 함수의 man page가 뜹니다. 또 man page에 여러개가 있을 경우..

예를 들어 man 2 read 해야 볼수 있는 것들이 있습니다. 이럴 땐 2 shift+k 입니다.


:cl , :cn, :cp

vim에서 make를 하면 컴파일을 해 줍니다. make 파일이 같은 디렉토리에 있을 경우 Makefile을 이용해서 컴파일 해 합니다.

컴파일 했을 때 에러가 있을 경우 커서는 자동으로 첫번째 에러 위치에 가서 있습니다. 아래를 보면 어떤 에러가 발생했는지 표시됩니다.

이때 :cl를 해 보세요.. 에러 목록이 출력됩니다. 자 다음 에러로 가 볼까요?? :cn 입니다. 해보세요..

이전 에러를 고치지 않고 그냥 :cn을 해 버렸네.. 그럴땐 :cp 이전 에러 위치로 커서까지 파일까지 옮겨가며 에러 위치를 알려 줍니다