我想学习如何在当前的php文件中选择所有以use开头的行,然后对它们进行排序。到现在为止:我使用过:sort命令。此外,...我已重新映射排序命令:
map <Leader>s :sort<CR>
但是我想创建一个复杂的函数来选择php文件中的所有use语句,然后对所有这些行进行排序。
我知道怎么排序。但我不知道用VimL
选择一些任意字符串组的方法是什么function! SortUseStatements()
let g:select='/^use .*$<CR>V' !?!?!?!?!?!?!?!?!?
exec g:select
endfunction
map <F2> :call SortUseStatements()<CR>
我知道我想执行如下命令:
答案 0 :(得分:3)
这可以用:help cmdline-ranges
完成。
您希望搜索从文件的开头开始,因此您的初始地址为0
(从第一行开始)。然后,搜索以use
开头的第一行。当用;
分隔时,在解释下一行说明符之前,光标位置将设置为该行。然后,您需要导航到最后一个use
语句(从第一个use
行开始,再次由;
分隔)。我首先选择一种搜索空行的简单方法,然后选择前一行。使用:print
,您可以在使用:sort
替换命令之前检查范围是否正常:
:0;/^use /;/^$/-1 print
如果use
块之后没有空行,则必须为任何不以use
开头的行使用更复杂的模式:
:0;/^use /;/^\(use \)\@!/-1 print
对于任何更复杂的事情,单个:range
可能不会做。然后,我将使用具有适当模式的let lnum = search(...)
分别确定起始和结束行号。然后,您可以通过:execute startLnum . ',' . endLnum . 'sort'