lua上的Vim脚本函数

wz3gfoph  于 2023-02-12  发布在  其他
关注(0)|答案(1)|浏览(234)

我正在用lua重写我的vim配置,我有一个很有用的函数--它允许我删除/选择/编辑数字,下面是它的代码和键绑定

" custom text-object for numerical values
function! Numbers()
    call search('\d\([^0-9\.]\|$\)', 'cW')
    normal v
    call search('\(^\|[^0-9\.]\d\)', 'becW')
endfunction
xnoremap in :<C-u>call Numbers()<CR>
onoremap in :normal vin<CR>

如果我按cin,行中的光标将转到一个数字,例如

fotn-size: 16px

如果我按cin,我将编辑号码***16***
我试着在lua中重写同样的东西,这就是我得到的(vimscript在lua中)

function Numbers()
  vim.cmd [[
      call search('\d\([^0-9\.]\|$\)', 'cW')
      normal v
      call search('\(^\|[^0-9\.]\d\)', 'becW')
    ]]
end

vim.keymap.set({ 'x' }, 'in', ':<C-u>lua Numbers()<CR>', { noremap = true })
vim.keymap.set({ 'o' }, 'in', ':normal vin <CR>', { noremap = true })

一开始我认为它工作正常,但经过一点工作,我意识到它没有正确工作。
现在,如果我按cin,这行

fotn-size: 16px

我将编辑数字6和字母p,如下所示:1***6p***x
但在这个例子中。

const my_var = 125;

当我按cin时,我不会编辑整个号码***125***,而只会编辑最后一个数字***5***
请帮助我,我怎样才能让这个函数在lua中正确工作?

oknwwptz

oknwwptz1#

我猜在Lua和Vimscript之间内部切换时会有一些问题。因为你已经在使用vim.cmd了,所以你可以把所有的Vimscript放在里面:

vim.cmd [[
    function! Numbers()
        call search('\d\([^0-9\.]\|$\)', 'cW')
        normal v
        call search('\(^\|[^0-9\.]\d\)', 'becW')
    endfunction
    xnoremap in :<C-u>call Numbers()<CR>
    onoremap in :normal vin<CR>
]]

相关问题