USR_23

*usr_23.txt*	Vim version 7.4 대상.  새로 고침: 2006년 4월 24일

		      VIM 사용설명서 - Bram Moolenaar 저
				       정지용 역

			     특별한 파일 편집하기


이번 장에서는 일반 파일이 아닌 조금 특별한 파일들을 편집하는 방법을
알아보겠습니다.  Vim을 사용하면 압축 파일이나 암호화된 파일을 편집할 수
있습니다.  인터넷을 통해 파일에 접근해서 편집을 할 수도 있고, 제한적이긴
하지만 이진 파일도 편집할 수 있습니다.

|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>만 쓰기로 했습니다.  마이크로소프트 도스(물론
마이크로소프트 윈도도) 진영에서는 전통적인 <CR><LF>를 계속 쓰기로
결정했습니다.
   이로 인해 파일을 이 시스템에서 저 시스템으로 옮길 때마다 줄 바꿈 문자
문제를 겪게 되었습니다.  Vim은 알게 모르게 여러 파일 포맷들을 자동으로
인식하여 항상 문제없이 동작하도록 처리하고 있습니다.
   'fileformats' 옵션에는 새로운 파일을 편집할 때 인식을 시도해 볼 파일
포맷들 목록이 지정됩니다.  예를 들어 다음 명령은 Vim에게 유닉스 포맷인지 먼저
시험해보고, 도스 포맷인지 두 번째로 시험해보라고 지시합니다:

	:set fileformats=unix,dos

어쩌면 이미 파일을 편집할 때 포맷에 대한 정보를 본 적이 있을 수도 있습니다.
기본 파일 포맷을 편집할 때는 아무 것도 표시되지 않습니다.  유닉스 파일을
유닉스 환경에서 편집하는 경우에는 아무 정보도 보여주지 않습니다.  하지만 도스
파일을 편집할 때는 다음과 같이 알려줍니다:

	"/tmp/test" [dos] 3L, 71C 

맥 파일을 편집하면 "[mac]"이 표시됩니다.
   인식한 파일 포맷은 'fileformat' 옵션에 저장됩니다.  어떤 포맷인지
확인하려면 다음 명령을 쓰면 됩니다:

	:set fileformat?

Vim이 사용하는 세 가지 포맷 이름은 다음과 같습니다:

	unix		<LF>
	dos		<CR><LF>
	mac		<CR>


맥 포맷 사용하기
----------------

유닉스에서는 <LF>가 줄 바꿈에 쓰입니다.  따라서 <CR> 문자가 줄 가운데에
나타나는 것은 정상적인 일입니다.  사실, Vi(나 Vim) 스크립트에서는 꽤 자주
나타납니다.
   맥에서는 <CR>이 줄 바꿈 문자이므로, <LF> 문자가 줄 가운데에 나타날 수
있습니다.
   따라서 파일 하나에 <CR><LF>가 모두 들어있는 경우에는 맥 파일인지 유닉스
파일인지 확실히 구분할 수 없습니다.  따라서 Vim에서는 맥 파일을 편집하지 않을
것이라고 가정하고 맥 파일인지 아예 검사하지 않습니다.  맥 파일인지도
검사하려면 'fileformats' 설정에 "mac"을 추가하십시오:

	:set fileformats+=mac

그러면 Vim이 맥 파일인지도 검사할 것입니다.  하지만 부정확할 수도 있으므로
주의하십시오.


포맷 강제 지정
--------------

만약 옛날 Vi로 도스 포맷 파일을 편집하면, 매 줄의 끝마다 ^M 문자가 붙어있는
것을 볼 수 있습니다.  (^M이 <CR>입니다).  Vim의 자동 인식은 이런 문제를
없애줍니다.  하지만 이 포맷으로 파일을 편집하고 싶다면, 다음과 같이 포맷을
강제로 지정할 수 있습니다:

	:edit ++ff=unix file.txt

"++" 는 Vim에게 특정 옵션을 지정하여, 이 명령에서 만큼은 기본 옵션 값이 아닌
지정한 값을 쓰도록 합니다.  "++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 

