Definieren Sie die Registerkarte als 4 Leerzeichen neu


1094

Meine aktuelle Einstellung nimmt 8 Leerzeichen an. Wie könnte ich es neu definieren?


4
Besser noch, setzen Sie es auf vier Leerzeichen und aktivieren Sie gleichzeitig den automatischen Einzug: Automatischer Einzug mit einer auf 4 Leerzeichen eingestellten
Tabbreite

7
@einrich5991 Ich verstehe es nicht. Ich brauche keine 8 Leerzeichen, um zu erkennen, dass eine Zeile eingerückt ist, und mehr als nötig bedeutet, die Zeichen zu begrenzen, die Sie in einer langen Textzeile anzeigen können (zumindest vor dem Umbruch). Aber jedem sein eigenes. :)
weberc2

40
@ heinrich5991 Mein Argument ist "benutze so wenig wie möglich, um eine eingerückte Linie leicht zu identifizieren". Nach meiner Einschätzung nimmt die Fähigkeit, eine Einrückung leicht zu identifizieren, bei <3 Stellen schnell ab und nimmt bei 4 Stellen nicht mehr zu. Daher ist eine Einrückung, die 4 Leerzeichen überschreitet, meiner Erfahrung nach eine Verschwendung.
weberc2

7
@ weberc2 Konnte unmöglich mehr zustimmen, Kumpel. Aus diesem Grund fühle ich mich so verdammt klaustrophobisch, wenn ich Ruby oder "modernes JavaScript" lese, von denen jedes zwei Leerzeichen zum Einrücken verwendet. Es belastet mich zu Recht, wenn ich versuche, stark verschachtelten Strukturen zu folgen. Harte Tabs für den verdammten Sieg.

Mögliches Duplikat von Tab durch Leerzeichen in VIM
ersetzen

Antworten:


1616

Es kommt darauf an, was du meinst. Haben Sie aktuelle Tabulatorzeichen in Ihrer Datei zu wollen , erscheinen 4 Felder breit, oder „Tab“ meinen Sie eigentlich einen Gedankenstrich , erzeugt durch die Tab - Taste drücken, die in der Datei führen würde buchstäblich enthalten (bis zu) 4 Leerzeichen für jede "Registerkarte", die Sie eingeben?

Abhängig von Ihrer Antwort sollte eine der folgenden Einstellungen für Sie funktionieren:

  • Für Tabulatorzeichen, die 4 Leerzeichen breit erscheinen :

    set tabstop=4
    

    Wenn Sie in Ihrem Quellcode das tatsächliche Tabulatorzeichen verwenden, möchten Sie wahrscheinlich auch diese Einstellungen (dies sind eigentlich die Standardeinstellungen, aber Sie möchten sie möglicherweise defensiv festlegen):

    set softtabstop=0 noexpandtab
    

    Wenn Sie möchten, dass ein Einzug einer einzelnen Registerkarte entspricht, sollten Sie außerdem Folgendes verwenden:

    set shiftwidth=4
    
  • Für Einrückungen, die aus 4 Leerzeichen bestehen, aber mit der Tabulatortaste eingegeben werden:

    set tabstop=8 softtabstop=0 expandtab shiftwidth=4 smarttab
    

Um die obigen Einstellungen dauerhaft zu machen, fügen Sie diese Zeilen Ihrem vimrc hinzu .

Falls Sie Anpassungen vornehmen müssen oder einfach nur verstehen möchten, was diese Optionen bedeuten, finden Sie hier eine Aufschlüsselung der einzelnen Optionen:

tabstop

Die Breite eines harten Tabstops, gemessen in "Leerzeichen" - effektiv die (maximale) Breite eines tatsächlichen Tabulatorzeichens.

shiftwidth

Die Größe eines "Einzugs". Es wird auch in Leerzeichen gemessen. Wenn Ihre Codebasis also mit Tabulatorzeichen eingerückt ist, möchten Sie shiftwidthdie Anzahl der Tabulatorzeichen mal erreichen tabstop. Dies wird auch durch Dinge wie die verwendet =, >und <Befehle.

softtabstop

Wenn Sie diesen Wert auf einen anderen Wert ungleich Null setzen, tabstopwird mit der Tabulatortaste (im Einfügemodus) eine Kombination von Leerzeichen (und möglicherweise Tabulatoren) eingefügt, um Tabulatoren bei dieser Breite zu simulieren .

expandtab

Wenn Sie dies aktivieren, wird die Tabulatortaste (im Einfügemodus) Leerzeichen anstelle von Tabulatorzeichen einfügen. Dies wirkt sich auch auf das Verhalten des retabBefehls aus.

smarttab

Wenn Sie dies aktivieren, fügt die Tabulatortaste (im Einfügemodus) Leerzeichen oder Tabulatoren ein, um zum nächsten Einzug des nächsten Tabstops zu gelangen, wenn sich der Cursor am Anfang einer Zeile befindet (dh die einzigen vorhergehenden Zeichen sind Leerzeichen).

Weitere Einzelheiten zu diesen alle sehen in vim (zB ):help 'optionname':help 'tabstop'


