vimscript中的“ normal gg”和“ call setpos('。',[0,1,1,0])”是否相同?

时间:2018-11-05 14:37:28

标签: vim

vimscript(vim 8.1.511):

normal gg
if search('^<p>[^A-Z“<]', 'Wc') > 0
    echon "\n:: Line " . line('.') . ' ' . getline('.')
endif

normal gg
" call setpos('.', [0,1,1,0])
if search('[a-z,;]</p>$', 'Wc') > 0
    echon "\n:: Line " . line('.') . ' ' . getline('.')
endif

对此运行:

<p>Abc for</p>
<p>abc for.</p>

并且输出始终是第二个echon,之前的任何内容都不会显示。

通过注释第二个normal gg并取消注释call setpos('.', [0,1,1,0]),脚本可以按预期工作。

我的理解是normal gg转到第一行的第一个非空白字符,在这种情况下,与call setpos('.', [0,1,1,0])相同。

更令人困惑的是,取消注释这两行也不会起作用。

我的理解错误吗?我完全感到困惑。

1 个答案:

答案 0 :(得分:0)

:normal gg发生的事情取决于很多事情:

替代项

  • :help :[range]命令(对于第一行,:1或在Vimscript中仅为1)也观察到'startofline',但不会影响 jumplist < / em>。
  • call setpos('.', ...)是:call cursor(...)的通用版本。两者都是低级函数,不受选项的影响,也不影响 jumplist

如果您只想将光标定位在search()上,这可能是最易读和最可靠的:

call cursor(1, 1)   " Move to start of buffer.