Як вирішується історія команд між декількома екземплярами Vim?


15

Vim зберігає історію колишніх команд (доступних через :і q:), і ця історія зберігається після виходу.

Якщо я запускаю кілька екземплярів Vim (той самий користувач, той самий домашній каталог), як Vim арбітрує між історіями команд? Здається, останній процес виходу виграє. Чи є спосіб зберегти історії команд усіх примірників?


1
Дійсно? Ця історія не зберігається після того, як вийшли з мене. (Vim 7.4.52, Ubuntu 14,04)
Дверна ручка

3
@Doorknob Переконайтесь, що ваша особа ~/.viminfoналежить вам. Поширена помилка полягає у запуску людей, sudo vim ...які, якщо ви раніше не використовували vim як власний користувач, створять ~/.viminfoяк root. Якщо це проблема, я б запропонував навчитися використовувати sudoeditабо sudo -eредагувати привілейовані файли.
Jamessan

@jamessan Хм, схоже, це справді була проблема; chown'я мій .viminfo повернувся до себе. (Не впевнений, як його право власності змінилося на root, оскільки я завжди використовував sudoedit, але так добре.)
Doorknob

Відповіді:


10

Відповідь на ваше заголовкове запитання - це те, що ви спостерігали. З посібника користувача vim:help 21.3

Якщо Ви запускаєте Vim кілька разів, останній, що виходить, зберігатиме його інформацію. Це може призвести до втрати інформації, яка раніше виходила з Vims, що зберігається. Кожен предмет можна запам'ятати лише один раз.

Однак ім'я файлу viminfo (де зберігається історія команд, серед іншого, як глобальні позначки та вміст реєстру, якщо так налаштовано) може змінюватися! Це означає, що ви можете налаштувати різні "історії" для різних проектів або випадків vim. Якщо припустити, що ви не запускаєте більше одного екземпляра vim для кожного проекту, керування іменем файлу viminfo через vimrc (або інший плагін налаштувань проекту) - чудовий спосіб впоратися з цим.

Налаштування альтернативних файлів viminfo

Для управління рівнем проекту ми хочемо налаштувати vim для збереження вашого viminfo в інший файл. Це можна зробити в запущеному vim перед тим, як вийти, або вашим vimrc, наприклад, у вашому vimrc можуть бути рядки, які визначають певний каталог як належний до проекту.

:set viminfo+=nPath/to/custom/viminfofile

Приклад автоматичного встановлення цього vimrc на основі каталогу:

 if getcwd() == "/projects/projA"
     set viminfo+=n~/.viminfo-projA
 endif

Результатом вищесказаного є те, що історія проекту буде завантажена під час запуску та збережена при виході, якщо vim запускається у каталозі / projects / projA.

Завантажте альтернативну програму viminfo під час запуску

Це добре для випадку, коли ви хочете зберегти свою історію на стороні та завантажити її згодом, не керуючи нею на рівні проекту.

По-перше, для збереження історії ви додаєте до параметра viminfo як вище перед виходом. Потім, щоб завантажити історію, запустіть vim з опцією -i

vim -i Path/to/custom/viminfofile

Якщо ви не хочете виходити з vim, щоб зберегти файл viminfo, ви можете використовувати :wv( :wviminfo). Це зберігає файл viminfo, не виходячи з vim відповідно до n налаштувань вище. Ви також можете зробити це :wv SomeOtherFileдля збереження до місця, яке не є таким, як у налаштуваннях viminfo. Це може бути зручніше, ніж налаштування імені файлу для використання при виході, але не перешкоджає vim використовувати файл за замовчуванням після його виходу.

Наприклад, у першому vim:

:wv ~/customInfo

і у другому терміналі:

vim -i ~/customInfo

Або якщо другий vim вже запущений і ви хочете завантажити viminfo:

:rv ~/customInfo

Зауважте, що :wvі :rvне змінювати ім’я файлу vim не збереже при виході, ані ім'я файлу, прочитаного під час запуску.

Додаткова інформація

Опис set viminfo+=nSomePath: Ми використовуємо команду set для настройки параметра, названого viminfo. +=Показує , що ми хочемо , щоб додати до вибору, а не змінити все. Додаємо nопцію, яка визначає ім'я файлу для viminfo. Одразу після того, як у nнас SomePathз'явиться ім'я файлу, що використовується для збереження viminfo.

Документація для wv( :help wv) вказує, що ця команда спочатку прочитає файл viminfo, потім об'єднається між старою та новою інформацією. Поки що я не маю інформації про те, як працює злиття в цьому випадку, але я думаю, що він зберігає позначки для невідомих файлів та регістрів, які не встановлені в поточному сеансі.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.