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 を使用する場合、組み込みの:mksessionコマンドの代わりに xolox/vim-session plugin をお勧めします。何らかの理由で、:mksessionはNERDTreeバッファーの復元に失敗します。あなたの走行距離は異なるかもしれませんが、私は私の経験を共有すると思いました。
プラグインを使用せずにプロセスを自動化する場合は、 Vim Tips Wiki から Go away and come back を使用できます。
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()
初心者でも、このスクリプトはやや理解し、カスタマイズしやすいです。
注意してくださいこのスクリプトはUnixシステム(MacOS/Linux)でのみ正しく動作します。Windowsで動作するように適合させる必要があります。
UPDATE:xc0de の提案を追加し、Vimにセッションをロードさせたい場合は、これらの行をVimEnter
行に置き換えることができます引数が指定されていない場合のみ:
if(argc() == 0)
au VimEnter * nested :call LoadSession()
endif
このタスクには非常に便利なプラグインがあります vim-startify 最近開いたファイルなど、他の多くのものを処理します。非常に簡単なインターフェイスも備えています。
私は数日からそれを使用しており、今まで完全に動作します。お役に立てば幸いです。
この素晴らしいプラグイン呼び出し 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
YouTubeには優れた チュートリアル があります。
これは私にとって(そしておそらく他の人にとっても)Vimでセッションを操作するための最初のヒットなので、この自動化の方法に関する@mathieloの回答に少し追加することにしました。
私は彼のコードが好きですが、「引数がない場合のみ」ソリューションの追加は少し欠けているように見えました。これは私の修正版です:
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を開くことができます。セッションが存在しない場合、新しいセッションが作成されます。
個人的には、Tim Popeの Obsession プラグインをラップして、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!
複数のセッションを(ディレクトリ/リポジトリごとに)管理するために、最近vim-sessionプラグインから vim-workspace に切り替えました。そのセッション管理は比較的単純で、かなりうまく機能します。
以下が唯一の設定です。それは本当に私のために働いた。 here から取得しました。より完全/複雑なバージョンを取得することもできます。
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
セッションはどこにでも保存できます。
例:
:mksession! D:/session.ses
これにより、セッションがDドライブに保存されます。
これは次のように入力して開くことができます
:so D:/session.ses
vimファイルのいずれか。
プロジェクトのセッションを1つだけにする予定がある場合
:mks
これにより、現在のディレクトリにSession.vim
ファイルが作成され、セッションが(同じディレクトリから)開かれます。
vim -S
セッションを変更して保存する場合:
:mks!
これにより、ファイル自体ではなくセッションが保存されます!
複数のセッションを予定している場合、プロジェクトのディレクトリ内の隠しファイルに保存することを好みます:
:mks .session-name.vim
(同じディレクトリから)開くには:
vim -S .session-name.vim
セッションを保存:
:mks! .session-name.vim
セッションは隠しファイルに保存されるため、それらを表示するには-a
を忘れないでください
ls -a