如何执行Vim';函数中的排序命令?

如何执行Vim';函数中的排序命令?,vim,Vim,我想写一个函数来对Scala导入进行排序 我已经成功地找到了导入的开始和结束位置。现在我只需要做实际的排序 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 -

我想写一个函数来对Scala导入进行排序

我已经成功地找到了导入的开始和结束位置。现在我只需要做实际的排序

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

函数的最后一行应该执行此操作,但不执行任何操作。我哪里出错了?

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

这对你有用吗

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

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

这对你有用吗

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

因为VIM是一种基于模式的编辑器,在编写脚本时,还需要考虑模式。


:normal
用于普通模式命令,即用于导航(
j
w
)或更改(
x
gUU
)文本的简短内容。使用
,您进入命令行模式,在此模式下执行Ex命令(如
:substitute
:sort
)。通常,您可以将这些原样放入Vimscript函数中(例如,
%delete
),但当您想要将变量(在您的情况下:行号)放入其中时,您需要
:执行它,除了变量
'quoted'
,因为Vim是一个基于模式的编辑器,你也需要考虑脚本时的模式。

:normal
用于普通模式命令,即用于导航(
j
w
)或更改(
x
gUU
)文本的简短内容。使用
,您进入命令行模式,在此模式下执行Ex命令(如
:substitute
:sort
)。通常,您可以将这些原样放入Vimscript函数中(例如,
%delete
),但当您想将变量(在您的例子中是行号)放入其中时,您需要
:执行它,除了变量
“quoted”