luozhiya / fittencode.nvim

Fitten Code AI Programming Assistant for Neovim
49 stars 8 forks source link

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

Open hoofcushion opened 1 month ago

hoofcushion commented 1 month ago

在 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 commented 1 month ago

用以上方式获取文本,就可以支持 charwise 和 blockwise 选区文本了。

luozhiya commented 1 month ago

@hoofcushion

在 #60 利用了 Neovim 0.10.0 的新API 实现了 charwise 和 blockwise 选区文本功能,如果您感兴趣的话,欢迎提交PR兼容以前版本的 Neovim

hoofcushion commented 1 month ago

我用了新的 commit,好像不支持 charwise 和 blockwise

luozhiya commented 1 month ago

@hoofcushion 刚刚又更新了 ,您再试一下看看

hoofcushion commented 1 month ago

不好意思,是我之前设置了用我自己的 fork 忘记恢复了,我以为我用的是最新版,更新之后试了一下,其实是可以的。