파일을 다운로드 받는 프로그램을 띄우고, 하드 디스크에 저장한 다음 Vim으로
열어서 편집을 할 수도 있습니다.
   하지만, 더 쉬운 방법이 있습니다.  커서를 URL의 아무 글자로나 옮긴 후, 다음
명령을 사용하십시오:

	gf

운이 좋다면, Vim이 적당한 프로그램을 찾아서 파일을 다운 받은 후, 편집을
시작할 것입니다.  파일을 새 창에서 열려면 CTRL-W f를 하면 됩니다.
   무언가 문제가 있다면 에러 메시지가 나올 것입니다.  URL이 틀렸을 수도 있고,
읽기 권한이 없을 수도 있고, 인터넷이 안 될 수도 있습니다.  아쉽지만 이러한
수많은 오류상황을 모두 설명할 수는 없습니다.  이때는 직접 파일을 다운 받아서
작업해야 합니다.

netrw 플러그인으로 인터넷을 통해 파일에 접근할 수 있습니다.  다음 형식의
URL을 인식할 수 있습니다:

	ftp://		ftp를 사용
	rcp://		rcp를 사용
	scp://		scp를 사용
	http://		wget를 사용 (읽기 전용)

Vim 자체에서는 통신을 하지 않고, 컴퓨터에 설치되어있는 위 프로그램들을
이용합니다.  대부분의 유닉스 시스템에 "ftp"와 "rcp"는 설치되어 있겠지만,
"scp"와 "wget"은 직접 설치해야할 수도 있습니다.

":edit"나 ":split" 같은 새로운 파일을 편집하기 위한 모든 명령에서 위 URL
형식을 사용할 수 있습니다.  http://를 제외하고는 쓰기 명령도 모두 동작합니다.

암호 설정 등 더 자세한 정보는 |netrw|를 참고하십시오.


*23.3*	암호화

어떤 정보는 혼자서만 보고 싶을 수 있습니다.  예를 들어, 학생들과 함께 쓰는
공용 컴퓨터에서 시험 문제를 내야할 수도 있습니다.  잔재주 많은 학생들이 시험
전에 미리 문제를 유출시키는 것은 원치 않으실 겁니다.  Vim은 데이터의 보호를
위해 파일을 암호화할 수 있습니다.
   암호화를 하면서 새 파일을 편집하려면, Vim 시작 시에 "-x" 인자를 주면
됩니다.  예:

	vim -x 시험문제.txt

Vim은 암호화/복호화에 쓰일 암호를 물어봅니다:

	암호 키 입력: 

암호를 주의 깊게 입력하십시오.  입력하는 글자는 화면에 별표로 숨겨진 채
표시됩니다.  암호를 입력하다가 오타가 발생해서 곤란해지는 경우를 막기 위해,
Vim은 암호를 한 번 더 입력받습니다:

	같은 키를 다시 입력: 

이제 일반 파일과 똑같이 편집할 수 있습니다.  편집을 마친 후 Vim을 빠져나갈 때,
파일은 암호화되어 저장됩니다.
   Vim으로 이 파일을 다시 열면, 같은 암호를 입력하라고 물어볼 것입니다.  "-x"
인자를 다시 줄 필요는 없습니다.  일반적인 ":edit" 명령을 써도 됩니다.  Vim이
파일의 맨 앞에 특별한 문자열을 넣어서 암호화된 파일을 구분할 수 있기
때문입니다.
   이 파일을 다른 프로그램으로 읽어보면, 알 수 없는 쓰레기 데이터만 나올
것입니다.  파일을 Vim으로 열 때, 잘못된 암호를 넣어도 마찬가지로 쓰레기
데이터가 나옵니다.  Vim은 암호가 맞는지 따로 체크하지 않습니다 (이렇게
함으로써 암호를 해킹하기 훨씬 어렵게 만들 수 있습니다).


암호화를 끄거나 켜기
--------------------

암호화를 끄려면, 'key' 옵션을 빈 문자열로 지정하면 됩니다:

	:set key=

다음 번 파일을 저장할 때는, 암호화 없이 저장됩니다.
   'key' 옵션 값을 지정함으로써 암호화를 설정하는 것은 위험한 방법입니다.
