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 个选项我选择同时使用:
- 使用这个令人难以置信的插件 - Splitjoin.vim
- 使用这个简单的函数:
" 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>
虽然不完美,但可以:)
我正在尝试编写一个 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 个选项我选择同时使用:
- 使用这个令人难以置信的插件 - Splitjoin.vim
- 使用这个简单的函数:
" 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>
虽然不完美,但可以:)