Ridefinisci la scheda come 4 spazi


1096

La mia impostazione attuale prevede 8 spazi; come potrei ridefinirlo?


4
Meglio ancora, impostalo
solid_liq

7
@ heinrich5991 Non capisco. Non ho bisogno di 8 spazi per rendermi conto che una riga è rientrata, e più del necessario significa limitare i caratteri che puoi visualizzare su una lunga riga di testo (almeno prima del wrapping). Ma a ciascuno il suo. :)
weberc2,

40
@ heinrich5991 La mia tesi è "usa il meno possibile per identificare prontamente una riga rientrata". Secondo la mia stima, la capacità di identificare facilmente un rientro diminuisce rapidamente in <3 spazi e smette di aumentare in 4 spazi. Pertanto, nella mia esperienza, il rientro che supera i 4 spazi è uno spreco.
weberc2,

7
@ weberc2 Non potrei essere più d'accordo, amico. Ecco perché mi sento così dannatamente claustrofobico leggendo Ruby o "JavaScript moderno", ognuno dei quali usa 2 spazi per il rientro. Mi dà legittimamente tensione agli occhi quando provo a seguire strutture fortemente annidate. Schede difficili per la dannata vittoria.

Risposte:


1617

Dipende da cosa intendi. Vuoi che i caratteri di tabulazione effettivi nel tuo file appaiano di 4 spazi, oppure per "tab" intendi effettivamente un rientro , generato premendo il tasto tab, che comporterebbe il file che contiene letteralmente (fino a) 4 caratteri di spazio per ogni "tab" che scrivi?

A seconda della risposta, una delle seguenti serie di impostazioni dovrebbe funzionare per te:

  • Per i caratteri di tabulazione che appaiono di 4 spazi :

    set tabstop=4
    

    Se stai usando il carattere di tabulazione reale nel tuo codice sorgente probabilmente vorrai anche queste impostazioni (queste sono in realtà le impostazioni predefinite, ma potresti volerle impostare in modo difensivo):

    set softtabstop=0 noexpandtab
    

    Infine, se si desidera che un rientro corrisponda a una singola scheda, è necessario utilizzare anche:

    set shiftwidth=4
    
  • Per i rientri costituiti da 4 caratteri spaziali ma immessi con il tasto Tab:

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

Per rendere permanenti le impostazioni di cui sopra, aggiungi queste righe al tuo vimrc .

Nel caso in cui sia necessario apportare modifiche o desideri semplicemente comprendere il significato di tutte queste opzioni, ecco una ripartizione del significato di ciascuna opzione:

tabstop

La larghezza di un tabstop duro misurata in "spazi" - effettivamente la larghezza (massima) di un carattere di tabulazione reale.

shiftwidth

La dimensione di un "rientro". Viene anche misurato in spazi, quindi se la tua base di codice rientra con i caratteri di tabulazione allora vuoi shiftwidthuguagliare il numero di caratteri di tabulazione volte tabstop. Questo è usato anche da cose come la =, >e <comandi.

softtabstop

Impostandolo su un valore diverso da zero tabstop, il tasto tab (in modalità insert) inserirà una combinazione di spazi (e possibilmente tab) per simulare i punti di tabulazione a questa larghezza.

expandtab

Abilitando questo, il tasto tab (in modalità insert) inserirà spazi anziché caratteri di tabulazione. Ciò influisce anche sul comportamento del retabcomando.

smarttab

Abilitando questo, il tasto tab (in modalità insert) inserirà spazi o tab per passare al rientro successivo del tabstop successivo quando il cursore si trova all'inizio di una riga (ovvero gli unici caratteri precedenti sono spazi bianchi).

Per maggiori dettagli su uno di questi vedere in vim (es. ):help 'optionname':help 'tabstop'


18
È anche importante assicurarsi che i Makefile utilizzino sempre caratteri di tabulazione rigidi, altrimenti le build falliranno! Ho mostrato come, su stackoverflow.com/questions/234564/…
Shervin Emami,

30
@Undefined Ecco le impostazioni del sistema vim. ~/.vimrcsono le impostazioni vim dell'utente. Molte persone lasciano da sole le impostazioni di sistema e modificano solo le impostazioni dell'utente. Nota che ~/.vimrcnon esisterà fino a quando non lo creerai sulla maggior parte dei sistemi.
Laurence Gonsalves

4
Gli utenti di Vim prendono nota della set softtabstop=4funzione! Sono stanco di provare a leggere il tuo codice con less, o con qualsiasi altro editor tranne vim, solo per vedere un rientro bizzarro perché hai ridefinito il tab in un numero arbitrario di spazi (anche se il resto del sistema pensa diversamente)! :-)
Ogre Salmo33,

6
Qualcuno può aiutarmi a capire perché questa risposta dice di usare tabstop=8per i rientri che consistono in 4 spazi? Non sono riuscito a capire il motivo dopo aver letto le descrizioni delle varie impostazioni. Un'altra risposta dice di usare il tabstop=4che ha un po 'più senso per me.
Kodos Johnson,

