Update the vimscript code for restoring cursor position

Commit: 
https://github.com/vim/vim/commit/81b8bf5b4a33552c610dc2ea743ac2698a16aef7
Author: Dragan Simic' via vim_dev <[email protected]>
Date:   Wed Aug 9 17:23:58 2023 +0200

    Update the vimscript code for restoring cursor position
    
    Using xxd(1) to filter and edit binary files causes the input files
    to have dual nature, so to speak, which effectively makes restoring
    the cursor position broken.  Fix that by ignoring the "xxd" file type
    in the code that restores the cursor position.
    
    Interactive rebasing in git causes files to be edited in vim, which,
    similarly to commit messages, are rarely the same as the last one
    edited.  Thus, also add "gitrebase" to the list of file types for
    which the cursor position isn't restored.
    
    While there, refactor the code a bit to possibly save a few CPU cycles
    and to keep the line lengths in check, and use the long form of the
    commands and variables, to make the code slightly more consistent and
    more understandable to newcomers.
    
    Update the relevant comments in the code and the associated parts of
    the documentation, to keep them in sync with the updated code.
    
    Remove some redundant trailing whitespace as well, as spotted.

diff --git a/runtime/defaults.vim b/runtime/defaults.vim
index 67659895f..6f8deb06b 100644
--- a/runtime/defaults.vim
+++ b/runtime/defaults.vim
@@ -99,15 +99,19 @@ if 1
   " Put these in an autocmd group, so that you can revert them with:
   " ":autocmd! vimStartup"
   augroup vimStartup
-    au!
+    autocmd!
 
     " When editing a file, always jump to the last known cursor position.
     " Don't do it when the position is invalid, when inside an event handler
-    " (happens when dropping a file on gvim) and for a commit message (it's
-    " likely a different one than last time).
+    " (happens when dropping a file on gvim), for a commit or rebase message
+    " (likely a different one than last time), and when using xxd(1) to filter
+    " and edit binary files (it transforms input files back and forth, causing
+    " them to have dual nature, so to speak)
     autocmd BufReadPost *
-      \ if line("'\"") >= 1 && line("'\"") <= line("$") && &ft !~# 'commit'
-      \ |   exe "normal! g`\""
+      \ let line = line("'\"")
+      \ | if line >= 1 && line <= line("$") && &filetype !~# 'commit'
+      \      && index(['xxd', 'gitrebase'], &filetype) == -1
+      \ |   execute "normal! g`\""
       \ | endif
 
   augroup END
@@ -119,7 +123,7 @@ if 1
   augroup vimHints
     au!
     autocmd CmdwinEnter *
-         \ echohl Todo | 
+         \ echohl Todo |
          \ echo gettext('You discovered the command-line window! You can close 
it with ":q".') |
          \ echohl None
   augroup END
diff --git a/runtime/doc/usr_05.txt b/runtime/doc/usr_05.txt
index bc68e61b8..f43b23956 100644
--- a/runtime/doc/usr_05.txt
+++ b/runtime/doc/usr_05.txt
@@ -308,17 +308,27 @@ This switches on three very clever mechanisms:
 
 
                                *restore-cursor* *last-position-jump*  >
-    autocmd BufReadPost *
-      \ if line("'\"") >= 1 && line("'\"") <= line("$") && &ft !~# 'commit'
-      \ |   exe "normal! g`\""
-      \ | endif
+    augroup RestoreCursor
+      autocmd!
+      autocmd BufReadPost *
+        \ let line = line("'\"")
+        \ | if line >= 1 && line <= line("$") && &filetype !~# 'commit'
+        \      && index(['xxd', 'gitrebase'], &filetype) == -1
+        \ |   execute "normal! g`\""
+        \ | endif
+    augroup END
 
 Another autocommand.  This time it is used after reading any file.  The
 complicated stuff after it checks if the '" mark is defined, and jumps to it
-if so.  The backslash at the start of a line is used to continue the command
-from the previous line.  That avoids a line getting very long.
-See |line-continuation|.  This only works in a Vim script file, not when
-typing commands at the command-line.
+if so.  It doesn't do that for a commit or rebase message, which are likely
+a different one than last time, and when using xxd(1) to filter and edit
+binary files, which transforms input files back and forth, causing them to
+have dual nature, so to speak.  See also |using-xxd|.
+
+The backslash at the start of a line is used to continue the command from the
+previous line.  That avoids a line getting very long.  See |line-continuation|.
+This only works in a Vim script file, not when typing commands at the
+command line.
 
 >
        command DiffOrig vert new | set bt=nofile | r ++edit # | 0d_ | diffthis

-- 
-- 
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php

--- 
You received this message because you are subscribed to the Google Groups 
"vim_dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/vim_dev/E1qTxmG-00CgnY-TW%40256bit.org.

Raspunde prin e-mail lui