Vim의 작업에 따라 여러 탭이 열려 있습니다.
나중에 사용하기 위해 다른 세션을 저장하려면 어떻게해야합니까?
Vim의 작업에 따라 여러 탭이 열려 있습니다.
나중에 사용하기 위해 다른 세션을 저장하려면 어떻게해야합니까?
답변:
당신은 같은 것을 원합니다
:mksession ~/mysession.vim
그런 다음 나중에 해당 vim 파일을 소싱하면 이전 세션이 다시 시작됩니다.
:source ~/mysession.vim
또는 -S 옵션을 사용하여 vim을 엽니 다.
$ vim -S ~/mysession.vim
Session.vim
. 당신은 단지 하나의 세션이 현재 디렉토리에 저장 한하려는 경우, 당신은 사용할 수 있습니다 :mksession
또는 :mks
정력에서 현재 세션을 저장하고, 단지 vim -S
그것을 백업 엽니 다.
: mksession은 변경 한 파일을 저장하지 않습니다. 세션을 저장 한 후 Vim을 닫는 실수를저기서 시작했습니다. 그러나 다음에 세션을 열면 파일에 대한 변경 사항이 사라졌습니다.
:mksession
.
:wqa
:xa
한 번의 적은 키 스트로크. 예이!
.vimrc
: vimrc au FocusLost * silent! wa
버퍼가 포커스를 잃을 때마다 자동으로 저장됩니다.
당신이 사용하는 경우 NERDTree를 파일 탐색기 / 대시로, 내가 추천 할 것입니다 플러그인 xolox / 정력 세션을 mksession 명령을 대신 내장의. 어떤 이유로 : mksession이 NERDTree 버퍼를 복원하지 못합니다. 마일리지가 다를 수 있지만 경험을 공유하겠다고 생각했습니다.
let g:nerdtree_tabs_open_on_gui_startup=0
하고 let g:nerdtree_tabs_open_on_new_tab=0
xolox / VIM-세션 작업을 할 수 있습니다.
플러그인을 사용하지 않고 프로세스를 자동화하려면 Go away을 사용 하여 Vim Tips Wiki 에서 돌아올 수 있습니다 .
Vim을 종료 할 때마다 현재 세션이 저장되고 ~/.vim/sessions
Vim이 열리면 다시로드됩니다. 또한 현재 경로를 기반으로하므로 다른 디렉토리에서 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
if argc() == 0 au VimEnter * nested :call LoadSession() end
pwd
) vim을 종료하기 전에 마지막 작업 디렉토리로 어떻게 설정할 수 있습니까? ~/
? 아래의 세션이 아닌 마지막 작업 세션을로드 할 수 있습니다 .
이 작업 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을 열어 세션을 실행할 수 있습니다. 세션이 없으면 새 세션을 만듭니다.
$HOME/.vim/plugin/sessions.vim
했지만 세션 파일을 저장하지는 않습니다. ¯ \ _ (ツ) _ / ¯
이 훌륭한 플러그인 호출 vim-session이 있습니다. 매우 강력합니다. 설치하려면 :
cd ~/.vim/bundle
git clone https://github.com/xolox/vim-session.git
다음 .vimrc
과 같이 파일 에서 기능을 매핑했습니다 .
nnoremap <leader>so :OpenSession
nnoremap <leader>ss :SaveSession
nnoremap <leader>sd :DeleteSession<CR>
nnoremap <leader>sc :CloseSession<CR>
이제 일반 모드에서 입력 <leader>ss
하면 다음과 같은 명령이 표시됩니다
:SaveSession
이제 세션 이름을 추가하십시오
:SaveSession namesession
그리고 그게 전부입니다.
Vim을 닫았다가 다시 열면
:OpenSession
세션이 열린 것을 볼 수 있습니다.
.vimrc
파일 에 추가 할 다른 구성이 많이 있습니다 . 예제는 설명서를 참조하십시오.
let g:session_directory = "~/.vim/tmp/session" // the directory must be created before the sessions will be saved there
let g:session_autoload = "no" // automatic reload sessions
let g:session_autosave = "no" // autosave
let g:session_command_aliases = 1
좋은의이 튜토리얼 유튜브에가.
개인적으로 나는 Tim Pope의 Obsession 플러그인을 감싸서 a를 정의 sessiondir
하고 경로를 입력하지 않도록합니다.
let g:sessiondir = $HOME . ".vim/sessions"
command! -nargs=1 MkSession call MkSession(<f-args>)
function! MkSession(sessionfile)
if !isdirectory(g:sessiondir)
call mkdir(g:sessiondir, "p")
endif
exe 'Obsession' g:sessiondir . '/' . a:sessionfile
endfunction
command! -nargs=1 LoadSession call LoadSession(<f-args>)
function! LoadSession(sessionfile)
let a:sessionpath = g:sessiondir . a:sessionfile
if (filereadable(a:sessionpath))
exe 'source ' a:sessionpath
else
echo "No session loaded."
endif
endfunction
감사합니다 @mathielo @mathielo의 예에 따라 아래 세션을 .vimrc에 추가하여 활성 세션 (있는 경우)을 저장했습니다.
au VimLeave * if this_session != "" | exe "mksession! ".this_session
더 많은 줄을 넣으려면 endif를 사용해야합니다.
au VimLeave * if v:this_session != ""
au VimLeave * exe "mksession! ".this_session
au VimLeave * endif
vim에서 새 세션을 저장하기 만하면됩니다.
:mks [Session filename]
그리고 시작 후
$ vim -S [Session filename]
vim은 세션을 시작하며 vim을 닫을 때마다 세션을 저장하지 않아도됩니다.
활성 세션이 없으면 .vimrc는 아무것도하지 않습니다. 이전과.
그것이 내가 찾던 것입니다! 다시 @mathielo 감사합니다!
:q
대신 세션을 잃어버린 횟수를 기억할 수 없습니다 :bd
... 감사합니다!
프로젝트에 대해 하나의 세션 만 계획하는 경우
:mks
이는 만듭니다 Session.vim
현재 디렉토리에있는 파일을 다음 (같은 디렉토리에서) 세션을 열 수 :
vim -S
세션을 변경하고 저장하려면 다음을 수행하십시오.
:mks!
파일 자체가 아닌 세션이 저장됩니다!
여러 세션을 계획하고 있다면 프로젝트 디렉토리의 숨겨진 파일에 저장하는 것이 좋습니다 .
:mks .session-name.vim
같은 디렉토리에서 열려면 :
vim -S .session-name.vim
세션 저장 :
:mks! .session-name.vim
세션은 숨겨진 파일로 저장되므로 잊지 말아야합니다. -a
ls -a
아래는 유일한 conf입니다. 정말 나를 위해 일했다. 나는 여기 에서 가져 왔으며 더 완전한 / 복잡한 버전을 취할 수도 있습니다.
set viewoptions+=cursor,folds,slash,unix
set viewoptions-=options
augroup vimrc
autocmd BufWritePost *
\ if expand('%') != '' && &buftype !~ 'nofile'
\| mkview
\| endif
autocmd BufRead *
\ if expand('%') != '' && &buftype !~ 'nofile'
\| silent loadview
\| endif
augroup END
디렉토리 / 리포지토리별로 여러 세션을 관리하기 위해 최근에 vim-session 플러그인에서 vim-workspace로 전환했습니다 . 세션 관리는 비교적 간단하고 꽤 잘 작동합니다.
man
페이지