vim 으로 파일 한꺼번에 고치기
vi 에는 파일을 오픈한 뒤 특정한 명령을 실행 할 수있는 -c 옵션이 있다.
예를 들어 vi -c 15 foo.c 이렇게 하면 foo.c 를 오픈한 뒤 ':15' 명령을 실행해 15번째 줄로 이동을 한다.
vim 에서는 이 기능을 확장하여 -c 옵션을 여러개 사용할 수 있다.
예를 들어 vim -c '11' -c 'd' foo.c 하면 foo.c 를 열고, 11번째 줄로 이동(-c '11')을 한 다음 현재 라인 지움(-c 'd') 동작을 한다.
여기에 -c 'wq' 를 추가하면 수정후 저장/종료까지 한꺼번에 되므로 command line 명령 처럼 사용할 수 있게 되고, shell script 를 이용해 여러 파일에 적용하면 된다.
예를 들어 현재 디렉토리의 모든 c 소스 에서 'foo' 라는 문자열을 'bar' 로 바꾸고 싶다면
#!/bin/csh -f
foreach fn (*.c)
vim -c '%s/foo/bar/g' -c 'wq' $fn
end
처럼 script를 만들면 된다.
물론 단순 패턴 치환이라면
#!/bin/csh -f
foreach fn (*.c)
sed $fn 's/foo/bar/g' > tmpfile
mv tmpfile $fn
end
와같이 해도 되지만 vim이 할 수 있는 일은 단순 패턴 치환 이상이기 때문에 훨씬 더 다양한 용도로 사용할 수 있다.
아래는 현재 디렉토리와 바로 아래 서브디렉토리의 모든 *.txt 파일을 dos 형식(cr-lf 가 붙는)으로 바꾸는 script 이다.
#!/bin/csh -f
foreach fn ( *.txt */*.txt )
vim -c 'set fileformat=dos' -c 'wq' $fn
end
현재 디렉토리의 모든 *.c *.h 파일로 부터 syntax highlighting 된 html 파일을 만들어 보자.
#!/bin/csh -f
foreach fn ( *.[ch] )
vim -c 'call Convert2HTML(0,0)' -c wq -c q $fn
end