Удаление буфера из сессии vim - PullRequest
8 голосов
/ 08 марта 2011

Правильно ли я удаляю буферы перед сохранением сеанса?Кажется, что он попадает в каждый буфер, который я открыл.Я использую gvim со стандартными командами :tabe и :tabnew.

  1. Чистый запуск gvim
  2. Я открываю несколько вкладок с помощью :tabe, выполняю некоторую работу
  3. :mksession! ~/session для сохранения моего состояния сеанса
  4. Не нужен буфер # 14, :14bd
  5. :ls подтверждает, что # 14 был удален
  6. :mksession! ~/session чтобы снова сохранить сеанс
  7. Завершить работу за день, :qa
  8. Загрузить gvim на следующий день, :so ~/session
  9. Буфер 14 все еще существует !!
  10. ???
  11. НЕТ ПРИБЫЛИ

Ответы [ 3 ]

7 голосов
/ 09 марта 2011

Номера буферов не сохраняются при сохранении / восстановлении сеансов. Таким образом, если у вас есть 15 открытых буферов и вы удалите один, у вас будет 14 буферов. Когда сеанс восстанавливается, этим 14 буферам будут присвоены номера от 2 до 15, независимо от того, какие номера у них были ранее (номер 1 был взят безымянным буфером при запуске vim, он будет закрыт файлом сессии). Итак, проверьте, имеет ли буфер # 14, созданный файлом сеанса, то же имя файла, что и старый буфер # 14.

Обновление: Я извлек файл сеанса и обнаружил, что команда args может вызывать проблемы. Я прав, что буфер № 14 был открыт из оболочки? Попробуйте создать следующую команду и использовать ее вместо bd:

command -nargs=? -bang BW :silent! argd % | bw<bang><args>
4 голосов
/ 09 марта 2011

Вы делаете это правильно - я делаю именно это почти каждый день, и это прекрасно работает для меня. Если вы удаляете буфер из списка с помощью bd и сохраняете сеанс, он должен остаться в списке при восстановлении.

Чтобы выяснить, что происходит не так, я бы порекомендовал открыть файл сеанса и выполнить поиск «badd» (например, :g/badd, чтобы получить всплывающий список). Эти команды являются командами, которые загружают буферы обратно в список буферов с правильным индексом.

Кроме того, я бы, вероятно, сохранил второй сеанс под другим именем и выполнил бы vimdiff между двумя файлами, просто чтобы убедиться, что ничего не происходит неправильно.

Файлы сессий довольно легко читаются, и если вы застряли, вы всегда можете :h для конкретной команды.

0 голосов
/ 16 января 2017

Хорошо: это меня тоже раздражало.У меня есть команда (Arch Linux: файловый менеджер Krusader)

vim --remote

, которая позволяет мне щелкнуть правой кнопкой мыши файл в Krusader и открыть этот файл в Vim.Я также сохранить сессий Vim через мой ~ / .vimrc:

" Save session on quitting Vim:
autocmd! VimLeave * mksession! ~/.vim/vim_session.vim
" mksession! overwrites old session

" Restore session on starting Vim:
autocmd! VimEnter * source ~/.vim/vim_session.vim

Тем не менее, файлы, которые я открыть снаружи с помощью 'ВИМ --remote', например,

/mnt/Vancouver/Programming/scripts/chunk.sh
1009 * упорно сохраняются между сессиямидаже после обычного: bd,: bw,: bw!и т. д., и / или удаление файла сеанса vim.

Глядя на файл vim_session.vim, я заметил строку 'argadd' с постоянным файлом, вызывающим сбой:

argadd /mnt/Vancouver/Programming/scripts/chunk.sh

Итак,

:help arglist

:argd /mnt/Vancouver/Programming/scripts/chunk.sh

удаляет этот аргумент.

Наконец, после очистки этого файла из списка буферов (: bd) и перезапуска Vim - предыдущий сеанс восстанавливается, минус этот файл.


Редактировать: Если вы не хотите вводить длинные пути при выполнении команды ": argd", и вам ничего не нужно перечислять с помощью ": arg", просто выполните

:argd*                                                                                     
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...