Vimscript - 将函数调用拆分为多行

Vimscript - split function call to multiple lines

我正在尝试编写一个 vimscript 来转换这样一行:

    myFuncCall(param1, param2, param3="hey", param4)

收件人:

    myFuncCall(param1,
        param2,
        param3="hey",
        param4
    )

同时保持和添加缩进。到目前为止我有:

function SplitParamLines() abort
    let f_line_num = line(".")
    let indent_length = indent(f_line_num)
    echom indent_length
    echom f_line_num
    .s/\s*,/,\r/g
    nohlsearch
    0t)a<cr>
endfunction

如何使用 vimscript 缩进行?

为什么最后一行会产生这个?:

Error detected while processing function SplitParamLines:
line    7:
E14: Invalid address

如果您想执行您输入的内容,您需要 :normal。如果有特殊字符,那么您还需要 :exe 并转义这些特殊字符。 IOW

:exe "normal! 0t)i\<cr>"

所以有 2 个选项我选择同时使用:

  1. 使用这个令人难以置信的插件 - Splitjoin.vim
  2. 使用这个简单的函数:
" Every parameter in its own line
function SplitParamLines() abort
    let f_line_num = line(".")
    let indent_length = indent(f_line_num)
    exe ".s/\s*,/,\r" . repeat(" ", indent_length + &shiftwidth - 1) . "/g"
    nohlsearch
    " execute "normal! 0t)a\<cr>\<esc>"
endfunction
nnoremap <silent> <leader>( :call SplitParamLines()<cr>

虽然不完美,但可以:)