목차
1.
들어가기에 앞서
2.
문자열 치환하기
3.
참고 자료
1.
들어가기에 앞서
A는 libft과제를 하고있다. Part1의 외부함수를 필요로 하지 않는 부분을 끝내고 노미넷Norminette을 돌렸더니 헤더 파일에서 오류가 잔뜩 발생했다. 확인을 해보니 'int c'에서 오류가 났는데, 놈 규정을 따르기 위해서는 'int[tab]c'가 아닌 'int[space]c'으로 작성해야 했던 것이다.
작성자가 실제로 겪었던 일을 각색한 것입니다. 놈 에러는 잔뜩 뜨는데 커서를 옮겨가면서 하나하나 수정하기엔 귀찮고, 하지만 고쳐야 하고. 한글이나 워드로 작성 중이었다면 검색해서 한 번에 바꿔버릴 수 있을 텐데....
그래서 준비했습니다. Vim에서 문자열 치환하기
2.
Vim에서 문자열 치환하기
제가 Vim을 사용하며 가장 그리워했던 기능은 한글이나 워드의 검색 및 바꾸기 기능입니다. 한글에서 Ctrl + h를 눌렀을 때 나오는 창에 찾을 문자와 바꿀 문자를 넣고 모두 바꾸기를 눌러주면 제가 원하는 대로 바꿔주고는 했죠. (가끔 아무 생각 없이 바꾸다가 '바람이 프랑스어오고 있었다(불어-> 프랑스어)'같은 문장이 잔뜩 생기곤 했지만 말이에요) 그런데 Vim에도 이런 기능이 있다는 사실을 알고 계셨나요?
shell 언어의 sed명령어 기억하시나요? 그 명령어와 비슷한데요. vim 내부의 커맨드 라인에서 범위를 먼저 지정하고 찾을 문자열과 바꿀 문자열을 쓴 뒤 Enter를 누르면 됩니다.
:(범위의 첫 행 번호), (범위의 마지막 행 번호) s/(찾을 문자열)/(바꿀 문자열)/(옵션)
a.
범위 지정하기
•
특정 범위를 지정하기 위해서는 (범위의 첫 행 번호), (범위의 마지막 행 번호)로 작성하시면 됩니다. 예를 들어 12번째 행부터 18번째 행을 포함한 그사이 부분을 고치고 싶다면 '12, 18'이 되겠네요
•
현재 커서가 위치한 행을 지정하고 싶다면 '.'을, 마지막 행을 지정하고 싶다면 '$'를 사용하면 됩니다.
•
전체 행을 지정하겠다면 '%'를 사용하세요. (ex. % s/int/char/g)
b.
치환할 문자열 지정하기
•
범위를 지정했다면 어떤 문자를 어떻게 바꿀지 지정해줘야겠죠. s/(찾을 문자열)/(바꿀 문자열)/을 작성합니다.
c.
옵션 지정하기
•
이제 옵션을 지정해줄 차례입니다. 이 커멘드에는 옵션이 세 가지가 있습니다.
1.
g 옵션
검색 범위에서 패턴이 여러 번 나오면 모두 바꿔줍니다.
2.
i 옵션
대소문자 구분 없이 검색합니다.
3.
c 옵션
치환 전 사용자에게 확인을 받습니다
d.
예제
아래는 제 Makefile 코드 중 일부입니다. 이상한 점을 찾으셨나요? 네, Objects를 줄이려면 OBJS여야하는데 OJBS로 적혀있죠. 이걸 한 번에 모두 수정하려합니다.
OJBS = $(SRCS:.c=.o)
OJBS_BONUS = $(SRCS_BONUS:.c=.o)
all : $(TARGET)
bonus : $(TARGET) $(OJBS_BONUS)
$(AR) ru $(TARGET) $(OJBS_BONUS)
$(TARGET) : $(OJBS)
$(AR) $(ARFLAGS) $@ $^
$(OJBS) : ./libft.h
$(OJBS_BONUS) : ./libft.h
Makefile
복사
:% s/OJBS/OBJS/g 를 명령모드의 commend line에 입력해주면 됩니다.
OBJS = $(SRCS:.c=.o)
OBJS_BONUS = $(SRCS_BONUS:.c=.o)
all : $(TARGET)
bonus : $(TARGET) $(OBJS_BONUS)
$(AR) ru $(TARGET) $(OBJS_BONUS)
$(TARGET) : $(OBJS)
$(AR) $(ARFLAGS) $@ $^
$(OBJS) : ./libft.h
$(OBJS_BONUS) : ./libft.h
Makefile
복사
확인을 해보면 잘 바뀌어있죠?
3.
참고자료
Park's life,"[Linux] vi (vim) 에서 문자열 치환하기", 211210, https://harryp.tistory.com/736