Quando editamos um arquivo, normalmente fazemos muitos UNDO seguidos, digamos, 20 vezes. No VIM, isso geralmente é realizado pressionando u20 vezes e faz com que o VIM suba na pilha de histórico 20 posições. Se você confirmar change, todos os últimos 20 comandos do histórico serão perdidos e substituídos por change. Eu gostaria de fazer o changesem perder essas 20 posições. Então, acho que gostaria de dizer ao VIM para parar de gravar o histórico antes de fazê-lo changee continuar o histórico depois (não o quero change).
EDIT
Tentando ser mais claro: Eu tenho uma função FFque atualiza as últimas linhas de um arquivo quando o buffer é gravado. Portanto, se eu executar 20 undos + write, o último writeabre um novo ramo de desfazer. Tentei adicionar por undojoindentro FF(tentando seguir uma sugestão do jlmg abaixo), mas uma sequência write-undo-write dá um erro: undojoint não é permitido após desfazer . Em vez disso, eu poderia fazer algumas coisas sed ....depois de sair vim, mas como utilizo isso SSH, prefiro uma solução apenas para vim (execute um comando após descarregar o buffer não grava no arquivo).
EDIÇÃO 2 Tente fazer isso no VIM: abra um arquivo em branco e faça:
i1<ESC>:wa2<ESC>:wa3<ESC>:wa4<ESC>uu:w
Se agora você fizer um <CTRL>R, o VIM escreverá o '3' de volta, mais <CTRL>Rvocê receberá o 4. Isso acontece mesmo se você fizer um :wapós cada um <CTRL>R. No entanto, se cada vez que :wvocê executa uma função via BufWritePre, o<CTRL>R ela não escreverá o 3verso. E é isso que eu quero fazer, é por isso que escrevi para 'suspender a historia', mas talvez o que estou pedindo não seja possível, além de trabalhar com o máximo undotree().
vim.se, eu teria tentado isso. Enfim, parece que Sato sabe como ajudar.
sed, mas sed não pode desfazer suas ações, então como isso vai funcionar? Se você fosse capaz de "suspender a história", que tipo de comportamento você esperaria do vim ao desfazer uma ação depois? O único comportamento que eu pude visualizar é agrupar essas alterações (junto com as ações desfazer) em um bloco desfazer, daí a minha resposta. Mas se não é isso, o que é?
vi, masvio comando desfazer para mim desfaz uma vez e, quando você pressionaunovamente, desfaz o desfazer ("refazer"). Isso é real vi. Portanto, eu e outros usuários deste site talvez não saibamos a resposta para sua pergunta.