Запретить vim загружать сессии при чтении из stdin

В последнее время я много настраивал свои .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 для чтения из stdin, вызывает argc(), чтобы не вернуть 0. Poop! ;]

Я пробовал все что угодно, посмотрев на argv(0) (в данном случае это пусто - почему?), пытаясь найти способы определения того, что vim читает из stdin (оно показывает сообщение, что делает, но я не могу понять, как нажать в это) и т. д., но пока не повезло.

Я уверен, что мне здесь не хватает чего-то ужасно очевидного, но Googles и vim :help меня никуда не ведут, так что я надеюсь, что какая-то добрая душа сможет пролить свет на это для меня.

4 голоса | спросил HerbCSO 17 MonEurope/Moscow2012-12-17T05:47:52+04:00Europe/Moscow12bEurope/MoscowMon, 17 Dec 2012 05:47:52 +0400 2012, 05:47:52

3 ответа


0

плагин session.vim , который я использую, предлагает расширенные обработка сеанса В частности, он спрашивает, следует ли восстанавливать ранее сохраненный сеанс при запуске Vim.

Но если вам не нужны другие функциональные возможности плагина, ваш обходной путь с отображениями, запускающими восстановление, вероятно, тоже подойдет.

ответил Ingo Karkat 18 TueEurope/Moscow2012-12-18T06:07:19+04:00Europe/Moscow12bEurope/MoscowTue, 18 Dec 2012 06:07:19 +0400 2012, 06:07:19
0

То, что я нашел, имеет работы

autocmd StdinReadPre * let g:my_is_stdin = 1

в вашем .vimrc, а затем проверьте на exists("g:my_is_stdin") в вашей сессии сохранение /загрузка функций. Имейте в виду, что они должны выполняться также через autocmd для событий VimLeave /VimEnter, чтобы эта схема работала.

ответил jhrmnn 31 +03002014-10-31T14:12:14+03:00312014bEurope/MoscowFri, 31 Oct 2014 14:12:14 +0300 2014, 14:12:14
0

Я много возился с загрузкой сессий при запуске Vim и в итоге решил, что это не очень хорошая идея, в основном потому, что она плохо работает с плагинами.

В итоге я добавил несколько сопоставлений для сохранения и восстановления сеанса. Это дает вам преимущество в том, что вам не нужно возиться с сеансом при быстром редактировании.

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

Может быть, это поможет

ответил mihai 17 MonEurope/Moscow2012-12-17T18:25:43+04:00Europe/Moscow12bEurope/MoscowMon, 17 Dec 2012 18:25:43 +0400 2012, 18:25:43

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132