4

私は最近、自分の多くをカスタマイズしており、私に与える.vimrcパワーと利便性が大好きです. :mksession私は現在、.vimrcセッションを自動ロードするために次のものを持っています:

function! LoadSession()                                                              
  if argc() == 0 && ! &diff                                                                                                                                                                                                                
    let g:sessiondir = $HOME . "/.vim/sessions" . getcwd()                           
    let g:sessionfile = g:sessiondir . "/session.vim"                                
    if (filereadable(g:sessionfile))                                                 
      exe 'source ' g:sessionfile                                                    
    else                                                                             
      echo "No session loaded." + argc() + argv()                                    
    endif                                                                            
  else                                                                               
    let g:sessionfile = ""                                                           
    let g:sessiondir = ""                                                            
    call ResCur()                                                                    
  endif                                                                              
endfunction

次に、これを で呼び出しますau VimEnter * nested :call LoadSession()。これは、vim が から読み取っている場合を除いて、ほとんどの場合にうまく機能しstdinます。その場合、セッションはまだロードされていますが、それが起こらないようにしたいと考えています。argc() == 0条件は十分だと思っていたでしょうが、-そのvimが0を返さないstdin原因から読み取るために呼び出されているようです。うんち!argc();]

私はあらゆる種類のことを調べてargv(0)(この場合は空です-なぜですか?)、vimが読み取っていることを識別する方法を見つけようとしましたstdin(そうしているというメッセージが表示されますが、わかりませんそれを利用する方法)などがありますが、今のところ運がありません。

ここでひどく明白な何かが欠けていると確信していますが、Googleとvim:helpは私をどこにも連れて行きません。

4

3 に答える 3

3

私が見つけた作品は

autocmd StdinReadPre * let g:my_is_stdin = 1

あなたのセッションで保存/読み込み機能を.vimrcテストします。このスキームが機能するためには、これらもon events /をexists("g:my_is_stdin")介して実行する必要があることに注意してください。autocmdVimLeaveVimEnter

于 2014-10-31T11:12:14.217 に答える
1

私が使用している session.vim プラグインは、拡張セッション処理を提供します特に、以前に保存したセッションを Vim の起動時に復元するかどうかを尋ねます。

ただし、プラグインの他の機能が必要でない限り、復元をトリガーするマッピングを使用した回避策もおそらく問題ありません。

于 2012-12-18T02:07:19.820 に答える
0

私はVimの起動時にセッションをロードすることをたくさんいじっていましたが、主にプラグインではうまく機能しないため、最終的にはあまり良い考えではないと判断しました。

最終的に、セッションを保存および復元するためのマッピングをいくつか追加しました。これには、クイック編集を行っているときにセッションをいじくり回す必要がないというボーナスがあります。

map <leader>ss :call CustomSessionSave()<CR>
map <leader>sl :call CustomSessionRestore()<CR>
map <leader>sd :call CustomSessionDelete()<CR>

多分これは役立ちます

于 2012-12-17T14:25:43.583 に答える