Vim의 여러 인스턴스간에 명령 기록이 어떻게 해결됩니까? 전직 명령의 역사 (를 통해

빔은 전직 명령의 역사 (를 통해 액세스 유지 :하고 q:), 그리고 종료 후 그 내역이 지속합니다.

Vim의 여러 인스턴스 (동일한 사용자, 동일한 홈 디렉토리)를 실행하는 경우 Vim은 명령 히스토리간에 어떻게 중재합니까? 종료하는 마지막 프로세스가 승리하는 것 같습니다. 모든 인스턴스의 명령 내역을 유지하는 방법이 있습니까?



답변

제목 질문에 대한 답은 관찰 한 내용입니다. vim 사용자 설명서에서:help 21.3

Vim을 여러 번 실행하면 마지막으로 나가는 정보가 정보를 저장합니다. 이로 인해 이전에 저장된 Vims를 종료 한 정보가 손실 될 수 있습니다. 각 항목은 한 번만 기억할 수 있습니다.

그러나 viminfo 파일의 파일 이름 (명령 기록이 저장되어있는 경우 글로벌 마크 및 레지스터 내용과 같은 다른 것들 중에서도)이 변경 가능합니다! 이는 다른 프로젝트 또는 vim 인스턴스에 대해 다른 ‘이력’을 설정할 수 있음을 의미합니다. 프로젝트 당 하나 이상의 vim 인스턴스를 실행하지 않는다고 가정하면 vimrc (또는 다른 프로젝트 설정 플러그인)를 통해 viminfo 파일 이름을 관리하는 것이이를 처리하는 좋은 방법입니다.

대체 viminfo 파일 설정

프로젝트 레벨 관리를 위해 viminfo를 다른 파일에 저장하도록 vim을 구성하려고합니다. 이 작업은 종료하기 전에 실행중인 vim 내에서 수행하거나 vimrc에 의해 수행 될 수 있습니다. 예를 들어 vimrc에 특정 디렉토리를 프로젝트에 속하는 것으로 감지하는 행이있을 수 있습니다.

:set viminfo+=nPath/to/custom/viminfofile

vimrc가 디렉토리를 기반으로 이것을 자동으로 설정하는 예 :

 if getcwd() == "/projects/projA"
     set viminfo+=n~/.viminfo-projA
 endif

위의 결과는 vim이 / projects / projA 디렉토리에서 시작되면 프로젝트 별 히스토리가 시작시로드되고 종료시 저장됩니다.

시작하는 동안 대체 viminfo로드

이것은 히스토리를 측면에 저장 한 후 프로젝트 레벨에서 관리하지 않고 나중에로드하려는 경우에 유용합니다.

먼저 기록을 저장하려면 종료하기 전에 viminfo 옵션을 위와 같이 추가하십시오. 그런 다음 기록을로드하려면 -i 옵션을 사용하여 vim을 시작하십시오.

vim -i Path/to/custom/viminfofile

viminfo 파일을 저장하기 위해 vim을 종료하지 않으려면 :wv( :wviminfo)를 사용할 수 있습니다 . 위의 n 설정에 따라 vim을 종료하지 않고 viminfo 파일을 저장합니다. 또한 :wv SomeOtherFileviminfo 옵션의 설정과 동일하지 않은 위치에 저장할 수도 있습니다. 이것은 종료시 사용할 파일 이름을 설정하는 것보다 편리 할 수 ​​있지만 일단 종료되면 vim이 기본 파일을 사용하지 못하게합니다.

예를 들어, 첫 번째 vim에서 :

:wv ~/customInfo

그리고 두 번째 터미널에서 :

vim -i ~/customInfo

또는 두 번째 vim이 이미 실행 중이고 viminfo를로드하려는 경우 :

:rv ~/customInfo

참고 :wv:rv종료하거나 시작하는 동안 읽을 파일의 이름을 저장합니다 파일 정력의 이름을 변경하지 마십시오.

추가 정보

설명 set viminfo+=nSomePath: set 명령을 사용하여 이름이 지정된 옵션을 조정합니다 viminfo. 이 +=옵션에 옵션을 추가하고 싶지만 모든 것을 변경하지는 않습니다. nviminfo의 파일 이름을 지정 하는 옵션을 추가합니다 . viminfo를 저장하는 데 사용되는 파일 이름 n이 바로 뒤에 SomePath있습니다.

wv( :help wv) 설명서 는이 명령이 먼저 viminfo 파일을 읽은 다음 이전 정보와 새 정보를 병합 함을 나타냅니다. 지금까지는이 경우 병합이 어떻게 작동하는지에 대한 정보가 없지만 현재 세션에서 설정되지 않은 알 수없는 파일과 레지스터에 대한 표시를 유지한다고 생각합니다.