[session] Vim에서 여러 개의 다른 세션을 저장하고 복원하는 방법은 무엇입니까?

Vim의 작업에 따라 여러 탭이 열려 있습니다.

나중에 사용하기 위해 다른 세션을 저장하려면 어떻게해야합니까?



답변

당신은 같은 것을 원합니다

:mksession ~/mysession.vim

그런 다음 나중에 해당 vim 파일을 소싱하면 이전 세션이 다시 시작됩니다.

:source ~/mysession.vim

또는 -S 옵션을 사용하여 vim을 엽니 다.

$ vim -S ~/mysession.vim


답변

vimrc에서이 세션 옵션을 설정할 수 있습니다. 세션을 저장 한 후 vimrc를 변경하면 특히 옵션이 성가시다.

set ssop-=options    " do not store global and local values in a session
set ssop-=folds      " do not store folds


답변

: mksession은 변경 한 파일을 저장하지 않습니다. 세션을 저장 한 후 Vim을 닫는 실수를저기서 시작했습니다. 그러나 다음에 세션을 열면 파일에 대한 변경 사항이 사라졌습니다.


답변

당신이 사용하는 경우 NERDTree를 파일 탐색기 / 대시로, 내가 추천 할 것입니다 플러그인 xolox / 정력 세션을 mksession 명령을 대신 내장의. 어떤 이유로 : mksession이 NERDTree 버퍼를 복원하지 못합니다. 마일리지가 다를 수 있지만 경험을 공유하겠다고 생각했습니다.


답변

플러그인을 사용하지 않고 프로세스를 자동화하려면 Go away을 사용 하여 Vim Tips Wiki 에서 돌아올 수 있습니다 .

Vim을 종료 할 때마다 현재 세션이 저장되고 ~/.vim/sessionsVim이 열리면 다시로드됩니다. 또한 현재 경로를 기반으로하므로 다른 디렉토리에서 Vim을 열면 다른 세션이 있으므로 다른 프로젝트에서 작업 할 때 매우 유용합니다.

~/.vimrc파일을 편집 하고 다음을 추가하십시오.

function! MakeSession()
  let b:sessiondir = $HOME . "/.vim/sessions" . getcwd()
  if (filewritable(b:sessiondir) != 2)
    exe 'silent !mkdir -p ' b:sessiondir
    redraw!
  endif
  let b:filename = b:sessiondir . '/session.vim'
  exe "mksession! " . b:filename
endfunction

function! LoadSession()
  let b:sessiondir = $HOME . "/.vim/sessions" . getcwd()
  let b:sessionfile = b:sessiondir . "/session.vim"
  if (filereadable(b:sessionfile))
    exe 'source ' b:sessionfile
  else
    echo "No session loaded."
  endif
endfunction

" Adding automatons for when entering or leaving Vim
au VimEnter * nested :call LoadSession()
au VimLeave * :call MakeSession()

초보자도이 스크립트 를 이해하고 사용자 정의하기 가 다소 쉽습니다.

주의 이 스크립트는 유닉스 시스템 (맥 OS / 리눅스)가 제대로 작동합니다, 그것은 Windows에서 작업에 적용 할 필요가있다.


업데이트 : 0xc0de 의 제안을 추가하면 인수가 제공되지 않은 경우에만VimEnter Vim에서 세션을로드하려는 경우 이러한 행을 바꿀 수 있습니다 .

if(argc() == 0)
  au VimEnter * nested :call LoadSession()
endif


답변

이 작업 vim-startify 에는 최근에 열린 파일 등과 같은 다른 많은 것들을 처리 하는 매우 유용한 플러그인이 있으며 인터페이스도 매우 쉽습니다.

나는 며칠 이래로 그것을 사용하고 있으며 지금까지 완벽하게 작동합니다. 그것이 당신을 돕기를 바랍니다.


답변

이것은 Vim에서 세션을 사용하는 방법에 대해 Google에서 나에게 (그리고 아마도 다른 사람들에게) 첫 번째 히트이기 때문에 이것을 자동으로 만드는 방법에 대한 @mathielo의 답변에 약간을 추가하기로 결정했습니다.

나는 그의 코드를 좋아하지만 “args가없는 경우에만”솔루션을 추가하는 것은 약간 부족한 것처럼 보였다. 이것은 내 수정 된 버전입니다.

function! MakeSession(overwrite)
  let b:sessiondir = $HOME . "/.vim/sessions" . getcwd()
  if (filewritable(b:sessiondir) != 2)
    exe 'silent !mkdir -p ' b:sessiondir
    redraw!
  endif
  let b:filename = b:sessiondir . '/session.vim'
  if a:overwrite == 0 && !empty(glob(b:filename))
    return
  endif
  exe "mksession! " . b:filename
endfunction

function! LoadSession()
  let b:sessiondir = $HOME . "/.vim/sessions" . getcwd()
  let b:sessionfile = b:sessiondir . "/session.vim"
  if (filereadable(b:sessionfile))
    exe 'source ' b:sessionfile
  else
    echo "No session loaded."
  endif
endfunction

" Adding automatons for when entering or leaving Vim
if(argc() == 0)
  au VimEnter * nested :call LoadSession()
  au VimLeave * :call MakeSession(1)
else
  au VimLeave * :call MakeSession(0)
endif

여기서 눈에 띄는 변화는 옵션 재정의입니다. 옵션없이 Vim을 열면 기존 세션이 열리고 나가면 변경 사항을 덮어 씁니다. 옵션으로 Vim을 열면 세션이없는 경우에만 새 세션이 생성되므로 세션이있는 디렉토리에서 파일을 덮어 쓰지 않고 단일 파일을 열 수 있습니다. 그런 다음 옵션없이 Vim을 열어 세션을 실행할 수 있습니다. 세션이 없으면 새 세션을 만듭니다.