USR_23
*usr_23.txt* Vim version 7.0 대상. 새로고침: 2006 Apr 24
VIM 사용설명서 - Bram Moolenaar 저
정지용 역
특별한 파일 편집하기
이번 장에서는 일반 파일이 아닌 조금 특별한 파일들을 편집하는 방법을
알아보겠습니다. 빔을 사용하면 압축 파일이나 암호화된 파일을 편집할 수
있습니다. 인터넷을 통해 파일에 접근해서 편집을 할 수도 있고, 제한적이긴
하지만 이진 파일도 편집할 수 있습니다.
|23.1| 도스, 맥, 유닉스 파일
|23.2| 인터넷에 있는 파일
|23.3| 암호화
|23.4| 이진 파일
|23.5| 압축 파일
다음 장: |usr_24| 빠르게 입력하기
이전 장: |usr_22| 편집할 파일 찾기
차례: |usr_toc|
*23.1* 도스, 맥, 유닉스 파일
일찍이, 오래된 텔레타이프 기계들은 두 개의 문자를 사용해서 줄을 바꾸었습니다.
하나는 캐리지를 줄의 처음으로 옮기기 위한 것(캐리지 리턴: carriage return,
<CR>
)이고, 하나는 종이를 위로 옮기기 위한 것(라인 피드: line feed,<LF>
)
이었습니다.
컴퓨터가 처음 등장했을 때, 저장공간은 매우 비쌌습니다. 그래서 몇몇
사람들은 줄의 끝을 표시하기 위해 문자가 두 개나 필요하지는 않다고
생각했습니다. 유닉스쪽 사람들은 줄의 마지막에 <라인 피드>
만 쓰기로 결정했고,
애플사 사람들은 반대로 <CR>
만 쓰기로 했습니다. MS-DOS (물론 마이크로소프트
윈도우도) 진영에서는 전통적인 <CR>
<LF>
를 계속 쓰기로 결정했습니다.
이로 인해 파일을 이 시스템에서 저 시스템으로 옮길 때마다 줄바꿈 문자 문제를
겪게되었습니다. 빔은 알게 모르게 여러 파일 포맷들을 자동으로 인식하여
항상 문제없이 동작하도록 처리하고 있습니다.
'fileformats' 설정에는 새로운 파일을 편집할 때 인식을 시도해 볼 파일 포맷들
목록이 지정됩니다. 예를 들어 다음 명령은 빔에게 유닉스 포맷인지 먼저
시험해보고, 도스 포맷인지 두번째로 시험해보라고 지시합니다:
:set fileformats=unix,dos
어쩌면 이미 파일을 편집할 때 포맷에 대한 정보를 본 적이 있을 수도 있습니다.
기본 파일 포맷을 편집할 때는 아무 것도 표시되지 않습니다. 유닉스 파일을
유닉스 환경에서 편집하는 경우에는 아무 정보도 보여주지 않습니다. 하지만 도스
파일을 편집할 때는 다음과 같이 알려줍니다:
"/tmp/test" [dos] 3L, 71C
맥 파일을 편집하면 "[mac]"이 표시됩니다.
인식된 파일포맷은 'fileformat'설정에 저장됩니다. 어떤 포맷인지 확인하려면
다음 명령을 쓰면 됩니다:
:set fileformat?
빔이 사용하는 세 가지 포맷 이름은 다음과 같습니다:
unix <LF>
dos <CR>
<LF>
mac <CR>
맥 포맷 사용하기
유닉스에서는 <LF>
가 줄바꿈에 쓰입니다. 따라서 <CR>
문자가 줄 가운데에
나타나는 것은 정상적인 일입니다. 사실, Vi(나 빔) 스크립트에서는 꽤 자주
나타납니다.
매킨토시에서는 <CR>
이 줄바꿈 문자이므로, <LF>
문자가 줄 가운데에 나타날 수
있습니다.
따라서 파일 하나에 <CR>
과 <LF>
가 모두 들어있는 경우에는 맥 파일인지 유닉스
파일인지 확실히 구분할 수 없습니다. 따라서 빔에서는 맥 파일을 편집하지 않을
것이라고 가정하고 맥 파일인지 아예 검사하지 않습니다. 맥 파일인지도
검사하려면 'fileformats' 설정에 "mac"을 추가하십시오:
:set fileformats+=mac
그러면 빔이 맥 파일인지도 검사할 것입니다. 하지만 부정확할 수도 있으므로
주의하십시오.
포맷 강제 지정
만약 옛날 Vi로 도스 포맷 파일을 편집하면, 매 줄의 끝마다 ^M 문자가 붙어있는
것을 볼 수 있습니다. (^M이 <CR>
입니다). 빔은 자동 인식은 이런 문제를
없애줍니다. 하지만 이 형식으로 파일을 편집하고 싶다면, 다음과 같이 포맷을
강제로 지정할 수 있습니다:
:edit ++ff=unix file.txt
"++" 는 빔에게 특정 설정을 지정하여, 이 명령에서 만큼은 기본 설정값이 아닌
지정된 값을 쓰도록 합니다. "++ff"는 'fileformat'을 지정하기 위해 쓰였습니다.
다른 포맷을 지정하려면 "++ff=mac"이나 "++ff=dos"와 같이 하면 됩니다.
이 "++" 기능은 모든 설정에 대해서 동작하는 것은 아니고, 현재 "++ff"와
"++enc"만 구현되었습니다. 물론 "++fileformat"나 "++encoding"과 같이 길게 써도
됩니다.
변환
'fileformat' 설정을 써서 파일 포맷을 다른 포맷으로 바꿀 수 있습니다. 도스
포맷의 README.TXT란 파일이 있는데, 이를 유닉스 포맷으로 바꾸고 싶다고 합시다.
먼저 도스 포맷의 파일을 다음과 같이 엽니다:
vim README.TXT
도스 포맷으로 인식이 되었을 것입니다. 이제 유닉스 포맷으로 바꾸어보겠습니다:
:set fileformat=unix
:write
파일이 유닉스 포맷으로 저장되었습니다.
*23.2* 인터넷에 있는 파일
이메일을 받았는데, 파일이 URL로 링크되어있다고 합시다. 예를 들어:
다음 URL을 참고하십시오:
ftp://ftp.vim.org/pub/vim/README
파일을 다운로드 받는 프로그램을 띄우고, 하드디스크에 저장한 다음 빔으로 열어서
편집을 할 수도 있습니다.
하지만, 더 쉬운 방법이 있습니다. 커서를 URL의 아무 글자로나 옮긴 후, 다음
명령을 사용하십시오:
gf
운이 좋다면, 빔이 적당한 프로그램을 찾아서 파일을 다운 받은 후, 편집을 시작할
것입니다. 파일을 새 창에서 열려면 CTRL-W
f 를 하면 됩니다.
무언가 문제가 있다면 에러메시지가 나올 것입니다. URL이 틀렸을 수도 있고,
읽기 권한이 없을 수도 있고, 인터넷이 안될 수도 있습니다. 아쉽지만 이러한
수많은 오류상황을 모두 설명할 수는 없습니다. 이 때는 직접 파일을 다운 받아서
작업해야 합니다.
netrw 플러그인으로 인터넷을 통해 파일에 접근할 수 있습니다. 다음 형식의
URL들이 인식됩니다:
ftp:// ftp를 사용
rcp:// rcp를 사용
scp:// scp를 사용
http:// wget를 사용 (읽기 전용)
빔 자체에서는 통신을 하지 않고, 컴퓨터에 설치되어있는 위 프로그램들을
이용합니다. 대부분의 유닉스 시스템에 "ftp"와 "rcp"는 설치되어 있겠지만,
"scp"와 "wget"은 직접 설치해야할 수도 있습니다.
":edit"나 ":split" 같은 새로운 파일을 편집하기 위한 모든 명령에서 위 URL
형식들을 사용할 수 있습니다. http://를 제외하고는 쓰기 명령도 모두
동작합니다.
암호 설정 등 더 자세한 정보는 |netrw
|를 참고하십시오.
*23.3* 암호화
어떤 정보는 혼자서만 보고 싶을 수 있습니다. 예를 들어, 학생들과 함께 쓰는
공용 컴퓨터에서 시험 문제를 내야할 수도 있습니다. 잔재주많은 학생들이 시험
전에 미리 문제를 유출시키는 것은 원치 않으실 겁니다. 빔은 데이터의 보호를
위해 파일을 암호화할 수 있습니다.
암호화를 하면서 새 파일을 편집하려면, 빔 시작 시에 "-x" 인자를 주면 됩니다.
예:
vim -x 시험문제.txt
빔은 암호화/복호화에 쓰일 암호를 물어봅니다:
Enter encryption key:
암호를 주의깊게 입력하십시오. 입력하는 글자는 화면에 별로 숨겨진 채
표시됩니다. 암호를 입력하다가 오타가 발생해서 곤란해지는 경우를 막기 위해,
빔은 암호를 한 번 더 입력받습니다:
Enter same key again:
이제 일반 파일과 똑같이 편집할 수 있습니다. 편집을 마친 후 빔을 빠져나갈 때,
파일은 암호화되어 저장됩니다.
빔으로 이 파일을 다시 열면, 같은 암호를 입력하라고 물어볼 것입니다. "-x"
인자를 다시 줄 필요는 없습니다. 일반적인 ":edit" 명령을 써도 됩니다. 빔이
파일의 맨 앞에 특별한 문자열을 넣어서 암호화된 파일을 구분할 수 있기
때문입니다.
이 파일을 다른 프로그램으로 읽어보면, 알 수 없는 쓰레기 데이터만 나올 것입니다.
파일을 빔으로 열 때, 잘못된 암호를 넣어도 마찬가지로 쓰레기 데이터가 나옵니다.
빔은 암호가 맞는 지 따로 체크하지 않습니다 (이렇게 함으로써 암호를 해킹하기
훨씬 어렵게 만들 수 있습니다).
암호화를 끄거나 켜기
암호화를 끄려면, 'key' 설정을 빈 문자열로 지정하면 됩니다:
:set key=
다음 번 파일을 저장할 때는, 암호화 없이 저장됩니다.
'key' 설정값을 지정함으로써 암호화를 설정하는 것은 위험한 방법입니다.
잠시나마 모니터에 암호가 그대로 노출되기 때문입니다. 누군가가 뒤에서
몰래 훔쳐본다면 암호화를 하는 의미가 없습니다.
이 문제를 해결하기 위해 ":X" 명령이 생겼습니다. 이 명령은 "-x" 인자를
사용했을 때 처럼 사용할 암호를 물어봅니다:
:X
Enter encryption key: ******
Enter same key again: ******
암호화의 한계
빔이 사용하는 암호화 알고리즘은 약합니다. 우발적인 좀도둑을 막는데는 충분히
효과적이지만, 암호 전문가가 충분한 시간을 갖고 덤빌 경우에는 깨질 수 있습니다.
또한, 임시 파일은 암호화가 되지 않는다는 데 주의하십시오. 관리자 권한을 가진
사용자는 편집 중에 임시 파일(swap file)로부터 파일 내용을 읽을 수 있습니다.
사람들이 임시 파일을 읽는 것을 막는 방법은, 아예 임시 파일을 사용하지 않는
것입니다. 빔을 실행 시킬 때, -n 인자를 주면, 임시 파일이 사용되지
않습니다(모든 정보는 메모리에 저장됩니다). 예를 들어, "file.txt" 를 임시 파일
없이 암호화시키며 편집하려면 다음 명령을 사용하십시오:
vim -x -n file.txt
이미 파일을 편집중인 경우에는, 다음 명령으로 임시 파일 기능을 끌 수 있습니다:
:setlocal noswapfile
이렇게 임시 파일이 없을 때는, 복구가 불가능합니다. 파일을 좀 더 자주 저장하여
내용을 날리는 일이 없도록 주의하십시오.
파일이 메모리에 있을 때 역시 암호화가 되지 않은 상태입니다. 따라서 빔의
메모리를 들여다볼 수 있는 권한이 있다면, 파일의 내용도 엿볼 수 있습니다.
viminfo 파일을 사용한다면, 레지스터에 저장된 내용도 암호화 없이 저장되므로
주의하십시오.
만약 진짜로 파일의 내용을 보호하고 싶다면, 네트워크가 연결되지 않은 노트북
컴퓨터에서, 좋은 암호화 프로그램을 사용하고, 컴퓨터를 사용하지 않을 때는 큰
금고에 넣어서 보관하십시오.
*23.4* 이진 파일
빔으로 이진 파일을 편집할 수도 있습니다. 빔은 이진 파일 편집용으로 만들어지지
않았기때문에, 몇 가지 제약사항이 있습니다. 하지만, 파일을 읽고, 문자 하나를
바꾸고, 문자 하나만 바뀌고 나머지는 그대로인 파일을 저장하는 정도는
가능합니다.
빔의 특수한 기능들이 오작동 하지 않도록, 빔을 시작할 때 "-b" 인자를
추가해주십시오:
vim -b datafile
이러면 'binary' 설정이 켜집니다. 이 때의 효과는 불필요한 부작용이 없어지는
것입니다. 예를 들어 'textwidth'가 0으로 설정되고, 자동 포맷팅이 비활성화
됩니다. 그리고 파일은 무조건 유닉스 포맷이 됩니다.
이진 상태는 프로그램 내의 메시지를 바꾸기 위해 사용될 수 있습니다. 실수로
문자를 추가하거나 지우지 않도록 주의하십시오. 편집중인 프로그램이 망가질 수도
있습니다. 문자열을 교체하기 위해 "R"을 사용하십시오.
대부분의 문자는 제대로 출력이 불가능한 문자일 것입니다. 이들을 16진수
형식으로 보려면:
:set display=uhex
아니면, "ga" 명령을 써서 현재 커서가 위치한 곳의 문자 값을 볼 수도 있습니다.
예를 들어 커서가 <Esc>
위에 있을 때 "ga"를 누르면 다음과 같이 나옵니다:
<^[>
27, Hex 1b, Octal 033
파일에는 줄바꿈이 거의 없을 수도 있습니다. 'wrap' 설정을 꺼서 전체적인 모습을
볼 수도 있습니다:
:set nowrap
바이트단위 위치
파일 전체에서 몇 번째 바이트에 커서가 있는 지 보려면 다음 명령을 사용하십시오:
g CTRL-G
다음과 같이 장황한 출력이 나옵니다:
Col 9-16 of 9-16; Line 277 of 330; Word 1806 of 2058; Byte 10580 of 12206
마지막 두 숫자가 파일에서의 바이트단위 위치와 총 바이트 수 입니다. 이 위치는
'fileformat'에 따라 줄바꿈 문자가 달라지면서 생기는 바이트 숫자의 변화까지
반영된 것입니다.
파일의 특정 바이트로 이동하기 위해서는 "go" 명령을 사용하십시오. 예를 들어
2345번째 바이트로 이동하려면:
2345go
XXD 사용하기
진짜 이진 파일 편집기는 파일을 실제 그대로와 16진수 형식 두 가지 방법으로
보여줍니다. 빔에서는 "xxd" 프로그램으로 파일을 변환함으로써 이렇게 볼 수
있습니다. "xxd"는 빔과 함께 배포됩니다.
먼저 파일을 이진 상태로 엽니다:
vim -b datafile
이제 xxd를 써서 파일을 16진수 형식으로 변환합니다:
:%!xxd
변환 후에는 다음과 같이 보일 것입니다:
0000000: 1f8b 0808 39d7 173b 0203 7474 002b 4e49 ....9..;..tt.+NI
0000010: 4b2c 8660 eb9c ecac c462 eb94 345e 2e30 K,.`.....b..4^.0
0000020: 373b 2731 0b22 0ca6 c1a2 d669 1035 39d9 7;'1.".....i.59.
이제 원하는 대로 파일을 보고 바꾸면 됩니다. 이 정보는 일반 파일인 것 처럼
취급됩니다. 16진수 영역을 바꾸어도 원래 파일 영역이 바뀌지는 않고, 반대도
마찬가지 입니다.
마지막으로 다시 변환해 넣습니다:
:%!xxd -r
16진수 영역에 가해진 변경사항만이 반영됩니다. 오른쪽에 나왔었던 원래 파일
영역의 내용은 무시됩니다.
더 자세한 내용은 xxd의 매뉴얼 페이지를 참조하십시오.
*23.5* 압축 파일
간단한 기능입니다. 압축된 파일도 일반 파일처럼 편집할 수 있습니다. "gzip"
플러그인이 파일을 열 때의 압축해제와 저장할 때의 압축을 알아서 해줍니다.
현재 다음 압축 방법들이 지원됩니다:
.Z compress
.gz gzip
.bz2 bzip2
빔은 위 프로그램들을 실제 압축과 압축 해제에 사용합니다. 따라서 위
프로그램들이 이미 깔려있어야 합니다.
다음 장: |usr_24| 빠르게 입력하기
저작권: |manual-copyright| 참고 vim:tw=78:ts=8:ft=help:norl:
Generated by vim2html on Fri Dec 23 22:48:56 PST 2011