как временно установить makeprg в vim - PullRequest
4 голосов
/ 09 марта 2010

В обычном случае я использую утилиту make vim. Я установлю makeprg в Makefile проекта, в котором я сейчас работаю. Так как обычно проект длится недели или даже дольше, мне не нужно часто менять настройку makeprg. Но иногда мне нужно написать некоторый код "foobar" либо для отработки моего навыка c ++, либо для прототипирования некоторых примитивных идей в моей голове. Поэтому всякий раз, когда я переключаюсь в режим использования vim «foobar», мне нужно комментировать исходную настройку makeprg и добавлять новую настройку следующим образом:

au FileType c set makeprg=gcc\ %
au FileType cpp set makeprg=g++\ %

что действительно очень, очень неудобно. когда я возвращаюсь в «обычный проектный режим» использования vim, мне нужно вернуться к первоначальной настройке. туда и обратно ....

Что я хочу узнать от вас, ребята, так это: возможно ли временно выполнить настройку makeprg. Например, определите функцию, в которой сначала задайте локальное значение makeprg, а затем вызовите make перед возвратом из функции. Функция автоматически восстановит makeprg до значения перед вызовом функции.

Ответы [ 2 ]

8 голосов
/ 09 марта 2010

Это не совсем то, что вы просили, но вы можете установить локальные параметры только для буфера. Таким образом, вам не нужно беспокоиться об упаковке своих функций; просто измените makepgrp локально на нужные вам файлы.

                                                        <b><a href="http://vimdoc.sourceforge.net/htmldoc/options.html#:setl" rel="noreferrer">*:setl*</a> <a href="http://vimdoc.sourceforge.net/htmldoc/options.html#:setlocal" rel="noreferrer">*:setlocal*</a></b>
:setl[ocal] <a href="http://vimdoc.sourceforge.net/htmldoc/eval.html#..." rel="noreferrer">...</a>         Like "<a href="http://vimdoc.sourceforge.net/htmldoc/options.html#:set" rel="noreferrer">:set</a>" but set only the value local to the
                        current buffer or <a href="http://vimdoc.sourceforge.net/htmldoc/windows.html#window" rel="noreferrer">window</a>.  Not all <a href="http://vimdoc.sourceforge.net/htmldoc/options.html#options" rel="noreferrer">options</a> 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 <a href="http://vimdoc.sourceforge.net/htmldoc/options.html#boolean" rel="noreferrer">boolean</a> option, when
                        the global value is being used, "<a href="http://vimdoc.sourceforge.net/htmldoc/starting.html#--" rel="noreferrer">--</a>" 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++\ %
5 голосов
/ 09 марта 2010

Если вы хотите сохранить и восстановить опцию до / после вызова функции в 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++\ %
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...