Search code examples
neovimultisnips

ultisnips: How to "freeze" vim.current.window.cursor value for snippet


I had a snippet that used to work well (neovim 0.2.0)

snippet #= "comment ===" b
# `!p snip.rv = '=' * (78 - vim.current.window.cursor[1])`
# ${1:comments} 
# `!p snip.rv = '=' * (78 - vim.current.window.cursor[1])`
endsnippet

This snippet is basically writing python comments block when triggered, where the length of "=" depends on the position of the cursor.

For a few days now (I don't know which update makes it failing), the length of "=" is decreasing as long as I type my comment.

It looks like vim.current.window.cursor[1] is constantly re-evaluated.

Any idea how to "freeze" the value?


Solution

  • I finally found:

    snippet #= "comment ===" b
    `!p
    if not snip.c:
        width = int(vim.eval("78 - virtcol('.')"))
    snip.rv = '# ' + '=' * width`
    # ${1:comments}
    `!p snip.rv = '# ' + '=' * width`
    endsnippet