5
@KodosJohnson L' tabstopopzione controlla la larghezza di un carattere di tabulazione. Se si desidera che i trattini a consistono di 4 caratteri di spazio, piuttosto che i caratteri di tabulazione singoli che sono di larghezza 4, allora la larghezza del carattere di tabulazione non importa - sorta di . In pratica, probabilmente vuoi che la larghezza del tuo carattere di tabulazione sia diversa dalla larghezza dei rientri, al fine di ridurre la possibilità che i caratteri di tabulazione si mascherino come rientri propri. ( list+ expandtabpuò essere d'aiuto anche qui) Inoltre, le schede a 8 caratteri sono "lo standard": il tuo terminale, Python e molti altri strumenti utilizzano come impostazione predefinita a 8 caratteri.
Laurence Gonsalves il

747

Per definirlo su base permanente per l'utente corrente, creare (o modificare) il .vimrcfile:

$ vim ~/.vimrc

Quindi, incolla la configurazione seguente nel file. Una volta riavviato vim, verranno applicate le impostazioni della scheda.

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

Se non hai ~ / .vimrc, prova con / etc / vim / vimrc. Nel mio caso su Ubuntu 16.04 il file di configurazione è lì. Ma tieni presente che la modifica di questo file comporta l'utilizzo globale della configurazione.
Todor Todorov,

5
Ancora una cosa, usa :retabper convertire esistenti tabin spaces. vim.wikia.com/wiki/Converting_tabs_to_spaces
DawnSong

57

o scorciatoia per vim modeline:

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

28

Esistono poche impostazioni che definiscono se utilizzare spazi o schede.

Quindi qui ci sono utili funzioni che possono essere definite nel tuo ~/.vimrcfile:

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

Uso:

:call UseTabs()
:call UseSpaces()

Per utilizzarlo per estensioni di file, è possibile utilizzare la seguente sintassi (aggiunta a .vimrc):

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

Vedi anche: Conversione di schede in spazi .


Ecco un altro frammento di Wikia che può essere utilizzato per alternare tra schede e spazi :

" 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

Consente di utilizzare 4 spazi per ogni scheda e una mappatura F9per attivare / disattivare le impostazioni.


27

Ho copiato e incollato questo nel mio file .vimrc:

" size of a hard tabstop
set tabstop=4

" always uses spaces instead of tab characters
set expandtab

" size of an "indent"
set shiftwidth=4

Le prime 2 impostazioni indicano che quando premo Tab ottengo 4 spazi. La terza impostazione significa che quando lo faccio V>(cioè visivo e rientro) ottengo anche 4 spazi.

Non esaustivo come la risposta accettata, ma potrebbe aiutare le persone che vogliono semplicemente copiare e incollare qualcosa.


14

Inserisci le impostazioni desiderate nel file ~ / .vimrc - Vedi sotto per alcune linee guida e le migliori pratiche.

Esistono quattro modi principali per utilizzare le schede in Vim:

  1. Tieni sempre "tabstop" su 8, imposta "softtabstop" e "shiftwidth" su 4 (o 3 o quello che preferisci) e usa "noexpandtab". Quindi Vim utilizzerà una combinazione di schede e spazi, ma digitando e si comporterà come una scheda appare ogni 4 (o 3) caratteri.

    Nota: l' impostazione di "tabstop" su un valore diverso da 8 può far apparire il file errato in molti punti (ad esempio, durante la stampa).

  2. Imposta 'tabstop' e 'shiftwidth' su quello che preferisci e usa 'expandtab'. In questo modo inserirai sempre spazi. La formattazione non verrà mai incasinata quando si cambia 'tabstop'.

  3. Imposta 'tabstop' e 'shiftwidth' su quello che preferisci e usa una | modeline | per impostare questi valori quando si modifica nuovamente il file. Funziona solo quando si utilizza Vim per modificare il file.

  4. Impostare sempre "tabstop" e "shiftwidth" sullo stesso valore e "noexpandtab". Questo dovrebbe quindi funzionare (solo per i rientri iniziali) per qualsiasi impostazione di tabstop utilizzata dalle persone. Tuttavia, potrebbe essere utile avere schede dopo il primo non vuoto inserite come spazi. Altrimenti i commenti allineati saranno errati quando si cambia 'tabstop'.

Fonte:


+1 per spiegare perché impostare tabstop! = 8 può essere negativo!
Ogre Salmo33,

3
Questo è fantastico, ma dovresti notare che questo è letteralmente da vimdoc.sourceforge.net/htmldoc/options.html#'tabstop 'o :help tabstopin vim.
Belacqua,



6

Aggiungi riga
set ts=4
nel
~/.vimrcfile per utente
o
/etc/vimrcfile per tutto il sistema


2

Il mio ~ / .vimrc di base con commento:

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

Permanente per tutti gli utenti (quando sei solo sul server):

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

Normalmente su un nuovo server apt-get purge nano mce tutti gli altri per risparmiare tempo. Altrimenti ridefinirai l'editor git, crontabecc


1
Se si imposta EDITOR, la maggior parte dei programmi lo rispetterà.
D. Ben Knoble,

@ D.BenKnoble hai ragione. ho provato. per ora preferisco risparmiare tempo e nervi. non riesco a controllare esattamente cosa funziona con F10in nanoma faccio sempre qualche trucco con il salvataggio (forse F10è una soluzione). o non funziona screen? Non ricordo, lo odio e basta)
Vasilii Suricov il

comunque in passato ...
Vasilii Suricov
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.