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 파일입니다. 참고하시기 바랍니다. 



+ Recent posts