Когда мы редактируем файл, мы обычно делаем много ОТМЕНЫ подряд, скажем, 20 раз. В VIM это обычно выполняется нажатием u20 раз, и это заставляет VIM «подниматься» в стеке истории на 20 позиций. Если вы затем определитесь change, все эти последние 20 команд истории будут потеряны и заменены на change. Я хотел бы сделать changeбез потери этих 20 позиций. Так что, я думаю, я бы хотел сказать VIM прекратить запись истории, прежде чем я это сделаю change, и возобновить историю позже (не хочу changeв истории).
РЕДАКТИРОВАТЬ
Попытка быть более ясным: у меня есть функция, FFкоторая обновляет последние строки файла при записи в буфер. Итак, если я выполню 20 undos + write, последний writeоткроет новую ветку отмены. Я попытался добавить undojoinвнутрь FF(пытаясь следовать предложению jlmg ниже), но последовательность write-undo-write выдает ошибку: отмена не разрешена после отмены . Вместо этого я мог бы сделать некоторые sed ....после ухода vim, но так как я использую это через, SSHя предпочитаю решение только для vim (выполнение команды после выгрузки буфера не записывает в файл).
РЕДАКТИРОВАТЬ 2 Попробуйте сделать это в VIM: откройте пустой файл и выполните:
i1<ESC>:wa2<ESC>:wa3<ESC>:wa4<ESC>uu:w
Если сейчас вы сделаете a <CTRL>R, VIM напишет «3» обратно, а дальше <CTRL>Rвы получите 4. Это происходит ДАЖЕ, если вы делаете :wпосле каждого <CTRL>R. Тем не менее, если каждый раз, когда вы делаете a, :wвы выполняете функцию через BufWritePre, the <CTRL>Rне будет писать 3обратно. И это то, что я хочу сделать, именно поэтому я написал, чтобы «приостановить его», но, возможно, то, что я спрашиваю, не возможно, кроме работы с полной undotree().
vim.se, я бы попробовал это. Во всяком случае, кажется, Сато знает, как помочь.
sedжелаемый результат , но sed не может отменить ваши действия, так как же это сработает? Если бы вы смогли «приостановить историю», какое поведение вы бы ожидали от vim, когда вы потом отмените действия? Единственное поведение, которое я мог визуализировать, - это сгруппировать эти изменения (вместе с отменами) в один блок отмены, отсюда и мой ответ. Но если это не так, то что?
vi, но для меняviкоманда отмены отменяется один раз, а затем приuповторном нажатии отменяет отмену («повторить»). Это настоящий ви. Поэтому я и другие пользователи этого сайта могут не знать ответа на ваш вопрос.