我发现我经常重构:
def function(param1, param2, (...), paramK):
自
def function(
param1,
param2,
(...),
paramK,
):
并尝试为它编写映射。 我从
command! Split normal! qqqf(a<cr><esc>qqf s<cr><esc>@qq@qf)i<cr><esc>
qqq - reset content of macro q.
f(a<cr><esc> - find bracket, make newline and return to normal mode.
qq - start to record macro q.
f s<cr><esc> - change space to newline.
@q - run macro recursively.
q@q - end recording and run.
f)i<cr><esc> - add last newline before closing bracket.
我的想法是,当宏找不到空间时,它就会失败,但这有问题。它提出了一些问题。
1( 如何检查某些动作是否成功?例如,如何检查当前行中是否有空格?
2(有没有更好的主意来实现我想要的?也许是一些插件或清除功能?
3(我的想法有什么问题?当我手动运行此组合时,它可以工作,但是在调用 :Split 时它不起作用。
关于为什么它不像您手动键入时那样工作:
当你输入normal! <esc>
时,Vim将其解析为"键入字母<
,e
,s
,c
,>
"。您可以通过键入<c-v><esc>
来插入文字转义键,但这在配置中看起来有点奇怪。相反,更好的方法是使用:exe
命令 (:help :exe
(:
exe "normal! <esc>"
<esc>
被字符串内插为文本转义键。因此,exe "normal! ..."
被转换为调用,以使用您正在寻找的密钥进行normal!
。您还需要以同样的方式逃脱<cr>
。我也会使用<space>
而不是,我不完全确定普通空间是否适用于这里。之后,希望您应该获得与手动键入时相同的结果。
至于您尝试解决的实际问题,我确实有一个插件:splitjoin。默认情况下,它会像这样拆分您的示例:
def function(param1,
param2,
(...),
paramK):
pass
但是您可以更改一个设置以根据自己的喜好进行调整。或者,从Jordan Running的链接来看,似乎你也可以使用argwrap插件,它可能更适合参数拆分(splitjoin处理更广泛的情况,但可能对参数做得不好?不知道。
答案:
- 我不明白这个问题。您可以使用
/
或vimrc
语法搜索空格。你为什么要这样做? - 是的。见下文。
)
语法与普通的 vim 语法非常不同。我不知道为什么,我也不完全理解它。
法典:
nnoremap <C-r> :s/, */,r /g<cr>:s/)/r)<cr>:nohl<cr>
重新映射 Ctrl+R 以搜索后跟 0 个或多个空格的逗号,并将其替换为逗号、换行符和制表符。然后搜索 CC_19 并将其替换为换行符和 (。然后撤消刚刚突出显示的内容。
要输入文字制表符而不是 4 个空格,您必须键入CtrlV制表符来代替您在命令中看到的 4 个空格