Commit: patch 9.2.0677: Cannot clear the alternate file register #

4 views
Skip to first unread message

Christian Brabandt

unread,
Jun 18, 2026, 4:00:14 PM (13 hours ago) Jun 18
to vim...@googlegroups.com
patch 9.2.0677: Cannot clear the alternate file register #

Commit: https://github.com/vim/vim/commit/9db6fe4b1793beda2b64c2980cb46a3664f75add
Author: Christoffer Aasted <dez...@gmail.com>
Date: Thu Jun 18 19:43:44 2026 +0000

patch 9.2.0677: Cannot clear the alternate file register #

Problem: Cannot clear the alternate file register #
Solution: Allow to clear it (Christoffer Aasted)

closes: #20537

Signed-off-by: Christoffer Aasted <dez...@gmail.com>
Signed-off-by: Christian Brabandt <c...@256bit.org>

diff --git a/runtime/doc/change.txt b/runtime/doc/change.txt
index b3448bf89..afcdca16b 100644
--- a/runtime/doc/change.txt
+++ b/runtime/doc/change.txt
@@ -1,4 +1,4 @@
-*change.txt* For Vim version 9.2. Last change: 2026 May 31
+*change.txt* For Vim version 9.2. Last change: 2026 Jun 18


VIM REFERENCE MANUAL by Bram Moolenaar
@@ -1334,19 +1334,19 @@ and ":put" commands and with CTRL-R.
feature}
*quote_#* *quote#*
6. Alternate file register "#
-Contains the name of the alternate file for the current window. It will
-change how the |CTRL-^| command works.
-This register is writable, mainly to allow for restoring it after a plugin has
-changed it. It accepts buffer number: >
- let altbuf = bufnr(@#)
- ...
- let @# = altbuf
-It will give error |E86| if you pass buffer number and this buffer does not
-exist.
-It can also accept a match with an existing buffer name: >
+Contains the |alternate-file| name for current window
+This register is writeable and changes which buffer CTRL-^ enters.
+A String is matched against existing buffer names, like |:buffer|: >
let @# = 'buffer_name'
-Error |E93| if there is more than one buffer matching the given name or |E94|
-if none of buffers matches the given name.
+Also supports using buffer number and |file-pattern|.
+
+Throws
+ |E86| when the buffer number does not exist
+ |E93| when more than one buffer matches
+ |E94| when none match
+
+Clear the register with empty String: >
+ let @# = ''

7. Expression register "= *quote_=* *quote=* *@=*
This is not really a register that stores text, but is a way to use an
diff --git a/runtime/doc/version9.txt b/runtime/doc/version9.txt
index a7778b5fe..a515589de 100644
--- a/runtime/doc/version9.txt
+++ b/runtime/doc/version9.txt
@@ -1,4 +1,4 @@
-*version9.txt* For Vim version 9.2. Last change: 2026 Jun 13
+*version9.txt* For Vim version 9.2. Last change: 2026 Jun 18


VIM REFERENCE MANUAL by Bram Moolenaar
@@ -52687,6 +52687,7 @@ Changed ~
- Rewrite the clientserver socketserver backend to use channels and JSON.
- During |complete()|-triggered completion, CTRL-N and CTRL-P are now subject
to insert-mode mappings.
+- It is possible to clear the alternate file register |quote#|.


*added-9.3*
diff --git a/src/register.c b/src/register.c
index 358fe6454..971cd7089 100644
--- a/src/register.c
+++ b/src/register.c
@@ -3152,6 +3152,12 @@ write_reg_contents_ex(

if (name == '#')
{
+ if (len == 0)
+ {
+ curwin->w_alt_fnum = 0; // clear altfile
+ return;
+ }
+
buf_T *buf;

if (VIM_ISDIGIT(*str))
diff --git a/src/testdir/test_registers.vim b/src/testdir/test_registers.vim
index bb1dd31f3..1bf3d6f60 100644
--- a/src/testdir/test_registers.vim
+++ b/src/testdir/test_registers.vim
@@ -396,6 +396,11 @@ func Test_set_register()
call assert_equal('Xfile_alt_1', getreg('#'))
call setreg('#', b2)
call assert_equal('Xfile_alt_2', getreg('#'))
+ call setreg('#', '')
+ call assert_equal('', getreg('#'))
+ call setreg('#', 'alt_1')
+ let @# = ''
+ call assert_equal('', getreg('#'))

let ab = 'regwrite'
call setreg('=', '')
diff --git a/src/version.c b/src/version.c
index 5aa9fde1c..d2e01aecb 100644
--- a/src/version.c
+++ b/src/version.c
@@ -759,6 +759,8 @@ static char *(features[]) =

static int included_patches[] =
{ /* Add new patch number below this line */
+/**/
+ 677,
/**/
676,
/**/
Reply all
Reply to author
Forward
0 new messages