Найкращі практики VIM-файлів своп-файлів?


14

Кожен раз, коли я припиняю сеанс у vim, втрачаючи зв’язок, я досить наповнений дред (і все ж продовжую використовувати vim ... яким я мазохіст), тому що коли я знову відкриваю свої файли, купую своп- файли чекають, щоб зняти мою роботу. Які найкращі практики роботи з файлами swap vim? Ви просто вибираєте найновіший? Якщо файл працює так, як ви очікуєте, ви просто видалите файли підкачки? Як їх позбутися?


5
Для захисту вашої роботи існують файли обміну. Подумайте про використання gnu-екрану.

1
Я не хочу вимикати функціональність; це дратує, але, як ви заявляєте, корисно.
leeand00

1
Я просто хочу знати, як правильно ним користуватися.
leeand00

2
@DrEval Я використовую tmux
leeand00

2
Якщо ви використовуєте tmux, вам не потрібно буде турбуватися про втрату зв’язку: просто підключіться до свого сеансу, коли ви знову підключитесь. Можливо, вас також зацікавлять mosh та плагін відновлення @ ChristianBrabandt's Recover .
Багатий

Відповіді:


24

Не панікуйте!

Відновлення файлів завжди безпечне, тому що vim ніколи не записує жодних змін, поки ви їх самі не напишете. Тож відновлення з файлу swap та закриття без збереження нічого не змінить.

Організуйте свої свопфіли:

Отримайте vim, щоб розмістити всі файли своп у одному місці, щоб ви завжди знали, де вони знаходяться:

set directory^=$HOME/.vim/swap//

або де завгодно. Використання //в кінці імені файлу змушує vim використовувати абсолютні шляхи до імен файлів підкачки, щоб у вас не було зіткнень імен. Переконайтесь, що каталог існує, або vim не буде використовувати його (він не створить його для вас).

Примітка. Це працює лише на змінних середовища, якщо ви хочете використовувати змінну vimscript, то нам потрібно використовувати :executeмагію:

execute "set directory^=".my_vim_home_var."/swap//"

Розрізняйте відмінності:

Допомога Vim передбачає дуже корисну команду для використання в цій ситуації: :DiffOrig. Це не команда vim за замовчуванням , тому скопіюйте реалізацію з :h :DiffOrigвашого vimrc. (це також, $VIMRUNTIME/defaults.vimякщо у вас є vim8). Тепер ви можете відновити файл і просто запустити DiffOrig, щоб отримати vimdiff того, що змінилося з немодифікованої версії.

Якщо ви хочете порівняти вміст декількох файлів підкачки, відновіть файл із кожним різним файлом свопінгу, а потім запишіть результат у тимчасові файли. Тепер завантажте файли та запустіть :diffthisкожен файл, внесіть потрібні зміни, запишіть їх у вихідний файл та видаліть тимчасові та поміняйте файли.

Корисні команди:

:swapname: отримати ім'я, яке vim використовує для файлу swap для поточного буфера ( :h :swapname) :recover: відновлює вибраний файл, як при запуску vim та натисканні R( :h :recover)

Ознайомтеся з допомогою:

Vim має цілий розділ інструкції по відновленню: :usr_11.txt
контрольний допомоги Vim на файли підкачки: :h swap-file, h recovery
довідки по опції каталогу (для установки розташування файлу підкачки)::h 'directory'

Редагувати: Модифікований приклад налаштування каталогу, як зазначено в коментарях @B Layer


А як бути, коли у вас є кілька файлів підкачки? Через безліч перерваних з'єднань?
leeand00

1
Я згадував, що у другому абзаці "Розрізняй відмінності". Після того, як ви скористалися розрізненням для визначення змін, які ви хочете зберегти, видаляйте всі створені тимчасові файли та старі файли swap (тепер ви знаєте, де всі файли swap).
флемінгфлінг

1
FYI, вам не потрібно використовувати exec... set directory^=$HOME/.vim/swap//працює чудово, поки $HOMEце ініціалізована змінна середовище. Див :h expand-env. Також працює з dictionary, undodirі, backupdirщоб назвати декілька.
B Layer

Дякуємо, що нагадали про це! Я замість цього використовую змінну vimscript у своїй конфігурації, отже, змінним Execute та забутому середовищу цього не потрібно. Думаючи про це, я, мабуть, повинен просто використовувати vim, щоб встановити змінну середовища.
флемінгфлінг

2

Особисто я вимкнув файли swap та резервного копіювання, оскільки це має тенденцію створювати файли swap та файли резервного копіювання скрізь і часто створює конфлікти. Постійне скасування Vim було набагато надійніше і без помилок.

В даний час Vim має стійке скасування, його набагато більш дрібнозернистий метод резервного копіювання. Кожен раз, коли ви натискаєте Esc, поточний стан файлу зберігається.

Ви можете використовувати :undolistабо плагіни, такі як gundo , або скасувати дерево для перегляду історії скасування.

Щоб використовувати vim таким чином:

  • створити каталог, де ви будете захоплювати історію редагування для кожного файлу
  • скажіть vim використовувати цей каталог
  • увімкнути постійні скасування

У оболонці:

mkdir ~/.vim/undodir

У Вім

set undodir=~/.vim/undodir
set undofile

Щоб вимкнути файли swap: :set noswapfile


1
З цією відповіддю є кілька досить великих проблем. 1. Постійне скасування рішення вирішує іншу проблему для заміни файлів (і 'writebackup'вирішує ще одну проблему). Якщо ввімкнено постійне скасування, це не допоможе, якщо ваш комп'ютер вийде з ладу. Ви можете стверджувати, що файли підкачки непотрібні з інших причин (сучасна стабільність ОС, існування ДБЖ), але ви цього не робили в цій відповіді. 2. Налаштування 'undodir' не дозволяє стійке скасування! Вам потрібно встановити 'undofile'для цього
Багатий
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.