vim의 문자열 바꾸기 기본 형식

 

vim에서 문자열 바꾸기를 할 때에는 기본적으로 다음과 같은 형식으로 명령 라인에 명령어를 입력한다

 

:[범위]s/[바꿀 문자열]/[바뀐 문자열]/[바꾸기 옵션]

 

 

위의 명령은 "문서의 이 [범위]에서 [바꾸기 옵션]에 따라 [바꿀 문자열][바뀐 문자열]로 바꾼다."라고 해석한다.

 

[범위] [바꾸기 옵션]

 

우선 [범위][바꾸기 옵션]에 대해서 알아보자.

 

[범위]는 앞서 포스팅한 명령 라인에서 범위지정하기를 그대로 사용하면 된다. 단지, [범위]를 생략할 경우 현재 커서가 위치한 행에서만 문자열 바꾸기가 일어난다는 점이 다르다.

 

 

그리고 [바꾸기 옵션]은 다음과 같다.

 

 

[바꾸기 옵션] 생략 [범위] 내의 각 행에서 처음 일치하는 문자열만 바꿈

g [범위] 내에 행에서 모든 문자열을 바꿈

i 대소문자를 무시하고 바꿈

c 문자열을 바꿀 때마다 바꿀지 여부를 확인

  (y/n/a/q/l/^E/^Y)

  y : 현재 문자열을 바꾸고 다음 바꿀 문자열로 넘어감

  n : 현재 문자열을 바꾸지 않고 다음 바꿀 문자열로 넘어감

  a : 모든 문자열을 바꾸고 종료

  q : 더 이상 바꾸지 말고 모두 종료

  l : 현재 행만 바꾸고 종료

  ^E : [Ctrl+E], 아래로 한 행 화면 스크롤

  ^Y : [Ctrl+Y], 위로 한 행 화면 스크롤

 

일단, 아래의 사례를 참조하자. 아래의 vim 텍스트 맨 앞의 번호들은 행번호이다. :set nu로 행번호를 노출시킨 상태이다. 커서는 1행의 첫 번째 one 바로 옆에 위치해 있다. 이 상황에서 명령어를 입력한다.

 

1 one one One ONE

2 one one One ONE

one one One ONE

one one One ONE

 

우선문자열 one을 two로 바꾸려고 한다따라서 [바꿀 문자열]은 one이고 [바뀐 문자열]은 two가 된다.

 

:s/one/two 현재 커서가 위치한 행에서 one을 찾아 처음 일치하는 문자열two로 바꿈

 

two one One ONE

2 one one One ONE

3 one one One ONE

4 one one One ONE

 

[범위]가 생략되어 커서가 위치해 있던 1행에서만 문자열을 탐색했고 [바꾸기 옵션]이 생략되어 처음 일치하는 one만 two로 바뀜

 

:%s/one/two 문서 전체에서 one과 일치하는 문자열을 찾아 각 행에서 처음 일치하는 문자열two로 바꿈

 

1 two one One ONE

2 two one One ONE

3 two one One ONE

two one One ONE

 

[바꾸기 옵션]이 생략되어 각 행에서 처음 일치하는 one만 two로 바뀜

 

:%s/one/two/g 문서 전체에서 one과 일치하는 문자열 모두two로 바꿈

 

1 two two One ONE

2 two two One ONE

3 two two One ONE

two two One ONE

 

[바꾸기 옵션]이 g이므로 각 행에서 든 일치하는 one 문자열이 two 문자열로 바뀜

 

:%s/one/two/gi 문서 전체에서 대소문자와 상관없이 one과 일치하는 문자열 모두two로 바꿈

 

1 two two two two

2 two two two two

3 two two two two

two two two two

 

[바꾸기 옵션]은 사용하려는 옵션을 붙여서 동시에 옵션을 적용할 수 있어 gi 옵션으로 대소문자 상관없이 모든 행에서 전부 바뀌게 됨

 

:2,3s/one/two/g 2, 3번 행에서 one과 일치하는 문자열 모두two로 바꿈

:+1,+2s/one/two/g 커서가 1행에 있으므로 2(+1), 3(+2)번 행에서 one과 일치하는 문자열 모두 two로 바꿈

 

1 one one One ONE

2 two two One ONE

3 two two One ONE

4 one one One ONE

 

위의 두 가지 명령 모두 2번행과 3번행에 적용됨

 

Anki 파일

 

아래는 본 포스팅의 내용을 갈무리하기 위한 Anki 파일입니다. 참고하시기 바랍니다. 

 

 

 

 

043 vim 문자열 바꾸기 기본 형식 및 범위와 옵션.apkg
다운로드

 

명령 라인에서 범위 지정 명령하기 개요


