Quando editamos um arquivo, normalmente fazemos muitos UNDO seguidos, digamos, 20 vezes. No VIM, isso geralmente é realizado pressionando u
20 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 change
sem 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 change
e continuar o histórico depois (não o quero change
).
EDIT
Tentando ser mais claro: Eu tenho uma função FF
que atualiza as últimas linhas de um arquivo quando o buffer é gravado. Portanto, se eu executar 20 undos + write
, o último write
abre um novo ramo de desfazer. Tentei adicionar por undojoin
dentro 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>R
você receberá o 4
. Isso acontece mesmo se você fizer um :w
após cada um <CTRL>R
. No entanto, se cada vez que :w
você executa uma função via BufWritePre
, o<CTRL>R
ela não escreverá o 3
verso. 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
, masvi
o comando desfazer para mim desfaz uma vez e, quando você pressionau
novamente, desfaz o desfazer ("refazer"). Isso é real vi. Portanto, eu e outros usuários deste site talvez não saibamos a resposta para sua pergunta.