18
Es ist auch wichtig sicherzustellen, dass Makefiles immer Zeichen mit harten Tabulatoren verwenden, da sonst Builds fehlschlagen! Ich habe gezeigt, wie es geht, auf stackoverflow.com/questions/234564/…
Shervin Emami

29
@Undefined Das sind die vim-Einstellungen des Systems. ~/.vimrcist die vim-Einstellung des Benutzers. Die meisten Leute lassen die Systemeinstellungen in Ruhe und bearbeiten nur die Benutzereinstellungen. Beachten Sie, dass dies ~/.vimrcerst vorhanden ist, wenn Sie es auf den meisten Systemen erstellen.
Laurence Gonsalves

4
Vim-Benutzer nehmen die set softtabstop=4Funktion zur Kenntnis ! Ich bin es leid zu versuchen, Ihren Code mit lessoder mit einem anderen Editor zu lesen , außer vimum verrückte Einrückungen zu sehen, weil Sie die Registerkarte neu definiert haben, um eine beliebige Anzahl von Leerzeichen zu erhalten (obwohl der Rest des Systems anders denkt)! :-)
Ogre Psalm33

6
Kann mir jemand helfen zu verstehen, warum diese Antwort tabstop=8für Einrückungen verwendet werden soll, die aus 4 Leerzeichen bestehen? Ich konnte den Grund nicht finden, nachdem ich die Beschreibungen der verschiedenen Einstellungen gelesen hatte. Eine andere Antwort lautet "Verwenden" tabstop=4, was für mich etwas sinnvoller ist.
Kodos Johnson

5
@KodosJohnson Die tabstopOption steuert die Breite eines Hard-Tab-Zeichens. Wenn Sie möchten , dass Ihre Einzüge von 4 Leerzeichen bestehen, anstatt einzelne Tabulatoren , die 4-breit sind, dann die Breite der Tabulatorzeichen spielt keine Rolle - Art . In der Praxis mögen Sie wahrscheinlich Ihre Tabulatorzeichen Breite sein verschieden von der Breite Ihrer Einzüge, um die Möglichkeit von Tabulatoren getarnt als richtige Einzüge zu reduzieren. ( list+ expandtabkann auch hier helfen) Auch 8-Zeichen-breite Registerkarten sind "der Standard" - Ihr Terminal, Python und viele andere Tools verwenden standardmäßig 8-Zeichen-breite Registerkarten.
Laurence Gonsalves

745

Um dies für den aktuellen Benutzer dauerhaft zu definieren, erstellen (oder bearbeiten) Sie die .vimrcDatei:

$ vim ~/.vimrc

Fügen Sie dann die folgende Konfiguration in die Datei ein. Nach dem Neustart von vim gelten die Registerkarteneinstellungen.

set tabstop=4       " The width of a TAB is set to 4.
                    " Still it is a \t. It is just that
                    " Vim will interpret it to be having
                    " a width of 4.

set shiftwidth=4    " Indents will have a width of 4

set softtabstop=4   " Sets the number of columns for a TAB

set expandtab       " Expand TABs to spaces

Wenn Sie ~ / .vimrc nicht haben, versuchen Sie es mit / etc / vim / vimrc. In meinem Fall unter Ubuntu 16.04 ist die Konfigurationsdatei vorhanden. Beachten Sie jedoch, dass durch das Ändern dieser Datei die Konfiguration global verwendet wird.
Todor Todorov

4
Eine weitere Sache, verwenden Sie :retab, um vorhandene tabzu konvertieren spaces. vim.wikia.com/wiki/Converting_tabs_to_spaces
DawnSong

57

oder Abkürzung für vim modeline:

vim :set ts=4 sw=4 sts=4 et :

28

Es gibt nur wenige Einstellungen, die festlegen, ob Leerzeichen oder Tabulatoren verwendet werden sollen.

Hier sind also praktische Funktionen, die in Ihrer ~/.vimrcDatei definiert werden können :

function! UseTabs()
  set tabstop=4     " Size of a hard tabstop (ts).
  set shiftwidth=4  " Size of an indentation (sw).
  set noexpandtab   " Always uses tabs instead of space characters (noet).
  set autoindent    " Copy indent from current line when starting a new line (ai).
endfunction

function! UseSpaces()
  set tabstop=2     " Size of a hard tabstop (ts).
  set shiftwidth=2  " Size of an indentation (sw).
  set expandtab     " Always uses spaces instead of tab characters (et).
  set softtabstop=0 " Number of spaces a <Tab> counts for. When 0, featuer is off (sts).
  set autoindent    " Copy indent from current line when starting a new line.
  set smarttab      " Inserts blanks on a <Tab> key (as per sw, ts and sts).
endfunction

Verwendungszweck:

:call UseTabs()
:call UseSpaces()

Um es pro Dateierweiterung zu verwenden, kann die folgende Syntax verwendet (hinzugefügt .vimrc) werden:

au! BufWrite,FileWritePre *.module,*.install call UseSpaces()

Siehe auch: Konvertieren von Registerkarten in Leerzeichen .


Hier ist ein weiterer Ausschnitt aus Wikia, mit dem Sie zwischen Tabulatoren und Leerzeichen wechseln können :

