如何编写一个函数来获取vim中两行之间的内容,比如插件#begin()和plug#end()?

时间:2016-11-26 13:48:28

标签: vim

例如,如何编写一个最小函数来获取call plug#begin()call plug#end()之间的行内容。 vim-plug或vundle现在对我来说太复杂了,无法找到相关的补充。

call plug#begin()

Plug 'foo1'
Plug 'foo2' 

call plug#end()

1 个答案:

答案 0 :(得分:1)

与您的信念相反,插件没有"得到"来自~/.vimrc的这些配置行。相反,Vim为每一行调用插件,因为Plug是vim-plug插件管理器提供的自定义命令;它会自动传递参数(例如foo1)。这很干净,很好,没有明确的检索或解析是必要的。 (所以,你甚至可以写execute 'Plug' 'foo' . s:count,它仍然有用。)

call plug#begin()call plug#end()的换行(大概)是为了:

  • 引导;因为您的.vimrc插件尚未加载,:Plug命令未定义且未事先明确定义
  • 结束处理;插件管理器遍历所有已配置的插件并将其添加到'runtimepath';首先将它们全部收集起来并在最后进行一次处理可能会更有效率

获取行

这可以通过:help :range:yank

结合使用
/^call plug#begin()$/+1;/^call plug#end()$/-1 yank

或者,您可以使用更多低级功能:通过:let startLnum = search('^call plug#begin()$', '')找到分界线,然后通过let lines = getline(startLnum, endLnum)抓住两者之间的行。