티스토리 뷰

ilinux 기초 vi 사용법








메모장이 윈도우 운영체제의  기본 파일 편집기 라면, vi는 리눅스 운영체제의 

기본 파일 편집기 입니다.


리눅스 운영체제 파일 편집기는 vi와 vim이 있는데,

vi가 업그레이드 되서 vim이 만들어 졌다고 생각 하시면 됩니다.


vim은 따로 설치를 필요로 하기 때문에 bash셸에 기본적으로 설치 되어 있는

vi를 기준으로 설명하려고 합니다.


기본적으로 셸 스크립트에 vi라고 치면 나오는 화면 입니다.

간단한 기능 소개가 되어 있습니다.



vi의 기능은 정확히

'지정한 파일을 편집 합니다.' 파일명을 지정하지 않으면 빈 파일이 열리고,

 이 빈 파일의 파일명은 별도로 

지정 할 수 있습니다.






형식은 vi [ 파일명.. ] 으로 파일을 열 수 있습니다. 

test 라는 파일이 존재 할 때 vi test라는 파일을 열어서 

텍스트 편집을 할 수 있습니다.





처음 들어갔을 때 기본적으로 이동 모드 상태로 되어 있습니다. 

이동 모드 에서는 방향키로 커서를 움직일 수 있습니다.

내용을 추가하기 위해서는 입력 모드로 진입 해야 합니다.

기본적인 입력모드 진입 단축키는 i를 사용 합니다.




#방향기 외에 이동 모드에서 커서 이동 키


 h

커서를 왼쪽으로 이동 합니다.

l

 커서를 오른쪽으로 이동 합니다.

커서를 위로 이동 합니다. 

커서를 아래로 이동 합니다. 




ㅁ 입력 모드 



# 입력 모드 전환 명령 키

 명령 키

기능 

 i

커서 앞에 입력 합니다.(현재 커서 자리에 입력합니다.)

 a

커서 뒤에 입력 합니다.(현재 커서 다음 자리에 입력합니다.) 

 o

커서가 위치한 행의 다음 행에 입력 합니다.

I

커서가 위치한 행의 첫 칼럼으로 이동하여 입력 합니다.

A

 커서가 위치한 행의 마지막 칼럼으로 이동하여 입력 합니다.

 커서가 위치한 행의 앞 행에 입력 합니다.


      >> 입력 모드 전환 명령키가 많이 있지만, 주로 i 를 사용하니 크게 염두 하지 않아도 됩니다. 

           (i로 입력 모드 전환후 방향키로 이동하면 될뿐! )





↑i를 눌러 입력 모드로 전환하면, 글을 쓸 수 있습니다. 

입력 모드에서 이동 모드로 돌아 갈때는 ESC를 누르면 이동 모드로 돌아갈 수 있습니다.





↑이동 모드 기능 설명을 위해 인터넷에서 노래 가사를 하나 복사 해왔습니다.

putty는 편리하게 웹에서 글을 복사해서 바로 붙일 수 있습니다. 복사는 crtl+c를 통해서 하고

붙이기는 입력 모드(i)에서 마우스 우클릭을 하시면 됩니다.




ㅁ 이동 모드 

  

     >>앞으로 설명되는 명령어는 모두 이동 모드에서 동작하는 명령어 입니다.



 shift+6, shift+4 (행 시작과 끝으로 이동)



shift + 6번(^) : 커서를 행에 가장 처음으로 보낼 수 있습니다.

shift + 4번($) : 커서를 행에 가장 끝으로 보낼 수 있습니다.




 [[(대괄호 여는것 연속 2번), ]](대괄호 닫는것 연속 2번)  (문서 시작과 끝으로 이동)



[[(대괄호 여는것 연속2번) : 커서가 문서에 가장 첫 행에서 가장 처음으로 이동 합니다.

]](대괄호 닫는것 연속2번) : 커서가 문서에 가장 마지막 행에서 가장 처음으로 이동 합니다.







  x  (커서가 있는 한글자 삭제하기)




↑이동 모드에서 x버튼을 누르면, 커서가 있는 글자를 삭제 하겠다는 말 입니다.

한글자씩 삭제 할 수 있습니다.

?x( ?=숫자 ) 커서가 잇는 그 글자를 포함하여 ?에 지정한 글자수 만큼 삭제 할 수 있습니다.

(ex. 4x,8x,9x...)




  u , crtl+r (뒤로가기, 앞으로가기)




↑이동 모드에서  u버튼을 누르시면, 수정한 내용을 되돌릴 수 있습니다.(뒤로 가기)

ctrl + r을 누르면 이전 작업 취소한 것을 취소 할 수 있습니다.(앞으로 가기)




  dd  (행 삭제하기)



dd 를 누르시면 커서가 있는 행 전체를 삭제 할 수 있습니다.


dd 명령어 역시 원하는 숫자와 함께 사용하면

커서가 있는 행을 포함하여 지정한 행 수 만큼 삭제 할 수 있습니다.

(ex. 4dd, 5dd, 6dd,,,)



  yy, yw, p, P(대문자)  (행 복사하기, 붙여 넣기)




↑이동 모드에서 yy 를 누르면 커서가 있는 행을 복사 할 수 있습니다.

