vim:不带外窗的制造
在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
: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-运行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