fittencode.nvim icon indicating copy to clipboard operation
fittencode.nvim copied to clipboard

Feat: 在 action 中支持 charwise 与 blockwise 选区。

Open hoofcushion opened this issue 9 months ago • 5 comments

在 visual 模式下执行各类 action 时, 发送的字符总是 linewise 的选区. 我写过一个可以简单地获取选区文本的脚本, rangemark.txt

--- 文件名需要先改成 rangemark.lua
RangeMark=require("rangemark")
--- 暂存先前的选区标记 (vmark 指代 '<,'> 标记组合)
local vmark_start=RangeMark:get_vmark()
--- 退出 visual mode,更新标记
vim.api.nvim_feedkeys(string.char(27),"nx",false)
--- 获取更新后的选区标记
local vmark=RangeMark:get_vmark()
--- 复制选区,返回 register
local vreg=vmark:yank()
--- 支持任意选区类型
local content=vreg.regcontents
--- 恢复先前选区标记
vmark_start:set_vmark()
--- 恢复先前选区
--- vmark:select()

这是兼容多个类型选区的参考实现. 使用内置的y命令获取文本, 可以获取任意类型的选区. vreg.regcontents 的类型是 string (单行) 和 string[] (多行), 使用 table.concat(vreg.regcontents,"\n") 就可得到带换行符的文本.

hoofcushion avatar May 16 '24 12:05 hoofcushion