diff options
author | zeertzjq <zeertzjq@outlook.com> | 2024-02-29 07:19:26 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-02-29 07:19:26 +0800 |
commit | ce7c51a1a3b2b38cdba730aeb53840d0ace32173 (patch) | |
tree | ef0e92b160cff29436591b0cf5d531620ef10850 /runtime/lua/vim | |
parent | e592657df8f727a3ce3b254fc72c027e36e08739 (diff) | |
download | rneovim-ce7c51a1a3b2b38cdba730aeb53840d0ace32173.tar.gz rneovim-ce7c51a1a3b2b38cdba730aeb53840d0ace32173.tar.bz2 rneovim-ce7c51a1a3b2b38cdba730aeb53840d0ace32173.zip |
vim-patch:9.1.0142: getregion() can be improved (#27662)
Problem: getregion() can be improved (after v9.1.120)
Solution: change getregion() implementation to use pos as lists and
one optional {opt} dictionary (Shougo Matsushita)
Note: The following is a breaking change!
Currently, the getregion() function (included as of patch v9.1.120) takes
3 arguments: the first 2 arguments are strings, describing a position,
arg3 is the type string.
However, that is slightly inflexible, there is no way to specify
additional arguments. So let's instead change the function signature to:
getregion(pos1, pos2 [, {Dict}]) where both pos1 and pos2 are lists.
This is slightly cleaner, and gives us the flexibility to specify
additional arguments as key/value pairs to the optional Dict arg.
Now it supports the "type" key to specify the selection type
(characterwise, blockwise or linewise) and now in addition one can also
define the selection type, independently of what the 'selection' option
actually is.
Technically, this is a breaking change, but since the getregion()
Vimscript function is still quite new, this should be fine.
closes: vim/vim#14090
https://github.com/vim/vim/commit/19b718828d8d5fab52d94c6cdba694641879ab38
Co-authored-by: Shougo Matsushita <Shougo.Matsu@gmail.com>
Diffstat (limited to 'runtime/lua/vim')
-rw-r--r-- | runtime/lua/vim/_defaults.lua | 3 | ||||
-rw-r--r-- | runtime/lua/vim/_meta/vimfn.lua | 42 |
2 files changed, 27 insertions, 18 deletions
diff --git a/runtime/lua/vim/_defaults.lua b/runtime/lua/vim/_defaults.lua index 7cece41ed3..c8131f8eb4 100644 --- a/runtime/lua/vim/_defaults.lua +++ b/runtime/lua/vim/_defaults.lua @@ -6,7 +6,8 @@ do do local function _visual_search(cmd) assert(cmd == '/' or cmd == '?') - local chunks = vim.fn.getregion('.', 'v', vim.fn.mode()) + local chunks = + vim.fn.getregion(vim.fn.getpos('.'), vim.fn.getpos('v'), { type = vim.fn.mode() }) local esc_chunks = vim .iter(chunks) :map(function(v) diff --git a/runtime/lua/vim/_meta/vimfn.lua b/runtime/lua/vim/_meta/vimfn.lua index 779016f2d1..be89c7dd01 100644 --- a/runtime/lua/vim/_meta/vimfn.lua +++ b/runtime/lua/vim/_meta/vimfn.lua @@ -3525,13 +3525,24 @@ function vim.fn.getreg(regname, list) end --- @return table function vim.fn.getreginfo(regname) end ---- Returns the list of strings from {pos1} to {pos2} as if it's ---- selected in visual mode of {type}. ---- For possible values of {pos1} and {pos2} see |line()|. ---- {type} is the selection type: ---- "v" for |charwise| mode ---- "V" for |linewise| mode ---- "<CTRL-V>" for |blockwise-visual| mode +--- Returns the list of strings from {pos1} to {pos2} in current +--- buffer. +--- +--- {pos1} and {pos2} must both be |List|s with four numbers. +--- See |getpos()| for the format of the list. +--- +--- The optional argument {opts} is a Dict and supports the +--- following items: +--- +--- type Specify the selection type +--- (default: "v"): +--- "v" for |charwise| mode +--- "V" for |linewise| mode +--- "<CTRL-V>" for |blockwise-visual| mode +--- +--- exclusive If |TRUE|, use exclusive selection +--- for the end position 'selection'. +--- --- You can get the last selection type by |visualmode()|. --- If Visual mode is active, use |mode()| to get the Visual mode --- (e.g., in a |:vmap|). @@ -3549,23 +3560,20 @@ function vim.fn.getreginfo(regname) end --- - If the selection starts or ends in the middle of a multibyte --- character, it is not included but its selected part is --- substituted with spaces. ---- - If {pos1} or {pos2} equals "v" (see |line()|) and it is not in ---- |visual-mode|, an empty list is returned. ---- - If {pos1}, {pos2} or {type} is an invalid string, an empty ---- list is returned. ---- - If {pos1} or {pos2} is a mark in different buffer, an empty +--- - If {pos1} or {pos2} is not current in the buffer, an empty --- list is returned. --- --- Examples: > --- :xnoremap <CR> ---- \ <Cmd>echom getregion('v', '.', mode())<CR> +--- \ <Cmd>echom getregion( +--- \ getpos('v'), getpos('.'), #{ type: mode() })<CR> --- < --- ---- @param pos1 string ---- @param pos2 string ---- @param type string +--- @param pos1 table +--- @param pos2 table +--- @param opts? table --- @return string[] -function vim.fn.getregion(pos1, pos2, type) end +function vim.fn.getregion(pos1, pos2, opts) end --- The result is a String, which is type of register {regname}. --- The value will be one of: |