vi 커맨드

2010. 2. 5. 01:2799. 정리전 - IT/13. Unix 얇팍지식


◈ VI Editor 사용법

1. ^M삭제
vi로 어떤 파일을 열면 ^M 이라는 문자가 각 줄 끝에 붙어 있는 경우가 있다.
이것은 문자 치환 명령으로 간단하게 없앨 수 있다.
( ^M 은 Ctrl + v 을 누르고 M 을 입력하면 나타나는 기호이다. )
(ctrl+v)M 은 ctrl과 v를 눌러준후, ctrl키를 떼지 말고 바로 m을 눌러주시믄 됩니다.
위는 정규표현식을 이용한것이고, 형식은 %s/이것을/요걸로/g입니다
그럼 문서안의 모든 "이것을" "요걸로" 바꾸게 되죠.
단, ^M의 경우 ctrl+M의 뜻인데 단순히 문자로 ^M을 바꾸라도 해도 인식을 못하기 때문에, 위처럼 (ctrl+v)M으로 해주셔야 합니다.


문자 치환 명령
 :%s/찾을문자/바꿀문자/g    <== g 옵션은 전체 문서에서 모두 바꾸라는 것.

고로 ^M 없애는 방법은
:%s/(ctrl+v)M//g


2. 파일의 내용 뒤집기 (많이 사용하진 않을 것 같긴한데...)

 :g/^/m0

아주 쉽죠~


3. 대소문자 구별없이 문자 찾기

당연히 vi는 대소문자를 구별한다. 하지만 때로는 구별없이 검색이 필요할 경우가 많다.

 :set ic
라고 옵션을 변경하면 구별없이 모두 찾는다.
다시 ":set ic" 명령을 사용하나서 "LINK"라고 검색을 하면 아래와 같이 상단의 소문자 "link"를 찾아서 커서가 깜빡이고 있는 것을 볼 수 있다.

 

4. 탭 설정
특히나 프로그램을 짜 놓은 것을 서버서에 vi로 열면 탭의 길이가 맞지 않아서 난감할 때가 많다.
이 때는 vi의 탭 길이를 조절해서 보면 작업이 편리하다.

 :set tabstop=3    <== 3이라는 숫자가 탭의 길이다.


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

⊙ FILE open과 저장
Unix의 cshell mode에서 vi filename(각자 이름을 지정)을 하면, 해당 file이 editing mode에 들어간다.

:wq
File을 저장하고 빠져나오려면 세 문자 :wq를 치면 된다. 여기서 "w"는 write에 해당되고, "q"는 quit에 해당된다. 그러므로, 이 화일을 write하고 그 다음에 quit(빠져나오다)한다는 명령어이다.

:q!
File을 수정하였는데, 원래의 화일 내용으로 되돌리고 싶을 때는 세 문자 :q!를 친다. 그러면, 이 file이 open하였을 때의 내용이 되고 수정한 것은 저장되지 않는다.

:q
화일을 수정하지 않은 상태에서 빠져나오는 명령어.

:w
화일 편집 과정에 두 문자 :w를 치면 현재 화면의 내용이 저장되고 계속해서 화일을 편집할 수 있다. 이 경우는 시스템이 불안하여 중간에 화일을 날려버리는 것을 방지하기 위해 종종 화일의 내용을 저장한다.

u
방금 행해졌던 명령을 취소하고 싶을 때, u를 친다. 여기서 "u"는 undo의 의미다.

⊙ Cursor 이동(move) 명령

h : 왼쪽 한 글자 이동
l : 오른쪽 한 글자 이동
k : 위쪽 한 줄 이동
j : 아래쪽 한 줄 이동
w : 오른쪽 한 단어의 처음 글자로 이동
b : 왼쪽 한 단어의 처음 글자로 이동
e : 오른쪽 한 단어의 마지막 글자로 이동
0 : 숫자 0을 치면, 현재 줄의 첫 글자로
$ : 현재 줄의 마지막 글자로 이동한다.

CTRL+f
이것은 Control Key와 f key를 동시에 누른다. 그러면, 한 화면(약 20줄) 앞으로(아래쪽으로) 이동한다.

CTRL+d
이것은 Control Key와 d key를 동시에 누른다. 그러면, 반 화면(약 10줄) 앞으로(아래쪽으로) 이동한다.
CTRL+b
이것은 Control Key와 b key를 동시에 누른다. 그러면, 한 화면(약 20줄) 뒤로(위쪽으로) 이동한다.

CTRL+u
이것은 Control Key와 u key를 동시에 누른다. 그러면, 반 화면(약 10줄) 뒤로(위쪽으로) 이동한다.

