Vimでのタスクに応じて、いくつかのタブを開いています。
後で使用するために異なるセッションを保存するにはどうすればよいですか?
Vimでのタスクに応じて、いくつかのタブを開いています。
後で使用するために異なるセッションを保存するにはどうすればよいですか?
回答:
あなたは次のようなものが欲しい
:mksession ~/mysession.vim
その後、そのvimファイルを入手して、古いセッションに戻すことができます。
:source ~/mysession.vim
または-Sオプションでvimを開きます。
$ vim -S ~/mysession.vim
Session.vim
ます。したがって、現在のディレクトリに保存されているセッションを1つだけにする場合は、:mksession
または:mks
vimから現在のセッションを保存して、vim -S
それを再び開くことができます。
:mksessionは、行ったファイルへの変更を保存しないことに注意してください。セッションを保存した後でvimを閉じるというこの間違いを犯しました。しかし、次にセッションを開いたときに、ファイルに加えた変更は失われました。
:mksession
いるはずです。
:wqa
:xa
キーストロークが1つ少なくなります。わーい!
.vimrc
。 vimrc au FocusLost * silent! wa
これにより、バッファーがフォーカスを失ったときに自動的に保存されます。
ファイルエクスプローラー/ダッシュとしてNERDTreeを使用する場合、組み込みの:mksessionコマンドではなく、xolox / vim-sessionプラグインをお勧めします。何らかの理由で、:mksessionはNERDTreeバッファーの復元に失敗します。あなたのマイレージは異なる場合がありますが、私の経験を共有したいと思いました。
let g:nerdtree_tabs_open_on_gui_startup=0
し、let g:nerdtree_tabs_open_on_new_tab=0
xolox / vimのセッション作品を作るために。
プラグインを使用せずにプロセスを自動化したい場合は、Go Goを使用して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()
初心者でも、このスクリプトは理解しやすく、カスタマイズも簡単です。
このスクリプトはUnixシステム(MacOS / Linux)でのみ正しく機能することに注意してください。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の回答に少し追加することにしました。
私は彼のコードが好きですが、「引数がない場合のみ」というソリューションの追加は少し欠けているように見えました。これは私の変更されたバージョンです:
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
YouTubeには優れたチュートリアルがあります。
個人的には、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に感謝します!
:q
代わりに何回失ったか思い出せない:bd
…ありがとう!
プロジェクトのセッションが1つだけの場合は、
:mks
Session.vim
現在のディレクトリにファイルを作成し、(同じディレクトリから)セッションを開きます。
vim -S
セッションを変更して保存したい場合:
:mks!
これにより、ファイル自体ではなくセッションが保存されます。
複数のセッションを計画している場合は、プロジェクトのディレクトリにある隠しファイルに保存することをお勧めします。
:mks .session-name.vim
(同じディレクトリから)開くには:
vim -S .session-name.vim
セッションを保存:
:mks! .session-name.vim
セッションは隠しファイルに保存されるので、表示するには忘れないでください -a
ls -a
以下は唯一の設定です。それは本当に私のために働いた。私はここからそれを取りました、そこであなたはより完全な/複雑なバージョンを取ることもできます。
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
ページ