100MB MySQL 데이터베이스 백업 파일이 있고 16G RAM이있는 Linux 상자의 Vim에서 파일을 여는 데 문제가 있습니다.
Vim은 멈 춥니 다 (적어도 사용할 수 없음). 이것은 내가 이해하지 못하는 것입니다. RAM이 16GB인데 편집기에서 100MB 파일을로드 할 수없는 이유는 무엇입니까?
Vim 때문입니까? 모든 메모리 관리가 OS에서 처리된다고 생각했습니다.
100MB MySQL 데이터베이스 백업 파일이 있고 16G RAM이있는 Linux 상자의 Vim에서 파일을 여는 데 문제가 있습니다.
Vim은 멈 춥니 다 (적어도 사용할 수 없음). 이것은 내가 이해하지 못하는 것입니다. RAM이 16GB인데 편집기에서 100MB 파일을로드 할 수없는 이유는 무엇입니까?
Vim 때문입니까? 모든 메모리 관리가 OS에서 처리된다고 생각했습니다.
답변:
Vim은 때때로 비정상적으로 긴 줄을 가진 파일에 문제가 있습니다. 텍스트 편집기이므로 줄 길이가 최대 수백자인 텍스트 파일 용으로 설계되었습니다.
데이터베이스 파일에는 개행 문자가 많지 않을 수 있으므로 100Mb 길이의 단일 행일 수 있습니다. Vim은 그것에 만족하지 않을 것입니다. 아마 작동하지만 파일을로드하는 데 시간이 오래 걸릴 수 있습니다.
Vim을 사용하여 100Mb보다 훨씬 큰 텍스트 파일 을 확실히 열었습니다 . Vim은 필요에 따라 변경 사항을 디스크로 바꿀 수 있으므로 파일을 한 번에 메모리에 넣을 필요조차 없습니다.
set synmaxcol=120
(또는 다른 적절한 숫자) 성능이 향상 될 수 있습니다 . 나는 과거에 이것으로부터 엄청난 속도 향상을 보았습니다.
큰 파일을 직접 보려면 less
대신 사용하십시오 vim
. Vim은 처음로드 할 때 파일을 스캔하고 (잠재적으로 여러 단계로) 사용할 구문을 결정하기 위해 구문 강조를 수행하고 파일의 맨 위와 맨 아래에서 모델을 검색하려고합니다. 그런 다음 파일을 편집 할 때 vim은 스왑 파일을 저장하고 실행 취소 트리를 유지합니다 (vim의 실행 취소 기록은 다른 모든 편집기에서와 같이 선형이 아닌 분기됩니다). 텍스트가 변경되면 구문 강조 표시를 지속적으로 다시 평가합니다.
거대한 파일에서는 왜 그렇게 사용할 수 없는지에 대한 정당화는 아니지만, 그 이유에 대한 더 자세한 설명입니다.
Vim은 파일을 그대로 메모리에로드하지 않습니다. 내부 구조 (줄, 단어 등)로 변환하고 내부 스크립트 언어 등을 사용하여 구문 강조를 수행합니다. 모두 메모리 (문자의 바이트보다 훨씬 많은)와 CPU 시간을 소비합니다.
바이너리로로드 해 볼 수 있습니다. 텍스트가 아닌 큰 파일에 대해서는 운이 좋았습니다.
vim -b HUGEFILE
IIRC에서 vim을 16 진 편집기로 사용할 수도 있습니다. http://usevim.com/2012/06/20/vim-binary-files/
VIM이 RAM보다 더 많은 임시 파일 (예 : 스왑)을 필요로하는 문제와 관련이 있기를 바랍니다.
대부분의 경우 VIM이 생성 한 임시 파일은 열려는 파일의 동일한 디렉토리에 있습니다. 이 경우 현재 디렉토리에서 사용 가능한 디스크 공간을 확인하여 확인할 수 있습니다.
다행히 VIM의 인덱싱 / 스왑 파일에 다른 위치를 지정하는 방법에 대한 유용한 문서가 있습니다.
스왑 파일을 비활성화 할 수도 있습니다
hexer
.