Это правильный `vim -S session` загрузит` .vimrc` снова? - PullRequest
0 голосов
/ 30 ноября 2018

Я обнаружил, что все настройки в .vimrc на самом деле хранятся в файле session.Если это так, зачем vim -S session загружать .vimrc снова?Почему Vim Design так?

У меня есть некоторые команды в .vimrc, и когда я использую vim -S, это вызывает проблемы, потому что эти команды должны выполняться только один раз, а не дважды.

Большое спасибо.

Мой проблемный блок vimrc в mksession:

let g:netrw_banner = 0
let g:netrw_liststyle = 3
let g:netrw_browse_split = 4
let g:netrw_altv = 1
let g:netrw_winsize = 25
augroup ProjectDrawer
  autocmd!
  autocmd VimEnter * :Vexplore
  autocmd TabNew * call feedkeys(":Vexplore\<CR>", 'n')
augroup END

Ответы [ 2 ]

0 голосов
/ 30 ноября 2018

Что хранит сеанс

То, что сохраняется в сохраненном сеансе, управляется параметром :help 'sessionoptions'.Стандартные настройки очень консервативны и направлены на то, чтобы не потерять какие-либо специальные сопоставления или измененные параметры.

Однако большинство пользователей помещают свои настройки в ~/.vimrc, используют плагины и плагины файлового типа и, как правило, не составляютсопоставления или изменения настроек на лету.Если этот тип рабочего процесса также применим к вам, я бы предложил удалить следующие значения:

:set sessionoptions-=globals
:set sessionoptions-=localoptions
:set sessionoptions-=options

Вы также можете удалить buffers и resize.Это изменение не только уменьшает размер сохраненного сеанса, но также предотвращает переопределение старого сеанса любой конфигурацией, измененной вами в ~/.vimrc.

vimrc reload

Таким образом, ваш ~/.vimrc не перезагружается напрямую, но (по умолчанию 'sessionoptions'), многие параметры и переменные восстанавливаются.

Используя :augroup, затем :autocmd!, вытакже избежал частой ошибки новичка: без этого autocmds будет переопределяться при каждой перезагрузке вашего ~/.vimrc.:autocmd! предотвращает это, а :augroup делает это применимым только к вашей собственной группе.

сессий и специальных (подключаемых) буферов

Сеанс должен хранить все открытые в данный момент буферы.Обычные буферы содержат содержимое файла, и они могут быть легко перезагружены при повторном открытии сеанса.К сожалению, плагины (неправильно) используют буферы для своих пользовательских интерфейсов (например, боковой панели, как в плагине netrw ), и обработка сессий Vim не достаточно умна, чтобы различать их.Но у этих буферов плагинов нет соответствующего файла;вместо этого плагин использовал команду для непосредственного построения и изменения своего содержимого, часто с помощью переменных плагина, которые - см. выше - либо сохраняются, либо восстанавливаются или не сохраняются.

Плагины должны были бы явно обрабатывать восстановление сеанса;Я не помню ни одного плагина, который бы это делал.Очень часто вы увидите, что «пустое» окно восстановлено, и плагин может или не может распознать или использовать это повторно.(И я думаю, что это проблема, о которой вы спрашиваете.)

Общая рекомендация - закрыть все буферы плагинов перед сохранением сеанса , либо вручную, либо написав пользовательский :Mksession Оболочка, которая автоматизирует это для вас.При перезагрузке сеанса ваша конфигурация может снова создать новое функциональное окно плагина.(Или вы должны вызвать это вручную.)

0 голосов
/ 30 ноября 2018

Не все настройки из vimrc хранятся в файле сеанса (см. :h mksession).Параметры, которые вы видите, указаны в опции :h sessionoptions.

Вы можете загрузить сеанс без загрузки vimrc, используя vim -u NORC -S;однако вы быстро увидите, что вам не хватает желаемых базовых настроек.

Какие команды следует запускать только один раз?Существуют конкретные способы предотвратить ненужный запуск команд при поиске вашего vimrc.

Например, если команда, которая должна выполняться только один раз, является autocmd, вы должны использовать augroup, например, так:

augroup vimrc
  autocmd!  " Remove all vimrc autocommands
  au BufNewFile,BufRead *.html so <sfile>:h/html.vim
augroup END
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...