通过previous question的答案,我提供了一个小功能来帮助我将语言编译指示插入到源代码文件中:
function! HaskellInsertLanguagePragma() abort
let here = getpos(".")
let prag = input("GHC pragma: ")
call append(0, "{-# LANGUAGE " . prag . " #-}")
call setpos(".", [0, 1, 1, 0])
,'}-sort
,'}-Tabularize /#-}$/
call setpos(".", here)
endfunction
基本上,它会要求您输入关键字,然后将其与样板文件一起插入文件的第一行,对其进行排序,使用Tabular插件对结束分隔符进行排序。真棒。
该函数的问题在于,因为插入了一行,所以最后的setpos
将光标放在它现在开始的前一行。显而易见的解决方案是setpos
,行号加1,但我想知道以下两种解决方案中的任何一种是否会更好:
在功能开头设置标记,并在结尾处转到该标记。如果是这样,如何设置和移动到Vimscript中的标记?
根本不要移动光标,并使用显式范围执行,'}-sort
和,'}-Tabular
。但是如何指定范围“文件的第一个paragrpah”?
对我而言,似乎能够选择文件的第一段是更好的方法。感谢任何有关如何做到这一点的帮助。
答案 0 :(得分:1)
在Vimscript中,我通常在之前设置标记,然后再回到之后。
function! MyFunction()
" Save our location.
normal! mz
...
" Move back to our original location.
normal! `z
endfunction
答案 1 :(得分:0)