it-swarm.com.de

Ersetzen Sie Tabulatoren durch Leerzeichen in vim

Ich möchte Tab in Leerzeichen in gVim konvertieren. Ich habe die folgende Zeile zu meinem _vimrc Hinzugefügt:

set tabstop=2

Es funktioniert, um bei zwei Leerzeichen anzuhalten, aber es sieht immer noch so aus, als wäre eine Tabulatortaste eingefügt (ich habe versucht, die h-Taste zu verwenden, um danach Leerzeichen zu zählen).

Ich bin nicht sicher, was ich tun soll, damit gVim Tabs in Leerzeichen konvertiert.

332
David.Chu.ca

IIRC, so etwas wie:

set tabstop=2 shiftwidth=2 expandtab

sollte den Trick machen. Wenn Sie bereits über Tabulatoren verfügen, setzen Sie anschließend einen Nice Global RE ein, um diese durch doppelte Leerzeichen zu ersetzen.

358
D.Shawley

Sobald Sie die Registerkarte "Erweitern" gemäß den anderen Antworten aktiviert haben, können Sie vorhandene Dateien auf äußerst bequeme Weise gemäß Ihren neuen Einstellungen konvertieren:

:retab

Es wird am aktuellen Puffer arbeiten.

787
ʞɔıu

Versuchen

set expandtab

für weiche Tabs.

So reparieren Sie vorhandene Registerkarten:

:%s/\t/  /g

Ich habe zwei Leerzeichen verwendet, da Sie Ihren Tabulator bereits auf zwei Leerzeichen gesetzt haben.

103
Hank Gay

Das hat bei mir funktioniert:

sie können die folgenden Registerkarten sehen:

:set list

um das Ersetzen von Tabs zu ermöglichen, gehen Sie wie folgt vor:

:set expandtab

dann

:retab

jetzt wurden alle Registerkarten durch Leerzeichen ersetzt. Sie können dann wie folgt zur normalen Anzeige zurückkehren:

:set nolist
54
serup

gg=G fügt die gesamte Datei erneut ein und entfernt die meisten, wenn nicht alle Registerkarten, die ich in Dateien von Kollegen erhalte.

41
Jake Sellers

Fügen Sie Ihrem .vimrc die folgenden Zeilen 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 Registerkarten werden in 4 Leerzeichen konvertiert und die Datei wird automatisch gespeichert.

39
anish

Wenn Sie möchten, dass Ihr \t 8 Leerzeichen enthält, sollten Sie Folgendes festlegen:

   set softtabstop=2 tabstop=8 shiftwidth=2

Dadurch erhalten Sie zwei Leerzeichen pro <TAB> - Druck, aber das tatsächliche \t In Ihrem Code wird weiterhin als 8 Zeichen angesehen.

14
pk.

suche zuerst nach Tabs in deiner Datei:/^ I: set expandtab: retab

wird funktionieren.

4
Shekar

expand ist ein Unix-Dienstprogramm zum Konvertieren von Tabulatoren in Leerzeichen. Wenn Sie in vim nichts set möchten, können Sie einen Shell-Befehl von vim aus verwenden:

:!% expand -t8
3
qwr

Das hat bei mir funktioniert:

:set tabstop=2 shiftwidth=2 expandtab | retab
3

Dieser Artikel enthält ein hervorragendes vimrc-Skript für die Verarbeitung von Tabulatoren und Leerzeichen sowie für die Konvertierung zwischen diesen.

Diese Befehle werden bereitgestellt:

Space2Tab Konvertiert Leerzeichen in Tabulatoren, nur in Einzügen.

Tab2Space Tabulatoren nur in Einzüge in Leerzeichen konvertieren.

RetabIndent Führt Space2Tab (wenn 'expandtab' gesetzt ist) oder Tab2Space (ansonsten) aus.

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

Quelle: 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>)

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

2
Adam Eberlin