luozhiya/fittencode.nvim

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

hoofcushion opened this issue · 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") 就可得到带换行符的文本.

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

@hoofcushion

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

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

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

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