Function 为什么这一功能会起作用;跳过“;在63号线上?
我试图修改,但无论是原始版本还是修改后的版本都有一个令人恼火的错误,有时光标显示在错误的位置。我能做的最简单的例子是下面的71行文本文件。请注意,在复制文件时,空格很重要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
<?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
感到不舒服,但我盗取的代码就是这样工作的,我甚至不知道有没有更好的方法!非常感谢你的帮助和你的教学意愿。非常感谢。