2014-10-20 125 views
2

我想要做这样的事情如何检查vim命令(动作)是成功还是失败?

try 
    normal! t_ 
catch 
    normal! w 
endtry 

这意味着,如果没有底线就会去下一个下划线_或下一个字边界。

您如何确实检查动作是否成功?我曾想过在命令前后比较getpos('.'),但我意识到这并不一定意味着该动议不成功。例如,如果光标已经在_

+0

为什么不从光标pos检查文本直到行结束,如果它包含'_',如果是,做某事。别的,做某事。其他? – Kent 2014-10-21 09:44:53

回答

3

您最好的拍摄将是在动作之前保持当前位置(设置标记或保存当前位置)并在此之后检查位置。

:mark a 
# or 
:let col = col(".") 
:let line = line(".") 
# motion command (say w,j,zj,f.) 
# check difference 
:echo col("'a") . "," . line("'a") . " = " . col('.') . "," . line('.') 
# or 
:echo col . "," . line . " = " . col('.') . "," . line('.') 

文档:

根据您的需求,col()也许省略运动检测器。

更准确的位置可与getpos()获得:

GETPOS({expr}的)获取{expr}的位置。有关{expr}的可能值,请参阅| line()|。 结果是| List |用四个数字:

 [bufnum, lnum, col, off] 

文档

 
:mark a 
# or 
:let old_pos = getpos(".") 
# motion command (say w,j,zj,f.)  
:let mark_a = getpos("'a") 
:let current_pos = getpos(".") 
# check difference 
:echo mark_a[2] . "," . mark_a[1] . " = " . current_pos[2] . "," . current_pos[1] 
# or 
:echo old_pos[2] . "," . old_pos[1] . " = " . current_pos[2] . "," . current_pos[1] 

检查实际使用,以保存旧痕,如果已经使用它(lnum缓冲区里> 0)这里:

ag.vim autoload/ag.vim:215

+1

您不必添加标记。只需存储之前的光标位置并与稍后的光标位置比较 – 2015-09-09 06:29:53

+0

该死!你是对的。这更简单。我会添加一个关于这个的注释。 – albfan 2015-09-09 06:50:23