我试图编写一组简单的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脚本中的粘贴命令?
答案 0 :(得分:1)
:p
不是:put
的缩写,而是:print
的缩写。请使用:put
或:pu
。
此外,您应该使用:move
命令而不是:delete
和:put
。
:,/endif/-m $
有关详细信息,请参阅:
:h :p
:h :pu
:h :m