我发现我经常做重构:
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)我的想法出了什么问题?当我从手工运行这个组合时,它可以工作,但在调用时:拆分它不会。
答案 0 :(得分:1)
关于为什么它不能像手动输入时那样工作:
当您输入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
但是有一个setting你可以根据自己的喜好进行调整。或者,从Jordan Running的链接,似乎你也可以使用argwrap插件,特别是对于参数拆分可能更可靠(splitjoin处理更多种类的情况,但可能没有那么好用争论?不确定。)
答案 1 :(得分:0)
数目:
f
或/
语法搜索空格。你为什么要这样做?vimrc
语法与普通的vim语法完全不同。我不知道为什么,我也不完全理解它。代码:
nnoremap <C-r> :s/, */,\r /g<cr>:s/)/\r)<cr>:nohl<cr>
重新映射ctrl + r以搜索逗号,后跟0或更多空格,并用逗号,换行符和制表符替换它。然后搜索)
并用换行符替换它。然后撤消它刚刚做的突出显示。
要输入文字标签而不是4个空格,您必须输入 Ctrl V 标签代替4您在命令中看到的空格