commit aa4fa2496387c962ee8b4cbd7720396ec7596dbd
parent 9c9c7ae30f50685e62984084767905c7d456cdd9
Author: zeertzjq <zeertzjq@outlook.com>
Date: Tue, 3 Jun 2025 07:54:29 +0800
vim-patch:bfeefc4: runtime(doc): clarify the effect of exclusive single char selections (#34289)
closes: vim/vim#17410
https://github.com/vim/vim/commit/bfeefc474a3ed25852491a93e1e5610774f4de8c
Co-authored-by: Christian Brabandt <cb@256bit.org>
Diffstat:
6 files changed, 36 insertions(+), 9 deletions(-)
diff --git a/runtime/doc/options.txt b/runtime/doc/options.txt
@@ -5151,9 +5151,14 @@ A jump table for the options with a short description can be found at |Q_op|.
the end of line the line break still isn't included.
When "exclusive" is used, cursor position in visual mode will be
adjusted for inclusive motions |inclusive-motion-selection-exclusive|.
- Note that when "exclusive" is used and selecting from the end
- backwards, you cannot include the last character of a line, when
- starting in Normal mode and 'virtualedit' empty.
+
+ Note:
+ - When "exclusive" is used and selecting from the end backwards, you
+ cannot include the last character of a line, when starting in Normal
+ mode and 'virtualedit' empty.
+ - when "exclusive" is used with a single character visual selection,
+ Vim will behave as if the 'selection' is inclusive (in other words,
+ you cannot visually select an empty region).
*'selectmode'* *'slm'*
'selectmode' 'slm' string (default "")
diff --git a/runtime/doc/vimfn.txt b/runtime/doc/vimfn.txt
@@ -4168,6 +4168,10 @@ getregion({pos1}, {pos2} [, {opts}]) *getregion()*
- It is evaluated in current window context, which makes a
difference if the buffer is displayed in a window with
different 'virtualedit' or 'list' values.
+ - When specifying an exclusive selection and {pos1} and {pos2}
+ are equal, the returned list contains a single character as
+ if selection is inclusive, to match the behavior of an empty
+ exclusive selection in Visual mode.
Examples: >vim
xnoremap <CR>
diff --git a/runtime/lua/vim/_meta/options.lua b/runtime/lua/vim/_meta/options.lua
@@ -5414,9 +5414,14 @@ vim.go.sect = vim.go.sections
--- the end of line the line break still isn't included.
--- When "exclusive" is used, cursor position in visual mode will be
--- adjusted for inclusive motions `inclusive-motion-selection-exclusive`.
---- Note that when "exclusive" is used and selecting from the end
---- backwards, you cannot include the last character of a line, when
---- starting in Normal mode and 'virtualedit' empty.
+---
+--- Note:
+--- - When "exclusive" is used and selecting from the end backwards, you
+--- cannot include the last character of a line, when starting in Normal
+--- mode and 'virtualedit' empty.
+--- - when "exclusive" is used with a single character visual selection,
+--- Vim will behave as if the 'selection' is inclusive (in other words,
+--- you cannot visually select an empty region).
---
--- @type 'inclusive'|'exclusive'|'old'
vim.o.selection = "inclusive"
diff --git a/runtime/lua/vim/_meta/vimfn.lua b/runtime/lua/vim/_meta/vimfn.lua
@@ -3763,6 +3763,10 @@ function vim.fn.getreginfo(regname) end
--- - It is evaluated in current window context, which makes a
--- difference if the buffer is displayed in a window with
--- different 'virtualedit' or 'list' values.
+--- - When specifying an exclusive selection and {pos1} and {pos2}
+--- are equal, the returned list contains a single character as
+--- if selection is inclusive, to match the behavior of an empty
+--- exclusive selection in Visual mode.
---
--- Examples: >vim
--- xnoremap <CR>
diff --git a/src/nvim/eval.lua b/src/nvim/eval.lua
@@ -4660,6 +4660,10 @@ M.funcs = {
- It is evaluated in current window context, which makes a
difference if the buffer is displayed in a window with
different 'virtualedit' or 'list' values.
+ - When specifying an exclusive selection and {pos1} and {pos2}
+ are equal, the returned list contains a single character as
+ if selection is inclusive, to match the behavior of an empty
+ exclusive selection in Visual mode.
Examples: >vim
xnoremap <CR>
diff --git a/src/nvim/options.lua b/src/nvim/options.lua
@@ -7214,9 +7214,14 @@ local options = {
the end of line the line break still isn't included.
When "exclusive" is used, cursor position in visual mode will be
adjusted for inclusive motions |inclusive-motion-selection-exclusive|.
- Note that when "exclusive" is used and selecting from the end
- backwards, you cannot include the last character of a line, when
- starting in Normal mode and 'virtualedit' empty.
+
+ Note:
+ - When "exclusive" is used and selecting from the end backwards, you
+ cannot include the last character of a line, when starting in Normal
+ mode and 'virtualedit' empty.
+ - when "exclusive" is used with a single character visual selection,
+ Vim will behave as if the 'selection' is inclusive (in other words,
+ you cannot visually select an empty region).
]=],
full_name = 'selection',
scope = { 'global' },