학습자료/리눅스 2012. 10. 19. 13:38

▶ 기초

리눅스와 좀 더 친해지기....


리눅스는 직접 경험해 봐야 익숙해지고 알 수 있게 된다.

 


1. 여러 파일을 편집하는 방법

vi file1.c file2.c file3.c /*file1, file2, file3 열기*/


vi *.c *.h /*c파일과 헤더파일 열기*/

:ls 열린 파일 리스트 보기
:b[N] ex):b2 버퍼 2(file2.c)로 이동
:bw[N] N버퍼 삭제(N없으면 현재 버퍼)
:bp[N] 이전 버퍼 이동(N번)
:bn[n] 이후 버퍼 이동(N번)


tip>


코딩을 하는 사람이라면, 이 방법보다 플러그인을 활용한 Tlist를 사용할 수 있다.


여러 파일 편집과 아래의 키 매핑의 기능은 Tlist로 더욱 쉽게 사용 할 수 있다.

 



2. 키 매핑

map ,1 : b!1<CR> ~/.vimrc 파일 편집(추가)
map ,2 : b!2<CR>

  • map = 맵핑
  • ,1 : b!1 = ex모드(ESC 누른 상태)에서 ,1을 눌렀을 때 b!1<CR> 이 실행
  • b!1 = 파일을 수정중일때 경고 무시하고 강제로 창 전환
  • <CR>

주의> ",1" 누를 시 ','키 누르고 뗀 후 빨리 '1'키를 눌러야 인식

tip>
<F4>키로 Tlist를 실행 혹은 ,ma 키 입력으로 해당 줄의 함수의 man 페이지를 볼 수 있도록 할 수 있다.


3. 매크로 사용
: ex 모드에서 qb( q[네임레지스터명] ) 입력 시 하단에 '기록 중'글이 나온다. 이 후 누르는 키는 b 레지스터에 저장된다.

ex>^i//[space bar][ESC][ENTER]
^ : 행의 처음
i : 삽입
esc : ex모드
enter : 개행


@b 혹은 5@b 형태로 사용 가능 하며 자동으로 주석처리를 하게 된다.

4. 다중 창 사용
: 터미널을 분할하여 효율적으로 사용 한다.

[분할]

ctrl+w n (new)가로 분할
ctrl+w s (split)동일한 파일을 복사, 가로 분할
ctrl+w v (vertical)동일한 파일 복사, 세로 분할

분할된 창에서 파일 로드 ==> :e[파일명]

[창 이동]

ctrl+w w 창전환
ctrl+w h/j/k/l 왼쪽, 위, 아래, 오른쪽으로 이동
ctrl+w 화살표 위와 동일
ctrl+w t (top) 가장 위의 창으로
ctrl+w b (bottom) 가장 아래 창으로


[크기 변환]

ctrl+w _ 수평분할일때 현재 창 최대로
ctrl+w | 수직분할일때 현재 창 최대로
ctrl+w = 모든창을 동일한 크기로
ctrl+w [N]+ or [N]- 수평분할일때 해당 창 n씩 크기 변동
(n이 없을 시 1크기만큼 변동)
ctrl+w [N]> or [N]< 수직분할일때 해당 창 n씩 크기 변동


5. 마킹 이동
: 코딩을 하다가 기억해야 하는 위치가 있을 때 마킹을 사용하면 해당 위치로 복귀가 가능하다.

전역마킹(A - Z) : 서로 다른 파일간에서도 이동 가능
지역마킹(a - z) : 현재 파일 내에서만 이동 가능

마킹 ex모드, ma or mb
마킹된 행의 처음으로 이동 ex모드, :'a
마킹 테이블 보기 ex모드, :marks



6. 쉘명령어 사용
: 편집 중 쉘을 잠시 써야 하는 일이 발생할 때, 번거롭게 새 터미널을 켜거나 vim을 종료 하지 않고 이용 할 수 있다.

:!ls ls가 실행되고 다시 vim으로 복귀
:!bash, :sh, :shell 잠시 쉘로 이동, 쉘에서 exit로 vim 복귀

7. 문자 치환

:패턴s/기존문자열/바꿀문자열/옵션

:%s/기존/바꿀/g

예를들어 첫줄부터 끝줄까지의 index를 dex로 바꾸려면 다음과 같이 쓰면 된다.

:%s/index/dex/g

옵션 c : 바꿀때마다 묻기


8. 복사/붙이기/잘라내기/삭제

복사 - yy(현재 행 복사), 10yy 10개의 행 복사

붙이기 - p

