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

时间:2013-02-08 15:21:09

标签: 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 - 1
  execute 'normal '.start.','.end.'sort'
endfunction

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

2 个答案:

答案 0 :(得分:2)

因为Vim是基于模式的编辑器,所以在编写脚本时也需要考虑模式。

:normal用于普通模式命令,即要导航的简短内容(jw)或更改(x,{ {1}})文字。使用gUU,您可以进入命令行模式,其中执行Ex命令(如:或您的:substitute)。通常情况下,您可以将这些原样放入Vimscript函数(例如:sort),但是当您想要将变量(在您的情况下:行号)放入其中时,您需要%delete _它,除了变量:execute之外的所有内容。

答案 1 :(得分:1)

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

这对你有用吗?

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