이는 p를 눌러 커서가 있는 행 밑으로 붙일 수 도 있습니다.(대문자 P는 행 위로 붙입니다.)


yy역시 앞에 숫자를 붙여 사용할 수 있습니다.

?(숫자)yy : ?(숫자)만큼 커서가 있는 행을 포함하여 복사 할 수 있습니다.



yw를 사용하시면 단어를 복사 할 수 있습니다. 단어의 기준은 띄어 쓰기 이므로 유의 하시기 바랍니다.

단어를 붙여 넣을때도 역시 p를 사용하는데 다른점은 소문자 p는 커서 오른쪽에 붙여 넣기 이고,

대문자 P는 커서 왼쪽에 붙여 넣습니다.




  v  (블럭 씌우기)



↑이동 모드에서 v를 누르시면 블럭을 씌울 수 있습니다.

블럭을 씌운 상태에서 yy가 아닌 y를 누르시면 블럭 씌운 전체를 복사 할 수 있습니다.

(가독성을 위해 개행을 했습니다. 원래 대로라면 p버튼을 누른 행 바로 밑에 붙여 집니다.)





※tip. 몇 십만줄이 넘는 파일의 내용을 한번에 지우는법!




↑파일의 내용일 길어서 일일이 삭제하기 번거로울때 문자 한번에 삭제할 수 있는 방법이 있습니다.

1.문장 시작 첫글자에 블럭을 씌운다.

2.]](닫는 대괄호 연속 2번) 눌러 준다.

3. 남은 1행은 방향키를 이용해 덮어준다.

4. x버튼을 눌러주면 끝




사실 d + ]]를 이용하시면 더 간단하게 삭제 할 수 있습니다..

d + ]] 커서가 있는 위치부터 아래 까지 전부 지우기










  / (검색 하기)





↑이동 모드에서 / 를 누르고 찾고자 하는 단어를 쓰고 엔터를 누르시면 해당 단어로 커서가 이동합니다.

해당 단어를 다음 문장에서 찾을 때는 n(next) 을 누르시면 다음 문장 해당 단어로 이동합니다.












 ㅁ 명령 모드 

        


         >>명령 모드는 이동 모드에서 :(콜론) 을 눌러 사용할 수 있습니다.


↑vi내용을 수정 했습니다! 

이동 모드에서 : 을 누르시면 명령 모드를 사용할 수 있습니다.









 :w, :q, :wq, :q! (저장하기, 종료하기, 저장 후 종료하기, 강제 종료 하기)





↑명령모드에서 :w명령을 이용해 파일을 저장 할 수 있습니다.

vi는 종료되지 않고 수정 내용이 적용 됩니다.





↑명령 모드에서  :q를 명령을 사용하면 종료할 수 있습니다. 

단, :q명령을 입력할 때는 파일에 수정한 내용이 없어야 합니다.




↑수정한 내용이 있는데 :q 명령을 이용해 종료 하려고 한다면 종료 할 수 없고 에러 메세지가 나옵니다.



이럴때는 :q!를 이용해 강제 종료 하실 수 있습니다.

단, 수정한 내용은 저장되지 않습니다.




↑수정한 내용을 저장하고 종료 하고 싶은때는 :wq 명령을 사용하시면 

수정한 내용을 저장 후 vi를 종료 할 수 있습니다.





즉, 수정한 내용이 있다면, 저장 후 종료해야 vi를 종료 하실 수 있습니다!

그렇지 않으면 강제 종료를 해야 하는데 이렇게 되면

수정 내용을 적용할 수 없습니다.




 :set nu ,  :set nonu (행에 번호 붙이기, 번호 붙이기 제거)




↑:set nu 명령어를 통해 행에 번호를 붙일 수 있습니다.

이는 가독성을 높이고 행을 구분하는데 좋은 수단 입니다.

필요에 따라 :set nonu 명령어를 통해 번호를 제거 할 수 도있습니다.



 :s, :%s (문서 내용 치환하기)




↑커서가 있는 행 lg를 sk로  치환하는데, 가장 처음에 있는 lg만 sk로  한개만 치환된다. 






↑1번행 부터 3번행  까지 lg를 sk로 치환하는데 각 행마다 가장 처음에 있는 lg만 sk로 바꿔 줍니다.




↑1번행 부터 3번행 모든 lg를 sk로 바꿔 줍니다. g(global)를 이용해 모든 문자를 바꿀 수 있습니다.





↑%s를 이용해 문서 전체에 치환을 적용할 수 있습니다. 

:%s/lg/sk 는 문서 전체에 lg를 sk로 치환하는데 각 행마다 처음에 있는 lg만 sk로 치환 됩니다.





↑뒤로 g(globla)를 붙여 주어, 문서 전체 모든 행에 lg를 sk로 치환 할 수 있습니다.




이와 같은 방법은 문서 전체의 내용을 수정 할 때 유용하게 사용할 수 있습니다.






지금 까지 익힌 모든 명령어를 다 외워야 할 필요는 없습니다.

필요할때 그때그때 찾아서 사용하시다 보면, 자연스럽게

손에 익고, 눈에 익어 사용하실 수 있습니다.



















===============================================================

참고 : 페도라 리눅스 시스템&테트워크 -한빛 아카데미