" virtual tabstops using spaces
set shiftwidth=4
set softtabstop=4
set expandtab
" allow toggling between local and default mode
function TabToggle()
  if &expandtab
    set shiftwidth=8
    set softtabstop=0
    set noexpandtab
  else
    set shiftwidth=4
    set softtabstop=4
    set expandtab
  endif
endfunction
nmap <F9> mz:execute TabToggle()<CR>'z

Es ermöglicht die Verwendung von 4 Leerzeichen für jede Registerkarte und eine Zuordnung F9zum Umschalten der Einstellungen.


27

Ich habe dies kopiert und in meine .vimrc-Datei eingefügt:

" size of a hard tabstop
set tabstop=4

" always uses spaces instead of tab characters
set expandtab

" size of an "indent"
set shiftwidth=4

Die ersten 2 Einstellungen bedeuten, dass ich durch Drücken der Tabulatortaste 4 Leerzeichen erhalte. Die dritte Einstellung bedeutet, dass wenn ich es tueV> (dh visuell und eingerückt) auch 4 Leerzeichen bekomme.

Nicht so umfassend wie die akzeptierte Antwort, aber es könnte Menschen helfen, die nur etwas kopieren und einfügen möchten.


14

Geben Sie die gewünschten Einstellungen in ~ / .vimrc ein Datei . Im Folgenden finden Sie einige Richtlinien und bewährte Methoden.

Es gibt vier Hauptmethoden für die Verwendung von Registerkarten in Vim:

  1. Halten Sie 'tabstop' immer bei 8, setzen Sie 'softtabstop' und 'shiftwidth' auf 4 (oder 3 oder was auch immer Sie bevorzugen) und verwenden Sie 'noexpandtab'. Dann verwendet Vim eine Mischung aus Tabulatoren und Leerzeichen, tippt jedoch und verhält sich so, als würde alle 4 (oder 3) Zeichen ein Tabulator angezeigt.

    Hinweis: Wenn Sie 'tabstop' auf einen anderen Wert als 8 setzen, kann Ihre Datei an vielen Stellen falsch angezeigt werden (z. B. beim Drucken).

  2. Stellen Sie 'tabstop' und 'shiftwidth' auf das ein, was Sie bevorzugen, und verwenden Sie 'expandtab'. Auf diese Weise fügen Sie immer Leerzeichen ein. Die Formatierung wird niemals durcheinander gebracht, wenn 'tabstop' geändert wird.

  3. Stellen Sie 'tabstop' und 'shiftwidth' auf das ein, was Sie bevorzugen, und verwenden Sie eine | modeline | um diese Werte beim erneuten Bearbeiten der Datei festzulegen. Funktioniert nur, wenn Sie die Datei mit Vim bearbeiten.

  4. Setzen Sie 'tabstop' und 'shiftwidth' immer auf den gleichen Wert und 'noexpandtab'. Dies sollte dann (nur für anfängliche Einrückungen) für alle Tabstop-Einstellungen funktionieren, die von Personen verwendet werden. Es kann jedoch hilfreich sein, Tabulatoren nach dem ersten nicht leeren Leerzeichen als Leerzeichen einzufügen, wenn Sie dies tun. Andernfalls sind ausgerichtete Kommentare falsch, wenn 'tabstop' geändert wird.

Quelle:


+1 für die Erklärung, warum das Setzen von Tabstop! = 8 schlecht sein kann!
Oger Psalm33

3
Das ist großartig, aber Sie sollten beachten, dass dies wörtlich von vimdoc.sourceforge.net/htmldoc/options.html#'tabstop 'oder :help tabstopin vim ist.
Belacqua



6

Zeile
set ts=4
in
~/.vimrcDatei für pro Benutzer
oder
/etc/vimrcDatei für systemweit hinzufügen


2

Mein grundlegendes ~ / .vimrc mit Kommentar:

set number " show line number                                                                                           
set tabstop=2 " set display width of tab; 1 tab = x space with                                                           
set expandtab " transform tab to x space (x is tabstop)                                                               
set autoindent " auto indent; new line with number of space at the beginning same as previous                                                                      
set shiftwidth=2 " number of space append to lines when type >> 

0

Permanent für alle Benutzer (wenn Sie alleine auf dem Server sind):

# echo "set tabstop=4" >> /etc/vim/vimrc

Normalerweise auf einem neuen Server apt-get purge nano mcund allen anderen, um Zeit zu sparen. Andernfalls werden Sie Editor in neu zu definieren git, crontabetc


1
Wenn Sie EDITOR einstellen, werden die meisten Programme dies berücksichtigen.
D. Ben Knoble

@ D.BenKnoble du hast recht. ich habe es versucht. Im Moment spare ich lieber meine Zeit und meine Nerven. Ich kann nicht überprüfen, was genau mit F10in läuft, nanoaber ich mache immer ein paar Tricks mit Speichern (vielleicht F10ist eine Lösung). oder funktioniert es nicht in screen? Ich kann mich nicht erinnern, hasse es einfach)
Vasilii Suricov

sowieso in der Vergangenheit ...
Vasilii Suricov
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.