Когда мы редактируем файл, мы обычно делаем много ОТМЕНЫ подряд, скажем, 20 раз. В VIM это обычно выполняется нажатием u
20 раз, и это заставляет 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
повторном нажатии отменяет отмену («повторить»). Это настоящий ви. Поэтому я и другие пользователи этого сайта могут не знать ответа на ваш вопрос.