G 대문자 G를 치면, 화일의 맨 아랫줄 첫 글자로 이동한다.
1G 1을 치고 대문자 G를 치면, 첫번째 줄로 이동한다.
nG
n에 해당되는 숫자(예를 들면 20)를 치고 대문자 G를 치면, n번째(20번째) 줄로 이동한다.
⊙ 입력(Insert) 명령
입력 mode에서 빠져나오려면, Esc key를 친다.
i
insert. 현재 cursor 위치에서 입력 mode로 바뀐다.
a
append. 현재 cursor 위치 다음 부터 입력 mode로 바뀐다.
A
대문자 A를 치면, 현재 cursor 위치의 줄 맨 뒤부터 입력 mode로 바뀐다.
o
open. 현재 cursor 위치의 다음 줄에 새로운 줄이 입력 mode로 바뀐다.
O
대문자 O를 치면, 현재 cursor 위치의 윗 줄에 새로운 줄이 입력 mode로 바뀐다.
s
substitute. 현재 cursor 위치의 한 글자가 삭제되고, 입력 mode로 바뀐다.
3s
현재 cursor 위치에서 세 글자가 삭제되고, 입력 mode로 바뀐다.
cw
change word. 현재 cursor 위치에서 단어(word) 끝까지 글자가 삭제되고, 입력 mode로 바뀐다.
3cw
세 단어(word)를 삭제하고 입력 mode로 된다. 3cw = three change word.
.
입력 mode에서 빠져 나와서, 다른 위치에 같은 문자(들)를 입력하고 싶으면 .을 친다. 여기서 "."은 마침표이다.
r한 문자를 바꾸는 명령어. r은 replace의 의미다. 입력 mode로는 되지않는다.

 

⊙ 삭제(delete) 명령
x
현재 cursor 위치의 글자 한 개를 지운다.
2x
현재 cursor 위치의 글자를 포함해서 앞 방향으로 두 개의 문자를 지운다.
dw
현재 cursor 위치의 단어(word) 끝까지 문자가 삭제된다. delete word.
3dw
세 단어(word)를 삭제한다.
dd
현재 cursor 위치의 줄(line)이 삭제된다.
5dd
현재 cursor 위치의 줄(line)을 포함해서 앞으로 5줄이 삭제된다. 방금 삭제된 것을 되물리고 싶을 때, u를 친다.

⊙ 복사(copy) 명령
yy
한 줄을 복사하고자 할 때, 해당 줄에 가서 yy를 치고, Cursor를 이동시켜서 p를 치면 cursor의 다음 줄에 그 line이 복사된다. 여기서 yy는 yank의 의미고, p의 의미는 put이다. 이 경우에도 되물리고 싶을 때 u를 치면 된다.
3yy
세 줄을 복사하고자 할 때, 세 줄의 첫째줄에 가서 3yy를 치고, 복사하고자 하는 곳에 가서 p를 치면된다.

마우스로 복사
마우스의 왼쪽 button으로 복사하고자 하는 block(한 문자, 한 줄, 여러 줄)을 긁어면 검게된다. 그리고, 입력하고 싶은 곳에 입력 mode로 바꾸어서, 마우스의 오른쪽 button을 누르면 앞의 block이 복사된다. 입력 mode를 빠져나오기 위해 Esc key를 친다.

 

⊙ 고급 명령
:se nu
colon(:)을 치고 se space nu를 치면, 현재 화일의 줄(line) number가 생긴다. 그래서, se는 set의 의미이고, nu는 number의 의미이다.

:se nonu
colon(:)을 치고 se space nonu를 치면, 현재 화일의 줄(line) 번호가 없어진다. nonu는 no number의 의미다.

:1, 20 copy 50
줄 1번에서 20번까지를 줄 번호 50 다음 부터 20줄(line number 1에서 line number 20까지)을 복사한다. 일반형은 ":n1, n2 copy n3"이고, 이 의미는 줄 번호 n1에서 n2까지를 줄 번호 n3 다음에 복사시킨다는 것이다. 이 명령을 취소하고싶으면 u를 친다.

:3, 10 move 20
줄 3번에서 10번까지를 줄 번호 20 다음으로 이동시킨다. 물론 이 명령을 취소하고싶으면 u를 친다. 일반형은 ":n1, n2 move n3"이고, 이 의미는 줄 번호 n1에서 n2까지를 줄 번호 n3 다음으로 이동시킨다는 것이다.

:3, 10 s/my/your/g
줄 3번에서 10번까지에서 my를 your로 바꾼다. 여기서 s는 substitute의 의미고, g는 global 전체라는 의미다.
일반형은 ":n1, n2 s/string1/string2/g"이고, 줄 번호 n1에서 n2사이에 있는 string1을 string2로 바꾼다는 것이다. 이 명령을 취소하고싶으면 u를 친다.

 


CTRL+e
Cursor는 움직이지 않고 화면이 위로 이동한다. 아래쪽에 있는 줄이 나타난다.

CTRL+y
Cursor는 움직이지 않고 화면이 아래로 이동한다. 위쪽에 있는 줄이 나타난다.

~ (tilde 기호)
현재 cursor가 영문자 위에 있을 때, tilde 기호 ~를 치면 대문자는 소문자로 바뀌고, 소문자는 대문자로 변환된다.

/aaa
slash /를 치고 찾으려는 문자 스트링(예를 들면, aaa)을 치면, 앞 방향(화면 아래 방향)으로 해당되는 문자 스트링을 찾는다. 여기서 n을 치면 다음(next) 같은 문자를 찾아서 cursor를 이동시킨다.

?bbb
의문부호 ?를 치고 찾으려는 문자 스트링(예를 들면, bbb)을 치면, 뒤 방향(화면 위 방향)으로 해당되는 문자 스트링을 찾는다. 여기서 n을 치면 다음(next) 같은 문자를 찾아서 cursor를 이동시킨다. 

[출처] vi editer 사용법|작성자 사막