Vimscript-对多行的拆分函数调用
我正在尝试编写一个vimscript,它可以转换如下行:Vimscript-对多行的拆分函数调用,vim,neovim,Vim,Neovim,我正在尝试编写一个vimscript,它可以转换如下行: myFuncCall(param1, param2, param3="hey", param4) 致: 同时保持和添加缩进。到目前为止,我已经: function SplitParamLines() abort let f_line_num = line(".") let indent_length = indent(f_line_num) echom indent
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
如果要执行本应键入的内容,则需要
:normal
。如果有特殊字符,则还需要:exe
和来转义这些特殊字符。瞧
:exe "normal! 0t)i\<cr>"
:exe“正常!0t)i\”
所以我选择了两个选项:
“每一行中的每个参数
函数SplitParamLines()中止
设f_line_num=line(“.”)
设缩进长度=缩进(f线数)
exe“.s/\s*,/,\r.”重复(“,缩进长度+&移位宽度-1)。“/g”
诺尔研究
执行“正常!0t)a\\”
端功能
nnoremap(:调用SplitParamLines()
虽然不是完美的,但它可以工作:)我想拆分任何语言的函数调用,而不是vimscript。我需要弄清楚如何编写vimscript函数来实现这一点。你的参数中会包含一个带逗号的参数吗?与
func(“lastname,firstname”)
中一样?如果是这样,你的正则表达式就会崩溃。我想在这种情况下,你可以手动操作,但我想我会指出它。@JakeGrossman谢谢,但我愿意手动面对这些边缘案例。
Error detected while processing function SplitParamLines:
line 7:
E14: Invalid address
:exe "normal! 0t)i\<cr>"
" 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>