代码之家  ›  专栏  ›  技术社区  ›  kosciej16

vim split函数参数

vim
  •  0
  • kosciej16  · 技术社区  · 8 年前

    我发现我经常重构:

    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时,它不起作用。

    2 回复  |  直到 8 年前
        1
  •  1
  •   Andrew Radev    8 年前

    关于它为什么不能像手动键入时那样工作:

    def函数(param1,
    (…),
    通过
    
    

    当你打字时normal! <esc><e,请sc><c-v><esc>:exe:help :exe

    exe "normal! \<esc>"
    

    \<esc>exe "normal! ..."转换为调用normal!<cr>同样的方法。我也会用\<space>我不完全确定这里是否有一个正常的空间。在这之后,希望您能得到与手动输入相同的结果。


    splitjoin.默认情况下,它按如下方式拆分示例:

    def function(param1,
            param2,
            (...),
            paramK):
        pass
    

    settingargwrap插件,尤其是对于参数拆分更可靠(splitjoin处理更广泛的情况,但对参数可能没有那么好?不确定。)

        2
  •  0
  •   jeremysprofile Subin George    8 年前

    1. f /
    2. 这个 vimrc

    nnoremap <C-r> :s/, */,\r    /g<cr>:s/)/\r)<cr>:nohl<cr>
    

    ) 并用换行符和替换它)。然后撤消刚才的突出显示。

    Ctrl键