Vim хранит историю ex-команд (доступную через :↑и q:), и эта история сохраняется после выхода.
Если я запускаю несколько экземпляров Vim (один и тот же пользователь, один и тот же домашний каталог), как Vim осуществляет арбитраж между историями команд? Кажется, что последний процесс для выхода выигрывает. Есть ли способ сохранить историю команд всех экземпляров?
command-line
command-history
persistent-state
200_success
источник
источник
~/.viminfo
собственность принадлежит вам. Распространенная ошибка - запускать людей,sudo vim ...
которые, если вы ранее не запускали vim от имени своего собственного пользователя, будут созданы~/.viminfo
как root. Если это проблема, я бы предложил научиться использоватьsudoedit
илиsudo -e
редактировать привилегированные файлы.chown
'мой мой .viminfo обратно к себе исправил. (Не уверен, как его владелец изменился на root, так как я всегда использовалsudoedit
, ну да ладно.)Ответы:
Ответ на ваш заглавный вопрос - это то, что вы заметили. Из руководства пользователя vim
:help 21.3
Однако имя файла viminfo (где хранится история команд, среди прочего, например, глобальные метки и содержимое регистра, если так настроено) является изменяемым! Это означает, что вы можете установить разные «истории» для разных проектов или экземпляров vim. Предполагая, что вы не запускаете более одного экземпляра vim на проект, управление именем файла viminfo с помощью vimrc (или другого плагина настроек проекта) является отличным способом справиться с этим.
Настройка альтернативных файлов viminfo
Для управления уровнем проекта мы хотим настроить vim для сохранения вашего viminfo в другом файле. Это может быть сделано в работающем vim перед выходом или вашим vimrc, например, в вашем vimrc могут быть строки, которые определяют, что определенный каталог принадлежит проекту.
Пример того, как vimrc автоматически устанавливает это на основе каталога:
Результатом вышеизложенного является то, что история проекта будет загружена при запуске и сохранена при выходе, если vim запущен в каталоге / projects / projA.
Загрузите альтернативный viminfo во время запуска
Это хорошо для случая, когда вы хотите сохранить свою историю в сторону и загрузить ее позже, не управляя ею на уровне проекта.
Во-первых, чтобы сохранить историю, вы добавляете к опции viminfo, как указано выше, перед выходом. Затем, чтобы загрузить историю, запустите vim с опцией -i
Если вы не хотите выходить из vim для сохранения файла viminfo, вы можете использовать
:wv
(:wviminfo
). Это сохранит файл viminfo без выхода из vim в соответствии с настройкой n выше. Вы также:wv SomeOtherFile
можете сохранить в месте, которое не совпадает с настройкой параметра viminfo. Это может быть более удобным, чем настройка имени файла для использования при выходе, но не мешает vim использовать файл по умолчанию после его выхода.Например, в первом vim:
и во втором терминале:
Или, если второй vim уже запущен и вы хотите загрузить viminfo:
Обратите внимание , что
:wv
и:rv
не изменить имя файла Vim будет экономить на выходе , ни имя файла для чтения во время запуска.Дополнительная информация
Описание
set viminfo+=nSomePath
: Мы используем команду set для настройки названной опцииviminfo
.+=
Показывает , что мы хотим , чтобы добавить к выбору, а не изменить все. Мы добавляемn
параметр, который указывает имя файла для viminfo. Сразу послеn
того, как у насSomePath
будет имя файла, используемого для сохранения viminfo.Документация для
wv
(:help wv
) указывает, что эта команда сначала прочитает файл viminfo, а затем объединит старую и новую информацию. Пока у меня нет информации о том, как происходит слияние в этом случае, но я предполагаю, что он сохраняет метки для неизвестных файлов и регистров, которые не установлены в текущем сеансе.источник