Vim Tips Wiki
(Fix formatting of the code.)
(Adding categories)
 
(7 intermediate revisions by 2 users not shown)
Line 1: Line 1:
 
{{review}}
 
{{review}}
  +
{{TipImported
{{Tip
 
 
|id=1434
 
|id=1434
  +
|previous=1432
|title=as you type (or paste) in Makefile, autoconvert leading eight spaces to tab
 
  +
|next=1435
|created=December 7, 2006 16:54
+
|created=2006
 
|complexity=intermediate
 
|complexity=intermediate
 
|author=Yakov Lerner
 
|author=Yakov Lerner
 
|version=6.0
 
|version=6.0
 
|rating=134/37
 
|rating=134/37
  +
|category1=
|text=
 
  +
|category2=
[ this tip is only for those who edit Makefiles by hand]
 
 
}}
 
This tip is for those who edit Makefiles by hand.
   
Makefiles punish you if instead of single tab somebody puts eight spaces in your makefile (happens when pasting between Makeiles). But those treacherous Makefiles did not suspect that we have now this little vimscript piece. It guards against this annoying pitfall (but you must have ':set nopaste' set for this helper to work.)
+
Makefiles punish you if instead of single tab somebody puts eight spaces in your makefile (happens when pasting between Makeiles). This script guards against this annoying pitfall.
   
 
The following script auto-converts 8 spaces at the beginning of line (only in Makefiles, and only at the beginning of line) into tab, as you type or paste. It is suggested to have <code>:set list</code> in Makefiles, too. This script will only work if <code>:set nopaste</code> is set.
   
  +
<pre>
 
" In Makefile, automatically convert eight spaces at the beginning
 
" of line to tab, as you type (or paste).
 
au FileType make :inoremap <buffer><silent><Space> <Space><c-o>:call MapSpaceInMakefile()<CR>
 
function! MapSpaceInMakefile()
 
" if this space is 8th space from the beginning of line, replace 8 spaces with
 
" one tab (only at the beginning of file)
 
let line = getline('.')
 
let col = col('.')
 
if strpart(line, 0, 8) == ' '
 
let new = "\t" . strpart(line,8)
 
call setline('.', new )
 
endif
 
return ""
 
endfunction
  +
</pre>
   
 
==Comments==
The following piece auto-converts 8 spaces at the beginning of line (only in Makefiles, and only at the beginning of line) into tab, as you type or paste. It is suggested to have ':set list' in Makefiles, too. This piece will only work if 'set nopaste' is set.
 
 
You don't need a script for this! Use the substitution command:
 
  +
<pre>
 
 
:%s/^ \{8}/^V<Tab>/
 
  +
</pre>
"****************
 
" In Makefile, automatically convert eight spaces at the beginning
 
" of line to tab, as you type (or paste)
 
"*****************
 
 
au FileType make :inoremap &lt;buffer&gt;&lt;silent&gt;&lt;space&gt; &lt;space&gt;&lt;c-o&gt;:call MapSpaceInMakefile()&lt;cr&gt;
 
 
function! MapSpaceInMakefile()
 
" if this space is 8th space from the beginning of line, replace 8 spaces with
 
" one tab (only at the beginning of file)
 
 
let line = getline('.')
 
let col = col('.')
 
 
if strpart(line, 0, 8) == ' '
 
let new = "\t" . strpart(line,8)
 
call setline('.', new )
 
endif
 
 
return ""
 
endfunction
 
 
 
}}
 
   
 
^V<Tab> means pressing CTRL-V and the press the <Tab>-key, or s/^ \{8}/^Q<Tab>/ on Windows.
== Comments ==
 
You really don't need a script for this! Use the subsitution command (:help :s):
 
:s/^ \{8}/^V&lt;tab&gt;/
 
(^V&lt;tab&gt; means pressing CTRL-V and the press the &lt;tab&gt;-key)
 
or s/^ \{8}/^Q&lt;tab&gt;/ on windowz.
 
   
MJ
 
, December 8, 2006 0:55
 
 
----
 
----
 
Your command above does not fix as you type.
 
Your command above does not fix as you type.
   
Yakov Lerner
 
, December 8, 2006 6:19
 
 
----
 
----
A competent programmer should not err when typing. It is more likely to occur on paste, when one generally will `:set paste'. Alas....
+
A competent programmer should not err when typing. It is more likely to occur on paste, when one generally will ':set paste'.
   
Wu Yongwei
 
, December 11, 2006 17:18
 
 
----
 
----
  +
[[Category:Make]]
<!-- parsed by vimtips.py in 0.635252 seconds-->
 

Latest revision as of 23:42, 27 January 2014

Tip 1434 Printable Monobook Previous Next

created 2006 · complexity intermediate · author Yakov Lerner · version 6.0


This tip is for those who edit Makefiles by hand.

Makefiles punish you if instead of single tab somebody puts eight spaces in your makefile (happens when pasting between Makeiles). This script guards against this annoying pitfall.

The following script auto-converts 8 spaces at the beginning of line (only in Makefiles, and only at the beginning of line) into tab, as you type or paste. It is suggested to have :set list in Makefiles, too. This script will only work if :set nopaste is set.

" In Makefile, automatically convert eight spaces at the beginning
" of line to tab, as you type (or paste).
au FileType make :inoremap <buffer><silent><Space> <Space><c-o>:call MapSpaceInMakefile()<CR>
function! MapSpaceInMakefile()
  " if this space is 8th space from the beginning of line, replace 8 spaces with
  " one tab (only at the beginning of file)
  let line = getline('.')
  let col = col('.')
  if strpart(line, 0, 8) == ' '
    let new = "\t" . strpart(line,8)
    call setline('.', new )
  endif
  return ""
endfunction

Comments[]

You don't need a script for this! Use the substitution command:

:%s/^ \{8}/^V<Tab>/

^V<Tab> means pressing CTRL-V and the press the <Tab>-key, or s/^ \{8}/^Q<Tab>/ on Windows.


Your command above does not fix as you type.


A competent programmer should not err when typing. It is more likely to occur on paste, when one generally will ':set paste'.