Function 为什么这一功能会起作用;跳过“;在63号线上?

Function 为什么这一功能会起作用;跳过“;在63号线上?,function,vim,Function,Vim,我试图修改,但无论是原始版本还是修改后的版本都有一个令人恼火的错误,有时光标显示在错误的位置。我能做的最简单的例子是下面的71行文本文件。请注意,在复制文件时,空格很重要 <?php /** * Some silly method * * @param string Some silly string */ function someFunction() { global $class, $cv, $go, $pae; global $messages, $c

我试图修改,但无论是原始版本还是修改后的版本都有一个令人恼火的错误,有时光标显示在错误的位置。我能做的最简单的例子是下面的71行文本文件。请注意,在复制文件时,空格很重要

<?php

/**
* Some silly method
*
* @param    string    Some silly string
*/
function someFunction()
{
    global $class, $cv, $go, $pae;
    global $messages, $counters, $ltn;
    global $sh, $sub, $temp;

    $charsets = array(
        'us',

        'si',
        'pr',
        'op',
        'co',
        'pa',
        'av',
        'pr',
        'al',

        'pc',
        'pe',
        'pi',
        'pp',

        'su',
        'qu',

        'de',
        'ze',
        'xo',
        'mo',
        'wo',
        'de',
        'mo',
        'de',
        'mo',
        'dr',
        'mo',
        'de',
        'mo',

        'ev',
        'pa',
        'so',
        'ms',
        'bu',
        'at',
        'cu',
        'pr',

        'de',
        'mo',
        'nv',
        'nl',
        'nf',
        'ne',
        'nq',
        'nt'
    );

}
从文件开头开始,反复按
j
,直到第63行。请注意,高亮显示的光标线保持在正确的行(63)上,但光标显示在第55行。直接跳到第63行不会触发错误,只有反复按
j
直到到达该行才会触发错误

为什么会发生这种情况,我该如何解决?请注意,当光标出现在错误的位置时,按``z`实际上会将光标捕捉到正确的位置。这是Kubuntu 11.10上的VIM 7.3.154

编辑:
通过在其他安装(Debian、CentOS)中的测试,我注意到这个bug不是确定的,它偶尔会发生,但不是在每个系统上的同一个地方!您可以通过按
j
并注意可能出现的任何PHP文件中的光标位置来测试此代码。我想说,每一百行中大约有一行会触发错误,其中光标似乎位于错误的位置。

我对该函数的逻辑有点困惑,但我怀疑是
?\S
导致了问题。它将向后搜索非空白字符,并在到达文件顶部后环绕到文件底部

尝试将两个出现的
?\S
替换为

call search('\S','bW')
(此处,
b
标志向后搜索,
W
防止环绕文件。)

编辑(第二次尝试)

该函数还导致视图中出现大量跳跃。其根源是不断设置标记
mz
并来回跳跃。vimscripts中更好的方法是使用以下命令保存当前视图(而不是
normal mz
):

然后,您可以使用这些恢复视图:

call cursor(pos)             " This restores the cursor position to that of "pos"
call winrestview(view)       " This restores the window view to that of "view"
因此,我将使用
调用游标(pos)
而不是
`z
,并在
返回
命令之前使用
调用winrestview(view)
。这确保了该函数不会修改窗口的外观,并使使用更加愉快


希望这有帮助

我对这个函数的逻辑有点困惑,但我怀疑是
?\S
引起了问题。它将向后搜索非空白字符,并在到达文件顶部后环绕到文件底部

尝试将两个出现的
?\S
替换为

call search('\S','bW')
(此处,
b
标志向后搜索,
W
防止环绕文件。)

编辑(第二次尝试)

该函数还导致视图中出现大量跳跃。其根源是不断设置标记
mz
并来回跳跃。vimscripts中更好的方法是使用以下命令保存当前视图(而不是
normal mz
):

然后,您可以使用这些恢复视图:

call cursor(pos)             " This restores the cursor position to that of "pos"
call winrestview(view)       " This restores the window view to that of "view"
因此,我将使用
调用游标(pos)
而不是
`z
,并在
返回
命令之前使用
调用winrestview(view)
。这确保了该函数不会修改窗口的外观,并使使用更加愉快


希望这有帮助

尝试在相关行放置注释,而不是使用行号引用注释。行号不会出现在StackOverflow代码中。注释会使错误消失。这就是我在
.vimrc
文件中提到
set nu
的原因。请尝试在相关行中放置注释,而不是使用行号来引用注释。行号不会出现在StackOverflow代码中。注释会使错误消失。这就是为什么我在
.vimrc
文件中提到了
设置nu
。谢谢你。但是,将
?\S
更改为
呼叫搜索('\S','bW')
没有帮助。我不认为将文件结尾处换行是问题所在,因为问题所在的区域中肯定存在非空白字符。但是谢谢你的帮助!我不确定我是否正确地再现了这个问题,但我又尝试了一个解决方案。谢谢你,你的代码工作得很好!我只是把它扔在一大堆角落的箱子上,效果很好。我也对使用
mz
感到不舒服,但我盗取的代码就是这样工作的,我甚至不知道有没有更好的方法!非常感谢你的帮助和你的教学意愿。非常感谢。谢谢你,炖牛肉王子。但是,将
?\S
更改为
呼叫搜索('\S','bW')
没有帮助。我不认为将文件结尾处换行是问题所在,因为问题所在的区域中肯定存在非空白字符。但是谢谢你的帮助!我不确定我是否正确地再现了这个问题,但我又尝试了一个解决方案。谢谢你,你的代码工作得很好!我只是把它扔在一大堆角落的箱子上,效果很好。我也对使用
mz
感到不舒服,但我盗取的代码就是这样工作的,我甚至不知道有没有更好的方法!非常感谢你的帮助和你的教学意愿。非常感谢。