잘라내기 - x

삭제 - dd(현재 행 삭제)

9. 되돌리기/되살리기

되돌리기 - u

되살리기 - ctrl+r


10. 주석 

// 블록만큼 주석 하기
1. Ctrl + v 로 원하는 만큼 블록지정
2. Shift + i 
3. // 입력
4. ESC 2번 누름

// 블록만큼 주석 지우기
1. Ctrl + v 로 원하는 만큼 블록지정
2. x

 

11. 탭 끼워넣기/제거

v 키로 블럭을 잡고 '>' 또는 '<' 키로 탭을 넣기/제거 할 수 있다


-sw(shift width) : < 또는 >로 탭 사이즈를 조절할때 표시 크기. 

:set sw=4  #vim설정


▶ tip + plugin


1. 파일 탐색 기능 - 디렉토리 브라우징과 선택열기가 가능하다.

:20vs ./

 

2. 빠른 괄호 이동 - if, while 문의 범위가 어디까지인지 한번에 확인 할 수 있다.

'{' 기호에서 %를 누르면 쌍을 이루는 괄호로 이동.

 

3. 폴딩기능

함수 시작부위 '{' 위에 커서를 두고 명령모드에서 v]}zf

혹은 ./vimrc 에 매핑시켜 사용가능 하다.

map <F1> v]}zf

 

4. 함수의 원형보기, 지역변수 선언 부분 바로 이동

함수 원형 보기 -[i

선언부분 바로 이동 -gd

 

5. 흐트러진 소스 정렬

v로 블록 지정후, '=' 키

 

6.파일에서 다른 부분 비교하기 - 다른 부분의 라인이 색깔표기되어 알기쉽다

vimdiff a.txt b.txt

 

7. header 파일 바로 읽기 - ~/.vimrc에서 지정되있는 path에서 파일을 찾기때문에, 만약 열리지 않는 헤더파일이 있다면, 그 곳의 path를 지정해주어야 한다.

일고자 하는 헤더에 커서 위치 -> ctrl+wf (창이 수평분할 되며 헤더파일이 열린다)

path 지정 - set path=/usr/include (.vimrc에)

 

8. plug in 사용(tag list, ctags, 자동완성, help page 세팅)

8.1. TagList

왼편에 추가된 것이 taglist이다.

구조체, 변수, 함수 등이 정리되어서 나오며 해당 위치로 바로 이동 가능하다.

창전환 : crtl +ww

창전환으로 tag쪽에 커서가 이동하면, 이동 하고픈 곳에서 엔터키를 눌러서 해당 라인으로 이동하게 된다.

설치법.

1. 우선 apt-get install ctags로 ctags를 설치 한다.

2. taglist 최신버전을 다운 받는다.

http://vim.sourceforge.net/scripts/script.php?script_id=273

3. 받은 파일의 압축을 풀면 doc/, plugin/ 폴더 두개가 있고 각각 폴더에 doc/taglist.txt, plugin/taglist.vim 파일이 존재한다.

그 파일들을 각각 아래 위치로 이동

/usr/share/vim/vim72/doc/

/usr/share/vim/vim72/plugin/

실행법.

1. 커맨드모드에서 :Tlist 입력

2. vimrc파일을 열어 단축키를 지정

map <F4> :Tlist<cr> //커맨드 모드에서 :Tlist 입력 과 같다.

 

8.2 ctags

소스원문에서 해당 함수로 이동할 수 있다.

 - 함수 들어가기 : ctrl+]

 - 이전 위치로 돌아오기 : ctrl + t

 

8.3. 자동완성기능


filetype plugin on

vim 7.? 버전 이상에선 위와 같이 적어주면 된다. tab ctrl+p로 자동완성이 가능하다.


set complets : 이것이 자동완성 기능이다.

c 소스를 vi로 연 후 (ctrl+p?) ctrl+space 를 눌러보자

 

 

이제 vim으로도 멋지게 코딩합시다.


8.4 plugin help page 세팅

doc 페이지 세팅

:helptags /usr/share/vim/vim73/doc/

다만 위의 폴더에 플러그인의 doc 문서가 존재해야 한다.


doc 페이지 보기

:help taglist (혹은 help tagli 까지만 해도 비슷한 류가 있다면 해당 doc 문서가 열린다)




------------------------

ctags 더 자세한 내용 :

http://www.viper.pe.kr/cgi-bin/moin.cgi/ctags_%EC%99%80_vi_%EC%82%AC%EC%9A%A9%ED%95%98%EA%B8%B0 


posted by cozyboy
: