如何在vim中临时设置makeprg

Hai*_*ang 4 vim

在正常情况下,我使用vim的make实用程序,我将makeprg设置为我正在为之工作的项目的Makefile.由于通常项目将持续数周甚至更长时间,因此我不需要经常更改makeprg的设置.但有时候我需要编写一些"foobar"代码,用于练习我的c ++技能或者在我的脑海中为一些原始想法进行原型设计.因此,每当我切换到vim使用的"foobar"模式时,我需要注释原始makeprg设置添加新设置如下:

au FileType c set makeprg=gcc\ %
au FileType cpp set makeprg=g++\ %
Run Code Online (Sandbox Code Playgroud)

这真的非常不方便.当我回到vim使用的"正常项目模式"时,我需要改回原来的设置.来来回回 ....

我想从你们这里得知的是:是否有可能暂时设置makeprg.例如,定义一个函数,其中首先设置makeprg的本地值,然后在返回形式之前调用make函数调用自动将makeprg恢复为函数调用之前的值.

eph*_*ent 8

这不完全是你要求的,但你可以只在缓冲区本地设置选项.这样你就不用费心去包装你的功能; 只需makepgrp在您想要的特定文件上进行本地更改.

                                                        *:setl* *:setlocal*
:setl[ocal] ...         Like ":set" but set only the value local to the
                        current buffer or window.  Not all options have a
                        local value.  If the option does not have a local
                        value the global value is set.
                        With the "all" argument: display all local option's
                        local values.
                        Without argument: Display all local option's local
                        values which are different from the default.
                        When displaying a specific local option, show the
                        local value.  For a global/local boolean option, when
                        the global value is being used, "--" is displayed
                        before the option name.
                        For a global option the global value is
                        shown (but that might change in the future).
                        {not in Vi}
au FileType c setl mp=gcc\ %
au FileType cpp setl mp=g++\ %
Run Code Online (Sandbox Code Playgroud)


too*_*php 5

如果你想在vim函数调用之前/之后保存和恢复一个选项,你可以这样做:

let oldmakeprg = &l:makeprg
try
  " set new value of makeprg and call the function
  set makeprg=new\ value
  call MyFunction()
finally
  " set makeprg back to old value
  let &l:makeprg = oldmakeprg
endtry

你也可以将你的'foobar'代码放在一个特殊的文件夹中,并有一个单独的自动命令来单独设置makeprg:

" normal settings for makeprg
au FileType c set makeprg=gcc\ %
au FileType cpp set makeprg=g++\ %

" special settings for foobar code
au BufRead,BufNewFile **/foobar/**.c set makeprg=gcc\ %
au BufRead,BufNewFile **/foobar/**.cpp set makeprg=g++\ %