Eliminare la "scheda" espansa nello spazio in Vim con un solo tasto?


19

Modifica il codice Python con Vim.

Con la tabchiave ottengo quattro spazi inseriti per il rientro. Come posso eliminare quegli spazi con un tratto "Backspace" (?) - anziché quattro?

Ci deve essere qualche opzione "set" per quello ...

Ecco il mio .vimrc:

set autoindent
set ts=4
set sw=4
set et

Risposte:


23

È possibile utilizzare Ctrl+Dper eseguire il backup di una tabulazione. Questo effettivamente sposta l'intera riga a sinistra di una tabulazione; Ctrl+Tfa la stessa cosa a destra. Si noti che questi tasti funzionano solo in modalità Inserisci (utilizzare <<e >>per l'equivalente in modalità Comando).


30
set softtabstop=4

10
IMO questo è esattamente ciò che l'OP ha richiesto. Merita più voti.
Ludwig Weinzierl,

2
Questa è la risposta corretta
mk12

1
Non lo sapevo e questo era esattamente quello che stavo cercando. +1
NigoroJr

5

tl; dr: set tabstop=4 softtabstop=-1 shiftwidth=0 expandtab

forma breve: set ts=4 sts=-1 sw=0 et

Spiegazione

Se imposti softtabstop(o sts) su, -1si comporterà automaticamente come tabstop( ts), il che ti risparmierà un po 'di fastidio se cambi molto le tabulazioni. Setting shiftwidth( sw) su 0dovrebbe effettivamente rendere lo stesso tabstopanche.

In dettaglio

shiftwidth sw

Numero di spazi da utilizzare per ogni passaggio del rientro (automatico). Usato per cindent, >>, <<, ecc
Quando lo zero l' tabstopverrà utilizzato il valore.

tabstop ts

Numero di spazi per i quali a nel file conta. Vedi anche : comando retab e softtabstopopzione.

softtabstop sts

Numero di spazi per i quali viene Tabconteggiato durante l'esecuzione di operazioni di modifica, come l'inserimento Tabo l'utilizzo di BS. Si sente come se Tabs vengono inseriti, mentre in realtà sono utilizzati un mix di spazi e s. Ciò è utile per mantenere l' tabsimpostazione is al suo valore standard, pur essendo in grado di modificare come è impostato su sts. Quando stsè negativo, shiftwidthviene utilizzato il valore di . Questo ti risparmierà una seccatura se cambi molto i tabstops. Quando expandtabnon è impostato, il numero di spazi è ridotto a icona usando Tabs.

expandtab et

In modalità Inserisci: utilizzare il numero appropriato di spazi per inserire a. Gli spazi sono utilizzati in incastri con la >e <comandi e quando autoindentè acceso. Per inserire una scheda reale quando expandtabè attiva, utilizzare Ctrl- V Tab. Vedi anche : retab


Bene, uso vim da anni ma l'eredità delle m / m / d non ha mai attirato la mia attenzione.
Timss

2

Ho scritto GreedyBackspace.vim per qualcuno che voleva qualcosa del genere. Non lo uso personalmente, quindi è da un po 'che non lo aggiorno. Non ho ricevuto segnalazioni di bug di recente, però.


1

Diverse opzioni:

  1. È possibile "rietichettare" tutti gli spazi bianchi in modo che vengano sostituiti con schede. In questo modo potrebbero essere facilmente eliminati.
  2. Potresti (questo non è testato, quindi sto solo proponendo idee qui) creare una funzione che "esegui in modalità normale 4 volte il tasto backspace. Quindi mappalo su qualcosa. Tuttavia, non ha modo di sapere se eliminerà gli spazi o alcuni caratteri importanti, quindi questo è potenzialmente pericoloso.
  3. '4X' cancellerà gli ultimi 4 caratteri (che è X grande, non piccolo, uno piccolo agirà come il tasto Canc '.

0

il modo più semplice è <<ripetere con a.


Ciao e benvenuto su superutente. Anche se sono d'accordo che la tua risposta sia un utente vi. La tua risposta è breve, non spiega perché suggerisci ciò che stai suggerendo e perché non stai suggerendo qualcosa che si adatta alla domanda posta.
Mogget

-1

Hai verificato utilizzando l' impostazione di espansione delle schede nel tuo VIM?

:set noet

Di solito preferisco tenere le schede attive mentre si lavora sui file.
Quando è necessario, rimpiazzo le schede in 4 spazi o in quanti ne sono necessari.

:%s/<ctrl+V><tab>/    /g
                  ----

Come piccolo bonus, il tuo file sorgente è più corto di 3 caratteri per scheda :-)


oh, ho et perché devo espandere le schede - penso - perché il codice che modifico inizialmente è stato scritto in quel modo. ora sto solo seguendo quella convenzione.
Evgeny,

Potresti ancora fare quello che dico e ripristinare gli spazi alla fine (quando devi restituire il file al repository)
nik

Forse potresti avere una funzione vim che li espande in schede in apertura e li fa collassare in spazi in chiusura? Qualcuno ha qualche idea?
sixtyfootersdude,

Questa è una risposta davvero inutile: riapre inutilmente il dibattito tab-vs-space, senza effettivamente fornire alcuna informazione utile.
Dietrich Epp,

-2

Non penso che ci sia un modo. Una volta che il tasto tab viene espanso in quattro spazi, vim non ha modo di sapere che sono mai stati un tab.


4
-1: mancanza di immaginazione.
sixtyfootersdude,
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.