vim에서는 특정한 범위를 지정하여 해당 부분에만 명령을 적용할 수 있다. 이에 따라 다양한 범위지정 방식을 갖고 있는데 이러한 범위 지정 방식과 명령어들을 결합하여 효과적인 명령을 내릴 수 있다. 앞서 배운 비주얼 모드, 비주얼 라인 모드, 비주얼 블록 모드도 일종의 범위 지정에 해당하지만 지금부터 공부할 것은 명령 라인에 명령어를 입력할 때 필요한 범위를 지정하는 것이다


명령 라인에 범위를 정하여 명령어를 입력하는 형식은 다음과 같다


:[시작하는 행],[끝마치는 행][명령어]


[시작하는 행]시작하는 행의 행수이고, [끝마치는 행]끝마치는 행의 행수이며 쉽표(,)로 구분한다. 가령, 20,30 은 문서에서 20행에서 30행까지 명령어를 적용하라는 뜻이다.

만일, [시작하는 행],[끝마치는 행] 형식이 아니고 그냥 행수 하나만 있을 경우 해당 행에만 명령어를 적용하라는 뜻이다. 다음의 사례들을 보자.

 

:10d 10번 행 삭제

:20y 20번 행 복사

:1,9d 1번행에서 9번행까지 삭제


범위 지정에 쓰이는 특수기호를 이용하면 좀 더 편하게 범위를 지정할 수 있다. 다음은 범위 지정에 쓰이는 특수 기호들이다. 


(.) 현재 행을 의미

달러($) 마지막 행을 의미

+# 현재 위치에서 #만큼 아래 행을 의미

-# 현재 위치에서 #만큼 위의 행을 의미

퍼센트(%) 현재 편집중인 문서(파일) 전체(1,$)


다음은 특수 기호를 이용하여 범위를 지정한 사례들이다.


:%y → 문서 전체 복사

:1,$d → 문서 전체 삭제

:.,+10y → 현재 행에서 다음 아래 10까지 복사

:-2,+3d → 위의 2에서 아래 3까지 삭제


Anki 파일


아래는 본 포스팅의 내용을 갈무리하기 위한 Anki 파일입니다. 참고하시기 바랍니다. 



vim에서 기준이 되는 모드는 명령(command) 모드이다. vim은 명령 모드에서 단축키로 빠르게 대부분의 일을 처리하지만 단축키로는 복잡한 명령을 내리는데 한계가 있기 때문에 복잡한 명령을 내릴 방법이 별도의 방법이 필요하다. 그 방법으로 vim명령 라인에 복잡한 명령을 직접 입력하는 방식을 선택했다.


명령 모드에서 콜론(:), 슬래쉬(/), 물음표(?) 키를 누르면 아래의 명령 라인에 명령어를 입력할 수 있게 된다아래의 사진은 명령 모드에서 콜론(:) 키를 누른 것으로 가장 하단에 콜론(:)이 입력되는 것을 확인할 수 있다. 이후에 눌려지는 키는 계속 그 줄에 입력이 되므로 명령 라인에 명령어를 입력할 수 있는 상태가 된다. 콜론(:)이 입력된 행(Row)을 명령 라인이라고 부른다. 명령 라인을 사용할 수 있는 상태를 명령라인 모드, Ex 모드 등으로 부르기도 한다.

 



앞서 본 vim  종료 명령도 이 명령 라인에 :q!를 입력한 것이다. 


:q!


슬래쉬(/) 키나 물음표(?) 키를 누르면 콜론(:)키와 마찬가지로 명령 라인에 슬래쉬(/) 키나 물음표(?) 키가 입력되면서 명령 라인을 사용할 수 있는 상태가 된다. 


슬래쉬(/) 키나 물음표(?) 키를 누른 후 찾으려는 패턴을 입력하면 패턴이 나오는 곳으로 커서가 이동하는데 슬래쉬(/) 키는 정방향(문서의 아래 방향) 탐색, 물음표(?) 키는 역방향(문서의 위 방향) 탐색이다슬래쉬(/) 키와 물음표(?)에 의한 탐색은 후에 패턴을 지정하는 정규 표현식(Regular Expression)과 함께 다시 논의하기로 한다.

 

명령 라인은 대부분 콜론(:) 키를 이용하여 vim 설정 명령, 파일 관련 명령편집기 명령 등 다양하고 복잡한 명령을 입력하는데 사용한다. 

 

명령 라인에서 다시 명령 모드로 돌아오려면 Esc 키를 누르면 된다. 물론, 명령어를 명령 라인에 입력하고 Enter를 치면 명령을 실행하고 명령 모드로 돌아온다.


팁: Esc 키는 키보드에서 조금 누르기 힘든 위치에 있다. 그래서 이것을 대체하는 키가 있는데 그것이 바로 <Ctrl+[> 키다. (< >로 묶인 키는 동시에 누른다. , Ctrl 키를 누른 상태에서 [ 키를 누른다.)



본 포스팅의 내용을 갈무리 하기 위한 Anki 파일입니다. 참고하시기 바랍니다. 


003 명령 라인(명령줄).apkg


+ Recent posts