Vim Tips Wiki
Register
(combine with 210 per 200903)
(→‎Comments: Just adding feedback about it working on my machine)
Tag: Visual edit
 
(6 intermediate revisions by 3 users not shown)
Line 1: Line 1:
{{review}}
 
 
{{TipImported
 
{{TipImported
 
|id=210
 
|id=210
|previous=209
+
|previous=208
 
|next=212
 
|next=212
 
|created=2002
 
|created=2002
Line 12: Line 11:
 
|category2=Compiler
 
|category2=Compiler
 
}}
 
}}
  +
This tip shows techniques to compile or to run <code>make</code> for the file in the current buffer. This is useful to list any compile errors in the quickfix window.
  +
  +
==Compile with gcc==
 
If you use
 
If you use
 
<pre>
 
<pre>
Line 17: Line 19:
 
</pre>
 
</pre>
   
in your [[vimrc]], and your actual file is <tt>file.c</tt>, then <tt>:make</tt> will compile <tt>file.c</tt> with the output file. (<tt>gcc file.c -o file</tt>).
+
in your [[vimrc]], and your actual file is <code>file.c</code>, then <code>:make</code> will compile <code>file.c</code> with the output <code>file</code>. (<code>gcc file.c -o file</code>).
   
  +
If you use GNU <code>make</code> the above change is not required. Instead, simply use the following command to compile the current file (you need to save it first):
;Comments
 
 
<pre>
You don't even have to make that change. Just <tt>:make %:r</tt> and you'll get the same effect.
 
  +
:make %:r
 
</pre>
   
  +
When using other compilers, like Sun <code>cc</code>, you can adapt the tip to suit your compiler.
This is true only if the default <tt>make</tt> program is actually GNU make. The tip can be applied to other compilers like Sun CC, etc.
 
   
  +
==Invoking make==
==Rough merge in of 200903 tip by Zhenchan==
 
Call vim command Make to compile current buffer. Useful with quickfix.
+
The following allows you to press F7 (in normal mode) to invoke <code>make</code> to compile the file in the current buffer. If modified, the file is first saved.
 
<pre>
 
<pre>
 
" Save and make current file.o
function Make()
+
function! Make()
 
let curr_dir = expand('%:h')
 
let curr_dir = expand('%:h')
 
if curr_dir == ''
 
if curr_dir == ''
Line 36: Line 41:
 
execute 'make %:r.o'
 
execute 'make %:r.o'
 
execute 'lcd -'
 
execute 'lcd -'
  +
endfunction
endfun
 
 
nnoremap <F7> :update<CR>:call Make()<CR>
</pre>
 
 
You can bind it to <F7> for example.
 
<pre>
 
" save & make current file.o
 
imap <F7> <Esc>:w<CR>:call Make()<CR>
 
nmap <F7> :w<CR>:call Make()<CR>
 
 
</pre>
 
</pre>
   
 
==Comments==
 
==Comments==
  +
{{todo}}
  +
*I've done a pretty quick clean up. Would someone please reply here with news about whether it actually works (after testing).
  +
**"set makeprg=gcc\ -o\ %<\ %" worked with VIM 8.0 on OSX 10.12.16
  +
*Need some explanation, including note about (deprecated) <code>%<</code>. [[User:JohnBeckett|JohnBeckett]] 04:49, 14 July 2009 (UTC)

Latest revision as of 03:32, 4 November 2017

Tip 210 Printable Monobook Previous Next

created 2002 · complexity basic · author elian · version 6.0


This tip shows techniques to compile or to run make for the file in the current buffer. This is useful to list any compile errors in the quickfix window.

Compile with gcc[]

If you use

set makeprg=gcc\ -o\ %<\ %

in your vimrc, and your actual file is file.c, then :make will compile file.c with the output file. (gcc file.c -o file).

If you use GNU make the above change is not required. Instead, simply use the following command to compile the current file (you need to save it first):

:make %:r

When using other compilers, like Sun cc, you can adapt the tip to suit your compiler.

Invoking make[]

The following allows you to press F7 (in normal mode) to invoke make to compile the file in the current buffer. If modified, the file is first saved.

" Save and make current file.o
function! Make()
  let curr_dir = expand('%:h')
  if curr_dir == ''
    let curr_dir = '.'
  endif
  echo curr_dir
  execute 'lcd ' . curr_dir
  execute 'make %:r.o'
  execute 'lcd -'
endfunction
nnoremap <F7> :update<CR>:call Make()<CR>

Comments[]

 TO DO 

  • I've done a pretty quick clean up. Would someone please reply here with news about whether it actually works (after testing).
    • "set makeprg=gcc\ -o\ %<\ %" worked with VIM 8.0 on OSX 10.12.16
  • Need some explanation, including note about (deprecated) %<. JohnBeckett 04:49, 14 July 2009 (UTC)