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
3 one one One ONE
4 one one One ONE
우선, 문자열 one을 two로 바꾸려고 한다. 따라서 [바꿀 문자열]은 one이고 [바뀐 문자열]은 two가 된다.
:s/one/two → 현재 커서가 위치한 행에서 one을 찾아 처음 일치하는 문자열만 two로 바꿈
1 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
4 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
4 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
4 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 파일입니다. 참고하시기 바랍니다.
'Anki로 공부하기 > vi 또는 vim 익히기' 카테고리의 다른 글
045 vim 특정 패턴을 조건으로 문자열 바꾸기 (0) | 2018.07.04 |
---|---|
044 vim 문자열 바꾸기에서 슬래쉬(/) 및 정규표현식 사용 (5) | 2018.07.03 |
042 vim 범위 지정 명령하기 (0) | 2018.06.28 |
041 vim의 정규표현식(14) 확장 정규 표현식 4 (0) | 2018.06.27 |
040 vim의 정규표현식(13) 확장 정규 표현식 3 (0) | 2018.06.26 |