如何从函数执行Vim的排序命令?

如何从函数执行Vim的排序命令?

问题描述:

我想写一个函数来排序Scala导入。如何从函数执行Vim的排序命令?

我已经成功找到开始,其中进口的结束。现在我只需要做实际的排序。

function! SortScalaImport() 
    call cursor(1, 1) 
    let start = search('^import') "find first line with import 
    let end = search('^\(import\|\n\)\@!') "find first non-import line 
    let end = end - 1 
    execute 'normal '.start.','.end.'sort' 
endfunction 

函数的最后一行应该做,但什么都不做。我哪里错了?

因为Vim是基于模式的编辑器,你还需要脚本时要考虑的模式。

:normal正常模式命令,即短的东西来导航(jw)或变化(xgUU)文本。随着:,您输入命令行模式,在Ex命令(如:substitute或您的:sort)被执行。通常情况下,你可以把这些作为,是为你的Vimscript函数(例如%delete _),但是当你想要把变量(在你的情况:行号)进去,你需要:execute它与一切,但变量'quoted'

我不知道为什么你在执行添加normal

这个工作适合你吗?

execute start.','.end.' sort'