461 Stimmen

Tabulatoren durch Leerzeichen in vim ersetzen

Ich möchte in gVim Tabulatoren in Leerzeichen umwandeln. Ich habe die folgende Zeile zu meinem _vimrc :

set tabstop=2

Es funktioniert, um bei zwei Leerzeichen zu stoppen, aber es sieht immer noch so aus, als ob eine Tabulatortaste eingefügt wird (ich habe versucht, die h-Taste zu verwenden, um die Leerzeichen nachträglich zu zählen).

Ich bin mir nicht sicher, was ich tun soll, damit gVim Tabulatoren in Leerzeichen umwandelt?

47voto

anish Punkte 469

Fügen Sie folgende Zeilen zu Ihrer .vimrc hinzu

set expandtab
set tabstop=4
set shiftwidth=4
map <F2> :retab <CR> :wq! <CR>

Öffnen Sie eine Datei in vim und drücken Sie F2 Die Tabulatoren werden in 4 Leerzeichen umgewandelt und die Datei wird automatisch gespeichert.

19voto

Willem van Ketwich Punkte 4837

So hat es bei mir funktioniert:

:set tabstop=2 shiftwidth=2 expandtab | retab

17voto

pk. Punkte 410

Wenn Sie Ihr Geld behalten wollen \t gleich 8 Leerzeichen, dann ist die Einstellung zu erwägen:

   set softtabstop=2 tabstop=8 shiftwidth=2

Dadurch erhalten Sie zwei Leerzeichen pro <TAB> Presse, sondern tatsächlich \t in Ihrem Code wird immer noch als 8 Zeichen angesehen.

4voto

Adam Eberlin Punkte 13455

Dieser Artikel enthält ein ausgezeichnetes vimrc-Skript für die Behandlung von Tabulatoren und Leerzeichen und die Konvertierung dazwischen.

Diese Befehle werden bereitgestellt:

Leerzeichen2Tab Leerzeichen in Tabulatoren umwandeln, nur in Einzügen.

Tab2Space Tabulatoren in Leerzeichen umwandeln, nur in Einzügen.

RetabIndent Ausführen von Space2Tab (wenn 'expandtab' gesetzt ist) oder Tab2Space (sonst).

Jeder Befehl akzeptiert ein Argument, das die Anzahl der Leerzeichen in einer Tabulatorspalte angibt. Standardmäßig wird die Einstellung "tabstop" verwendet.

Source : http://vim.wikia.com/wiki/Super_retab#Script

" Return indent (all whitespace at start of a line), converted from
" tabs to spaces if what = 1, or from spaces to tabs otherwise.
" When converting to tabs, result has no redundant spaces.
function! Indenting(indent, what, cols)
  let spccol = repeat(' ', a:cols)
  let result = substitute(a:indent, spccol, '\t', 'g')
  let result = substitute(result, ' \+\ze\t', '', 'g')
  if a:what == 1
    let result = substitute(result, '\t', spccol, 'g')
  endif
  return result
endfunction

" Convert whitespace used for indenting (before first non-whitespace).
" what = 0 (convert spaces to tabs), or 1 (convert tabs to spaces).
" cols = string with number of columns per tab, or empty to use 'tabstop'.
" The cursor position is restored, but the cursor will be in a different
" column when the number of characters in the indent of the line is changed.
function! IndentConvert(line1, line2, what, cols)
  let savepos = getpos('.')
  let cols = empty(a:cols) ? &tabstop : a:cols
  execute a:line1 . ',' . a:line2 . 's/^\s\+/\=Indenting(submatch(0), a:what, cols)/e'
  call histdel('search', -1)
  call setpos('.', savepos)
endfunction

command! -nargs=? -range=% Space2Tab call IndentConvert(<line1>,<line2>,0,<q-args>)
command! -nargs=? -range=% Tab2Space call IndentConvert(<line1>,<line2>,1,<q-args>)
command! -nargs=? -range=% RetabIndent call IndentConvert(<line1>,<line2>,&et,<q-args>)

Das hat mir ein bisschen mehr geholfen als die Antworten hier, als ich zum ersten Mal nach einer Lösung suchte.

4voto

Shekar Punkte 41

Suchen Sie zunächst nach Tabs in Ihrer Datei: /^I :set expandtab :retab

wird funktionieren.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X