리눅스2007. 4. 11. 12:59
커서 이동 
k 커서를 위로 움직임
j 커서를 아래로 움직임
h 커서를 왼쪽으로 움직임
l 커서를 오른쪽으로 움직임
- 커서를 줄의 처음으로 옮김
e, E 다음단어의 끝으로, 문자단위 이동
w, W 다음단어의 처음으로, 문자단위 이동
$ 줄의 마지막으로
0 줄의 처음으로
^ 줄의 처음으로(공백이 아닌 처음시작되는 문자)
Shift+g 문서의 마지막으로 이동한다.
gg, 1g 문서의 처음으로 이동한다.
1대신 다른 숫자를 입력하면 해당 숫자의 라인으로 이동한다.
), ( 다음, 이전 문장의 처음으로
}, { 다음, 이전문단의 처음으로
]], [[ 다음, 이전 구절의 처음으로
화면 스크롤 
Ctrl +F 한 화면 을 앞으로 스크롤
Ctrl +B 한 화면 을 뒤로 스크롤
Ctrl +D 반 화면 을 앞으로 스크롤
Ctrl +U 반 화면 을 뒤로 스크롤
Ctrl +E 한줄 앞으로 스크롤
Ctrl +Y 한줄 뒤로 스크롤
Shift + h 화면의 맨 윗줄로
Shift + m 화면의 중간줄로
Shift + l 화면의 맨 아랫줄로
마크 이동 
일종의 책갈피 기능이라고 보면 된다.
자주 참조해야할 라인에 마크를 해놓고 필요할때 곧바로 마크된 영역으로 이동하기 위해서
사용한다.
마크는 mx 형식으로 사용할수 있다.
x 는 (a~z)까지의 문자로 마크된 영역의 이름을 지정하기 위해서 사용한다.
마크된 영역으로 이동하기 위해서는 'x 와 `x 를 사용한다.
'x 는 마크된 라인의 가장 앞으로 이동하고,
`x 는 마크된 라인의 정확한 위치로 이동한다.
입력 명령 
i 현재위치에서 삽입
I 현재줄의 처음위치에서 삽입
a 현재위치에서 한칸앞으로 이동해서 삽입
A 현재줄의 마지막위치에서 삽입
o 새로운 줄을 커서 아래에 연다
O 새로운 줄을 커서 위연다
s 현재 위치의 문자를 지우고 입력모드로 들어간다.
S 현재위치의 라인을 지우고 입력모드로 들어간다.
복사,삭제,붙이기 
y 한줄 복사
yn 현재 라인에서부터
n라인만큼을 복사
p 복사된 내용 붙이기
dd 한줄삭제
dw 한단어 삭제
Shift+d,
d$ 현재커서 위치에서 마지막까지 삭제
Shift+j 현재 행의 개행문자를 제거한다. 즉 아래라인을 현재라인에 덧붙인다.
Undo (되돌리기) 
vim 은 다중의 undo 기능을 지원한다. 뒤로 되돌리고 싶다면 단지 'u'키만 입력하면 된다.
블럭지정 
v 단어단위로 블럭지정이 가능하다.
블럭범위는 이동명령인 'hjkl' 로 원하는 범위 만큼 지정할수 있다.
Shift+v 라인단위 블럭지정이다.
라인전체가 선택되며, 위아래 이동명령 'hj' 으로 범위 지정이 가능하다.
Ctrl+v 블럭단위 블럭지정이다.
4각형의 블럭지정이 가능하며 이동명령인 'hjkl' 로 원하는 범위를 지정할수 있다.
Shift+v 와 같이 블럭지정을 한후 Shift+G 를 입력하면 현재라인부터
마지막 라인까지가 블럭 지정이 될것이다.
편집(복사, 삭제, 붙이기) 
y 지정된 블럭을 복사한다.
p 복사된 블럭을 현재라인(커서) 아래에 붙인다.
d 지정된 블럭을 삭제한다. dd 현재라인을 삭제한다.
찾기/치환 
사실 찾기 치환의 기능을 제대로 이해하고 사용하기 위해서는
정규표현식(regular expression) 에 대한 이해가 필요로 하는데,
이것은 다음의 사이트를 참조하기 바란다.
정규 표현식의 간략한 소개 먼저 찾기 기능에 대해서 알아보겠다.
찾기기능은 ':/패턴/' 를 이용 하면된다.
찾기 원하는 문자혹은 패턴을 입력하고 엔터키를 누르면 현재 커서위치에서
가장 가까운 곳에 위치한 문자열로 커서를 이동시킨다(문서 아래방향으로).
다음 문자열을 찾기를 원한다면 'n'키를 누르면 된다.
문서에서 가장 마지막에 이르르게 되면, 문서의 가장처음부터 다시 찾기 시작한다.
'Shift+n' 을 이력하면 반대 방향(문서의 위쪽으로)으로 찾기를 시작한다.
치환이야 말로 vim 의 꽃이라고 할수 있다.
:[범위]s/[oldpattern]/[newpattern]/ 의 형식으로 사용하면 된다.
범위 지정은 visual block 을 이용할수도 있으며, 직접 범위를 입력할수도 있다.
visual block 를 이용한 치환은 visual block 를 지정한다음
':' 를 입력해서 ex 모드로 넘어가면 된다.
그리고나서 ':'<,'>s/[oldpattern]/[newpattern/' 과 같은 방법으로 치환하면 된다.
visual block 를 사용하지 않고 직접범위를 입력할수도 있다.
:[시작],[마지막]s/[old]/[new]/ 식으로 범위를 지정하면 된다.
여기에는 몇가지 지정된 범위를 위한 특수 기호들이 있다.
'%' 는 전체문서(처음부터 끝까지), '.' 은 현재, '$' 은 마지막 을 나타낸다.
숫자를 입력할경우 숫자는 라인을 나타낸다. 다음은 간단한 사용예이다.

# 문서 처음부터 마지막까지의 char 를 _char_ 로 치환한다.
:%s/char/_&_/g# 현재(커서위치)부터 마지막까지의 char 를 _char_ 로 치환한다.
:.,$s/char/_&_/g# buf_.*[255], buf_in[255], buf_get[255] 와 같은
문자열을 hello 로 변경한다. :1,10s/buf_.*\[255\]/hello/g

 
 마지막에 쓰인 'g' 는 global 이다. 즉 해당 라인 전체에 걸쳐서 검색후 치환한다. 
'g' 를 사용하지 않을경우 라인에서 처음에 검색된 문자만 치환하고 다음 라인으로 넘어간다.
저장,열기,종료 
:e [filename] filename 으로 파일열기
:q, :q!, :wq 종료, 강제종료, 저장후 종료
:w, :w [filename] 현재파일명으로 저장, filename 로 저장
:<범위>w [filename] 지정한 범위만 다른 파일로 저장
:e [filename] filename 을 편집하기 위해서 연다 ZZ 지금파일을 저장하고 vim 을 종료한다.
:f 현재 작업중인 파일의 이름과, 라인수를 출력한다
화면 나누기 
vim 은 수평나누기와 수직나누기를 제공한다.
수평나누기는 ":split [파일이름]" 수직나누기는 "vs [파일이름]" 으로 나눌수 있다.
파일이름을 지정한 경우, 새로 만들어진 창에는 파일이름 을 가지는 파일이 열리고,
파일이름을 지정하지 않을경우 똑같은 파일이 열린다.
이 기능은 현재 파일의 다른 부분을 참조하고 싶을때 유용하게 사용할수 있다
(참조하는 부분으로 이동하기 위해서 왔다갔다 하지 않아도 되므로).
또한 ":10split [파일이름]", "10vs [파일이름]" 등으로 창의 크기를 조절해 줄수도 있다.
창 나누기는 2개 이상 나누기도 가능하다.
화면 이동 
명령 모드에서 CTRL+ww 를 입력하면 된다.
그러면 아래창으로 이동한다.
임의로 이동하기 위해서는 Ctrl+w 를 입력한 상태에서 이동명령[hjkl]를 이용하면
원하는 방향으로 창이동이 가능하다.
파일 네비게이션 
vim 6.0 부터는 파일네비게이션 기능이 존재합니다.
예를들어 vi 로 파일을 열때 파일을 디렉토리로 지정하면 해당디렉토리의 내용이
네비게이션 되고, 디렉토리 이동및 파일 선택이 가능하다.

vi ./ # 현재 디렉토리내용을 네비게이션 해준다.

 
 vi 가 실행되 상태에서 수직창 나누기 기능을 이용해서 ":20vs ./" 명령을 내려보자 
그럼 그림과 같이 오른쪽에 파일 네비게이션 바가 생김을 알수 있다.
그림 1. 파일네비게이션을 만든 화면

 

 

이제 열기를 원하는 파일위치에 가서 shift+o 를 입력해보자, 
그럼 옆의 편집창에 새로운 파일이 열리는것을 알수 잇을것이다.
여기에 더해서 편집장을 split 로 나누면, 여러개의 파일을 오가면서 편집이 가능해질 것이다.
여러개의 파일 편집하기 위에서는 창나누기를 이용한 여러개의 파일편집에 대해서 알아봤는데,
또다른 방법이 있다. 처음에 vim 을 통하여 여러개의 파일을 open 하고 여러개의 열린 파일을
이동하면서 편집하는 방법이다. 먼저 vim을 다음과 같이 실행시킨다.
 [yundream@localhost test]# vim file1.txt file2.txt ...
 
 그러면 처음 화면은 file1.txt 편집화면일것이다.
2번째 파일인 file2.txt 편집화면으로 넘어가길 원한다면(앞에 있는 파일 편집)
 :n
 
 file2.txt 에서 file1.txt 를 편집하길 원한다면(뒤에 있는 파일편집)
 :e#
 
 split 를 이용해서 여러개의 파일을 편집할때와 마찬가지로,
각종 편집기능(복사,삭제,붙이기)이 서로 공유되므로 편하게 작업이 가능하다.
잠시 쉘로 나가기 보통 vim상에서 쉘명령어를 실행시키기 위해서
:![명령어] 를 사용하는데, 이것 보다는 Ctrl+z 를 이용해서 쉘로 빠져나가서
작업하는게 더 편하다. sehll 이 job control 기능을 이용한것으로,
쉘에서 원하는 작업을 수행하후 fg 명령을 이용해서 다시 vi 편집 상태로 되돌아 올수 있다.
vim 사용자를 보면 가끔 쉘작업을 하기 위해서 vim 을 아예 종료 시켜서 쉘로 빠져나간
다음에 작업을 하고 vim 을 다시 실행시키는 경우가 있는데,
이제는 그럴필요가 없이 좀더 편하게 작업을 할수 있을것이다.
선택된 block 를 다른 이름으로 저장하기 split 기능을 이용해서 창을 나누고,
원하는 블럭을 선택해서 복사한다음에, 새로만든창에 가져다 붙이기를 하면 된다.
그러나 이방법은 조금 복잡한 감이 없잖아 있다.
이럴때는 블럭을 선택해서 :'<,'>w [파일명] 하면 좀더 간단하게 원하는 작업을 수행할수 있다.
빠른 괄호 이동 C나 C++ 을 사용하다보면 제어문이나 함수에서 많은 괄호('{','(')를 만나게 된다.
이때 괄호의 제일 마지막으로 이동하고 싶을때가 있을것이다.
이럴때는 ']}' 를 사용하면 된다.
'[{' 를 사용하면 괄호의 처음으로 이동한다.

위치 마크(mark)하기
일종의 북마크기능으로 자주참조할만한 라인을 마킹해두고 필요할때
간단히 해당 마킹지역으로 이동하기 위해서 사용한다.
마킹을 위해서는 명령모드에서 m키를 눌러서 마킹모드로 들어가면 된다.
그리고 영문 [a-zA-Z]키중 아무거나 눌러주면 된다.
만약 a를 눌러주었다면, 현재라인은 a이름으로 마킹된다.
이후 작업을하다가 a마킹라인으로 가고 싶다면 'a 해주면된다.
이상태에서 원래라이으로 되돌아가고 싶다면 ''를 눌려주면 된다.
물론 다중마킹도 허용한다. 마킹할수 있는 문자는 단일영문자이다.
마킹에 사용되는 영문자는 대소문자를 구분함으로 최대마킹가능한 수는 27*2가 될것이다.

폴더(접기) 기능이용하기
vim 6.0 에 새로이 포함된 좋은 기능으로 코드의 특정영역을 접을수 있다.
그럼으로 코드를 분석할때 쓸데 없는 부분을 감춰줘서 좀더 편하게 분석이 가능합니다.
visual block 를 이용해서 원하는 영역을 선택한다음 :zf 를 이용하면 해당영역이 접힌다.
:zo 를 사용하면 접힌영영을 원상태로 복구할수 있고 :zc 를 사용하면 해당영역을 다시 접을수 있다.
또한 다중 접기를 허용해서 접근구역을 다시 접을수도 있다.

간단한 man 페이지 참조
vim 을 이용 코딩중에 함수의 프로토 타입이 생각나지 않을때 주로 man page 를 참조하게 된다.
보통은 창을 하나따로 띄워서 그곳에서 man page 를 보는데, 코딩중에 간단하게 해당 함수에 대한 man page 를 볼수 있다.
man page 를 원하는 함수 위로 커서를 옮긴다음 Shift + k 를 입력하면 함수의 man page 가 뜰것이다.
'q' 를 입력해서 man page 를 종료시키면 원래의 vim 화면으로 되돌아온다.

함수/변수명 자동완성
코딩중에 가장 범하기 쉬운 잘못중의 하나가 변수명및 함수명 오타일것이다.
또 변수명이 기억이 잘 나지 않아서 처음 선언한곳을 다시 확인하는 작업역시 코딩을 매우 번거롭게 한다.
이때 함수 자동완성 기능을 이용하면 이러한 염려들을 줄일수 있다.
int client_sockfd 라고 변수 선언을 했다고 하자.
코딩중에 client_sockfd 를 쓸일이 있다면 cli^p 를 입력해보자.
그러면 변수 이름이 자동으로 완성되는것을 볼수 있을것이다.
^p는 Ctrl+p 이다.
ctags 를 이용한 소스 분석 
소스를 분석하는데 있어서 가장 중요한 것은 역시 함수를 분석해서, 함수가 어떤일을 하는지 알아내는 것이다.
ctags 를 이용하면 이러한 쏘쓰 분석작업을 좀더 수월하게 할수 있다.
ctags 와 관련된문서는 ctags 를 이용한 쏘쓰 분석 을 참고하기 바란다.

자동들여쓰기
프로그래밍 할때 indent 는 쏘쓰코드를 보기좋게 만들기 위한 필수 사항이다.
보통 tab 을 주로 쓰는데,
 :set ai
 
 명령을 이용하면 자동적으로 indent (auto indent) 를 적용시켜주므로,
좀더 코딩에만 집중할수 있도록 도와준다.
 :set noai
 
 명령을 사용해서 auto indent 상태를 해제할수 있다.
요즘의 vim 은 기본적으로 auto indent 상태이므로, 별다른 설정없이 편하게 사용가능하다.
그러나 웹에서 가져다 붙이기를 할때 여기에 auto indent 가 적용되어서 것잡을수 없이
tab 이 들어가는 경우가 생길때도 있는데, 이럴때 set noai 를 이용해서 auto indent 를
해제하고 가져다 붙이기를 하면 된다.
탭사이즈 조정하기 소스에서 indent 를 위해서 주로 탭을 사용하는데,
보통 이 탭 사이즈는 8로 되어 있다.
그런데 8이란 탭사이즈가 때로는 너무 커서, 쏘쓰가 화면밖으로 나가서 오히려 쏘쓰 보기를
어렵게 만들때도 있다. 이럴때 는 탭사이즈를 줄여야 하는데 다음과 같은 명령을 통해서
탭사이즈 변경이 가능하다.
 :set ts=4
 
 라인 넘버링 
코딩하다보면 라인넘버가 있으면 할때가 있다. 그럴때는
 :set nu
 
 하면 된다.
그림 2. 라인 넘버링 
 

 

 

라인넘버를 없애고 싶다면, 
 :set nonu  하면 된다.

'리눅스' 카테고리의 다른 글

tar gzip 사용법  (0) 2007.05.08
ctrl+z로 나갔을때.........  (0) 2007.04.18
리눅스 eclipse 한글 설정하기  (0) 2006.11.30
putty에서 irssi 한글로 채팅하기  (0) 2006.11.13
irssi 한글 보이게 하기..  (0) 2006.11.13
Posted by 동동(이재동)