vim:不带外窗的制造

vim:不带外窗的制造,vim,makefile,Vim,Makefile,在vim中,当我使用 :make make的输出显示在一个“外部”窗口中,我不喜欢这个,我使用这个地图 nnoremap <leader>m :w <bar> make<CR><CR><CR>:copen<CR> 当copen有make:所有事情都不做时,我如何向copen添加自动关闭。?您可以通过getqflist()检查快速修复列表的内容。然后,如果第一行与您不想看到的文本不匹配,我只会有条件地打开quickfix

在vim中,当我使用

:make
make的输出显示在一个“外部”窗口中,我不喜欢这个,我使用这个地图

 nnoremap <leader>m :w <bar> make<CR><CR><CR>:copen<CR>

当copen有
make:所有事情都不做时,我如何向copen添加自动关闭。

您可以通过
getqflist()
检查快速修复列表的内容。然后,如果第一行与您不想看到的文本不匹配,我只会有条件地打开quickfix窗口:

nnoremap <leader>m :w <bar> make<CR><CR><CR>
\:if get(get(getqflist(), 0, {}), 'text', '') !~# 'Nothing to be done' <Bar> 
\  copen <Bar>
\endif<CR>
nnoremap m:w make
\:如果get(get(getqflist(),0,{}),'text',''!~#'没什么可做的'
\科本
\恩迪夫
通过
get()
进行访问可以避免列表为空时出现错误


您也可以随时打开列表,然后在条件中使用
:cclose
,如果这更适合您的需要。

我有一个vim脚本,它对我有很大帮助:

  • 首先,它保存当前的编辑窗口(如果可能,如果只读则不起作用)
  • 然后运行make并将错误(stderr)重定向到临时文件(stdout被忽略)
  • 如果生成失败,则打开“快速修复”窗口并用错误消息填充它
  • 删除临时文件
然后我映射F5键以在每个vim模式下进行构建

“F5-运行make(在正常模式下) :nnoremap:Build “F5-运行make(在视觉模式下) :vnoremap:Build “F5-运行make(在插入模式下) :inoremap:Build
nnoremap <leader>m :w <bar> make<CR><CR><CR>
\:if get(get(getqflist(), 0, {}), 'text', '') !~# 'Nothing to be done' <Bar> 
\  copen <Bar>
\endif<CR>

command! -nargs=* Build call s:RunBuild()

function! s:RunBuild()
    let tmpfile = tempname()

    "build and surpresses build status messages to stdout
    "(stdout message are not very informative and may be very very long)
    "Error messages are redirected to temporary file.
    let buildcmd = "make -j 2> " . tmpfile . " >/dev/null"

    let fname = expand("%")
    if fname != ""
        " save current buffer if possible (your bad if file is read only)
        write
    endif

    " --- run build command --- 
    echo "Running make ... "
    let cmd_output = system(buildcmd)

    "if getfsize(tmpfile) == 0
    if v:shell_error == 0
      cclose
      execute "silent! cfile " . tmpfile
      echo "Build succeded"
    else

      let old_efm = &efm
      set efm=%f:%l:%m
      execute "silent! cfile " . tmpfile
      let &efm = old_efm

      botright copen
    endif

    call delete(tmpfile)
endfunction

"F5 - run make (in normal mode) :nnoremap :Build "F5 - run make (in visual mode) :vnoremap :Build "F5 - run make (in insert mode) :inoremap :Build