在vim脚本中跳过粘贴命令,将选择的行移动到文件末尾?

时间:2014-06-03 18:01:33

标签: vim

我试图编写一组简单的vim命令,并可以交互式使用这一系列命令来完成我想要的操作。例如,给定以下文件内容

#if 0
#include "foo.h"
#include "goo.h"
a <<< HERE >>>
b
c
#endif

当排在&#39; a&#39;,在#include行之后,我可以这样做:

:,/endif/-1 d
:$
:p
:w

但是,当我将这些命令放在一个文件中时(&#39; a_vim_script&#39;),然后运行:

:source a_vim_script

vim报道:

3 fewer lines
"f" 5L, 68C written
Press ENTER or type command to continue

并产生:

#if 0
#include "foo.h"
#include "goo.h"
#endif

而不是我以交互方式执行这些命令时得到的结果:

#if 0
#include "foo.h"
#include "goo.h"
#endif
a
b
c

删除,移动和写入命令全部执行,但是粘贴被神秘地跳过了?

我可以通过其他方式完成这项任务。例如,这个脚本做我想要的(然后移动到我的vim -q列表中的下一个选择):

:,$!echo '\#endif\n' && grep -v '\#endif'
:w
:cn

但是,为什么&#39; p&#39;跳过第一个小vim脚本中的粘贴命令?

1 个答案:

答案 0 :(得分:1)

:p不是:put的缩写,而是:print的缩写。请使用:put:pu

此外,您应该使用:move命令而不是:delete:put

:,/endif/-m $

有关详细信息,请参阅:

:h :p
:h :pu
:h :m