Domanda

Come posso impedire a Vim di sostituire gli spazi con le tabulazioni quando l'indentazione automatica è attiva?

Un esempio:se ho due tabulazioni e 7 spazi all'inizio della riga, e tabstop=3, e premo Invio, la riga successiva ha quattro tabulazioni e 1 spazio all'inizio, ma non voglio che...

È stato utile?

Soluzione

Forse è una buona idea non utilizzare affatto le schede.

:set expandtab

Se vuoi sostituire tutte le schede nel tuo file in 3 spazi (che sembreranno abbastanza simili a tabstop=3):

:%s/^I/   /

(Dove ^I è il TAB carattere)

Dalla guida in linea di VIM:

'tabstop' 'ts'      number  (default 8)
        local to buffer
Number of spaces that a <Tab> in the file counts for.  Also see
|:retab| command, and 'softtabstop' option.

Note: Setting 'tabstop' to any other value than 8 can make your file
appear wrong in many places (e.g., when printing it).

There are four main ways to use tabs in Vim:
1. Always keep 'tabstop' at 8, set 'softtabstop' and 'shiftwidth' to 4
   (or 3 or whatever you prefer) and use 'noexpandtab'.  Then Vim
   will use a mix of tabs and spaces, but typing <Tab> and <BS> will
   behave like a tab appears every 4 (or 3) characters.
2. Set 'tabstop' and 'shiftwidth' to whatever you prefer and use
   'expandtab'.  This way you will always insert spaces.  The
   formatting will never be messed up when 'tabstop' is changed.
3. Set 'tabstop' and 'shiftwidth' to whatever you prefer and use a
   |modeline| to set these values when editing the file again.  Only
   works when using Vim to edit the file.
4. Always set 'tabstop' and 'shiftwidth' to the same value, and
   'noexpandtab'.  This should then work (for initial indents only)
   for any tabstop setting that people use.  It might be nice to have
   tabs after the first non-blank inserted as spaces if you do this
   though.  Otherwise aligned comments will be wrong when 'tabstop' is
   changed.

Altri suggerimenti

tutto ciò che voglio è che la riga con rientro automatico abbia esattamente gli stessi caratteri di rientro della riga precedente.

:help copyindent

'copia indent' 'ci' booleano (disattivato per impostazione predefinita);locale nel buffer;{non in Vi}

Copia la struttura del rientro delle linee esistenti quando si autoindetta una nuova linea.Normalmente il nuovo rientro viene ricostruito da una serie di schede seguite da spazi come richiesto (a meno che 'expandtab' è abilitato, nel qual caso vengono utilizzati solo spazi).Abilitare questa opzione fa copiare la nuova linea qualunque caratteri siano stati utilizzati per rientrare nella riga esistente.Se il nuovo rientro è maggiore rispetto alla linea esistente, lo spazio rimanente viene riempito nel modo normale.

NOTA: 'copia indent' viene ripristinato quando 'compatibile' è impostato.
Vedi anche 'preservare l'indentazione'.

:help preserveindent

'preservare l'indentazione' 'pi' booleano (disattivato per impostazione predefinita);locale nel buffer;{non in Vi}

Quando si cambia il rientro della linea attuale, conservare il più possibile la struttura di rientro.Normalmente il rientro viene sostituito da una serie di schede seguite da spazi come richiesto (a meno che 'expandtab' è abilitato, nel qual caso vengono utilizzati solo spazi).Abilitare questa opzione significa che il rientro preserverà il maggior numero possibile di caratteri esistenti per il rientro e aggiungerà solo ulteriori schede o spazi necessari.

NOTA:Quando si utilizza ">>" più volte, il rientro risultante è un mix di schede e spazi.Potrebbe non piacerti.
NOTA: 'preservare l'indentazione' viene ripristinato quando 'compatibile' è impostato.
Vedi anche 'copia indent'.
Usa :retab per ripulire lo spazio bianco.

Puoi convertire tutto TAB A SPACE

:set et
:ret!

o converti tutto SPACE A TAB

:set et!
:ret!

Ecco parte del mio .vimrc:

set autoindent
set expandtab
set softtabstop=4
set shiftwidth=4

Questo funziona bene per me perché non voglio assolutamente le schede nel mio codice sorgente.Dalla tua domanda sembra che tu voglia mantenere due tabulazioni e sette spazi nella riga successiva, e non sono sicuro che ci sia un modo per insegnare a Vim ad adattarsi a quello stile.

Forse il fondo di questo può aiutarti?

Il vi standard interpreta letteralmente il tasto tab, ma esistono alternative popolari derivate da vi che sono più intelligenti, come vim.Per fare in modo che vim interpreti la tabulazione come un comando "indent" invece che un comando insert-a-tab, fai questo:

set softtabstop=2

Se vuoi sostituire tutte le tabulazioni con spazi in base all'impostazione di 'ts', puoi usare :retab.Può anche fare il contrario.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top