잠시나마 모니터에 암호가 그대로 노출되기 때문입니다.  누군가가 뒤에서
몰래 훔쳐본다면 암호화를 하는 의미가 없습니다.
   이 문제를 해결하기 위해 ":X" 명령이 생겼습니다.  이 명령은 "-x" 인자를
사용했을 때처럼 사용할 암호를 물어봅니다:

	:X
	암호 키 입력: ******
	같은 키를 다시 입력: ******


암호화의 한계
-------------

Vim이 사용하는 암호화 알고리즘은 약합니다.  우발적인 좀도둑을 막는 데는 충분히
효과적이지만, 암호 전문가가 충분한 시간을 갖고 덤빌 경우에는 깨질 수 있습니다.
또한, 스왑 파일은 암호화 되지 않는다는 데 주의하십시오.  관리자 권한을 가진
사용자는 편집 중에 스왑 파일로부터 파일 내용을 읽을 수 있습니다.
   사람들이 스왑 파일을 읽는 것을 막는 방법은, 아예 스왑 파일을 사용하지 않는
것입니다.  Vim을 실행 시킬 때, -n 인자를 주면, 스왑 파일을 사용하지
않습니다(모든 정보는 메모리에 저장됩니다).  예를 들어, "file.txt"를 스왑
파일 없이 암호화시키며 편집하려면 다음 명령을 사용하십시오:

	vim -x -n file.txt

이미 파일을 편집중인 경우에는, 다음 명령으로 스왑 파일 기능을 끌 수 있습니다:

	:setlocal noswapfile

이렇게 스왑 파일이 없을 때는, 복구가 불가능합니다.  파일을 좀 더 자주 저장하여
내용을 날리는 일이 없도록 주의하십시오.

파일이 메모리에 있을 때 역시 암호화 되지 않은 상태입니다.  따라서 Vim의
메모리를 들여다볼 수 있는 권한이 있다면, 파일의 내용도 엿볼 수 있습니다.
   viminfo 파일을 사용한다면, 레지스터에도 암호화 없이 저장되므로
주의하십시오.
   만약 진짜로 파일의 내용을 보호하고 싶다면, 네트워크가 연결되지 않은 노트북
컴퓨터에서, 좋은 암호화 프로그램을 사용하고, 컴퓨터를 사용하지 않을 때는 큰
금고에 넣어서 보관하십시오.


*23.4*	이진 파일

Vim으로 이진 파일을 편집할 수도 있습니다.  Vim은 이진 파일 편집용으로
만들어지지 않았기 때문에, 몇 가지 제약사항이 있습니다.  하지만, 파일을 읽고,
문자 하나를 바꾸고, 문자 하나만 바뀌고 나머지는 그대로인 파일을 저장하는
정도는 가능합니다.
   Vim의 특수한 기능들이 오작동 하지 않도록, Vim을 시작할 때 "-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; 라인 277 of 330; 단어 1806 of 2058; 바이트 10580 of 12206 

마지막 두 숫자가 파일에서의 바이트 단위 위치와 총 바이트 수입니다.  이 위치는
'fileformat'에 따라 줄 바꿈 문자가 달라지면서 생기는 바이트 숫자의 변화까지
반영된 것입니다.
   파일의 특정 바이트로 이동하기 위해서는 "go" 명령을 사용하십시오.  예를
들어 2345번째 바이트로 이동하려면:

	2345go


XXD 사용하기
------------

진짜 이진 파일 편집기는 파일을 실제 그대로와 16진수 형식 두 가지 방법으로
보여줍니다.  Vim에서는 "xxd" 프로그램으로 파일을 변환함으로써 이렇게 볼 수
있습니다.  "xxd"는 Vim과 함께 배포됩니다.
   먼저 파일을 이진 상태로 엽니다:

	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

Vim은 위 프로그램들을 실제 압축과 압축 해제에 사용합니다.  따라서 위
프로그램들이 이미 깔려있어야 합니다.


다음 장: |usr_24|  빠르게 입력하기

저작권: |manual-copyright| 참고  vim:tw=78:ts=8:ft=help:norl:

Generated by vim2html on 2013. 12. 14. (토) 20:47:01 KST