upvote
It’s such an odd design decision.

I could see ignoring the old undo data or warning before discarding it but just silently wiping it is so user hostile it’s hard to comprehend.

reply
It's some sort of industry standard, though, isn't it? Google Chrome on Android auto-deletes the history database silently if it deems it corrupted (e.g., due to a bad write on a system with low storage). You just open your browser one day and it's all gone.

If not, I wonder how Google justifies it.

reply
Google is the epitome of design that doesn't care at all about the user and user experience.
reply
If you ignore it, do you continue allowing edits to the file? Now undo history is corrupt and useless anyway. Or do you disallow editing until the user manually deletes some hidden, implementation-detail file for a feature they probably never use?
reply
If making a breaking change to the format of the file, why in root's name would neovim not just make its own new file!? Import the vim version if that's desired into persistent-undo.neovim and then just go from there. I don't understand their choice here at all nor why you're acting like this is complicated or there was some need for them to reuse the exact same file as vim?
reply
deleted
reply
To support you further, why would neovim users have any illusion there would be cross compatibility between undo files? Separate undo files seems the obvious and expected choice.
reply
Sorry for my ignorance, but what is the usefulness of undo persistence after a IDE restart? Don't you normally save your changes and finish a piece of work before exiting an DE?

Edit: some great examples in the replies here, thanks! Perhaps I should start using it in editors that support it, never gave it a thought before.

reply
The reason why this feature is particularly useful in vi-likes is because they are not IDEs. I hop in and out of vi all day long. Depending on the task I might create a new tab, run a command in vi, or exit vi to run it. Vi’s appeal is that it is “just” an editor and your terminal and workstation form your un-integrated development environment.
reply
The whole point of undo is that you realize you made a mistake later. If you've done that after you've saved your changes and exited the program, you'd have no expectation of undo still working unless you've enabled this feature.

It doesn't matter whether or not you can think of a reason you would want to enable it, but it should be pretty trivial to do so. Once you've enabled it, it should work.

reply
The article gave 2 examples.

I can give some as well. IDE crashes. Computer reboots at an undesired time. Even if my work is saved, I am not “finished”. I would like my undo history to extend before file / open time.

reply
I often use it to edit system config files, often on embedded devices where I don't have my git credentials setup, or on servers. In these cases we're already not in an ideal world, I don't have good reliable version control or change management in place. In those less-than-ideal worlds, having proper undo history is nice.
reply
First, you need backups

Second (for servers), etckeeper

reply

    #!/bin/sh
    
    errecho() {
        >&2 printf '%s\n' "$@"
    }
    
    if [ "$#" != 1 ] || [ -z "$1" ]
    then
        errecho 'Requires a single filename as the argument'
        exit 1
    fi
    
    ORIGINAL=$1
    if [ "${ORIGINAL#./}" == "$ORIGINAL" ] && [ "${ORIGINAL#/}" == "$ORIGINAL" ]
    then
        ORIGINAL=./"$ORIGINAL"
    fi
    
    # because of course the output of dirname can't be blindly joined with slash and the basename
    DIRNAME=$(dirname -- "$ORIGINAL")
    if [ "$DIRNAME" = / ]
    then
        DIRNAME=
    fi
    
    FILENAME=$(basename -- "$ORIGINAL")
    # because of course extracting the filename's extension is not supported out of the box
    case "$FILENAME" in
        .*.* )
            EXTENSION=.${FILENAME#.*.}
            BASENAME=$(printf '%s' "$FILENAME" | cut -c-$((${#FILENAME} - ${#EXTENSION})) )
            ;;
        .* )
            EXTENSION=
            BASENAME=$FILENAME
            ;;
        *.[^.]* )
            BASENAME=${FILENAME%%.*}
            EXTENSION=${FILENAME#*.}
            ;;
        * )
            BASENAME=${FILENAME%%.*}
            EXTENSION=$(printf '%s' "$FILENAME" | cut -c$((${#BASENAME} + 1))- )
            ;;
    esac
    
    if [ "$FILENAME" != "$BASENAME$EXTENSION" ] || [ -z "$BASENAME" ]
    then
        errecho 'Failed to properly split the extension from the filename:' "$FILENAME"
        exit 1
    fi
    
    TIMESTAMP=$(date --utc --date=@"$(stat --format %Y "$ORIGINAL")" +'_%Y-%m-%d_%H%M%S')
    if [ -z "$TIMESTAMP" ]
    then
        errecho 'Failed to get the timestamp of the file:' "$ORIGINAL"
        exit 1
    fi
    
    NEW_FILENAME=$(printf '%s/%s_%s%s' "$DIRNAME" "$BASENAME" "$TIMESTAMP" "$EXTENSION")
    
    if [ "$NEW_FILENAME" = "$ORIGINAL" ]
    then
        errecho 'Somehow the name for the backup is the same as the original file'
        exit 1
    fi
    
    # this preserves the timestamps somewhat better
    if ! mv --no-clobber --no-copy -- "$ORIGINAL" "$NEW_FILENAME"
    then
        errecho 'Failed to backup the file: ' "$ORIGINAL" "$NEW_FILENAME"
        exit 1
    fi
    
    if ! cp -- "$NEW_FILENAME" "$ORIGINAL"
    then
        errecho 'Failed to backup the file: ' "$ORIGINAL" "$NEW_FILENAME"
        mv --no-clobber --no-copy -- "$NEW_FILENAME" "$ORIGINAL"
    fi
Actually, nevermind that bullshit, you know what? I think I'd prefer to have an editor with locally persisted edit history instead.
reply
Most apps don't have it, so you might not be used to it, but have you never wished that you could undo the changes you made after you restarted the program?

Moreover, the vim history tracking is amazingly advanced. It's almost like a mini version control system. I highly recommend getting to know it.

reply
If your session / computer crashes, for one.
reply