GNU/Linux >> Linux Esercitazione >  >> Linux

Come posso convertire gli spazi in schede in Vim o Linux?

1 - Se hai spazi e vuoi schede.

Innanzitutto, devi decidere quanti spazi avrà una singola scheda. Detto questo, supponiamo di avere linee con 4 spazi iniziali o 8... Allora ti rendi conto che probabilmente vuoi che una tabulazione sia composta da 4 spazi. Ora con queste informazioni, fai:

:set ts=4
:set noet
:%retab!

C'è un problema qui! Questa sequenza di comandi cercherà tutto il testo, non solo gli spazi all'inizio della riga. Ciò significa una stringa come:"Hey,␣this␣␣␣␣is␣4␣spaces" diventerà "Hey,␣this⇥is␣4␣spaces" , ma non lo è! è una scheda!.

Per risolvere questo piccolo problema consiglio un search , invece di retab .

:%s/^\(^I*\)␣␣␣␣/\1^I/g

Questa ricerca cercherà nell'intero file qualsiasi riga che inizi con qualsiasi numero di tabulazioni, seguito da 4 spazi, e la sostituirà con qualsiasi numero di tabulazioni trovate più uno.

Questo, sfortunatamente, non funzionerà subito!

All'inizio, il file avrà righe che iniziano con spazi. La ricerca convertirà quindi solo i primi 4 spazi in una tabulazione e consentirà quanto segue...

Devi ripetere il comando. Quante volte? Finché non ottieni un pattern not found . Non riesco ancora a pensare a un modo per automatizzare il processo. Ma se lo fai:

`[email protected]:`

Probabilmente hai finito. Questo comando ripete l'ultima ricerca/sostituzione per 10 volte. Non è probabile che il tuo programma abbia così tanti rientri. In caso affermativo, ripeti di nuovo @@ .

Ora, solo per completare la risposta. So che hai chiesto il contrario, ma non sai mai quando devi annullare le cose.

2 - Hai schede e vuoi spazi.

Per prima cosa, decidi in quanti spazi vuoi convertire le tue schede. Diciamo che vuoi che ogni scheda sia composta da 2 spazi. Quindi fai:

:set ts=2
:set et
:%retab!

Questo avrebbe lo stesso problema con le stringhe. Ma poiché il suo stile di programmazione migliore è non utilizzare schede rigide all'interno delle stringhe, in realtà stai facendo una buona cosa qui. Se hai davvero bisogno di una tabulazione all'interno di una stringa, usa \t .


Utilizzo di Vim per espandere tutti i inizi spazi (più larghi di 'tabstop' ), hai fatto bene a usare retab ma prima assicurati 'expandtab' viene reimpostato (:verbose set ts? et? È tuo amico). retab accetta un intervallo , quindi di solito specifico % significa "l'intero file".

:set tabstop=2      " To match the sample file
:set noexpandtab    " Use tabs, not spaces
:%retab!            " Retabulate the whole file

Prima di fare qualcosa di simile (in particolare con i file Python!), di solito imposto 'list' , in modo che io possa vedere lo spazio bianco e il cambiamento.

Ho la seguente mappatura nel mio .vimrc per questo:

nnoremap    <F2> :<C-U>setlocal lcs=tab:>-,trail:-,eol:$ list! list? <CR>

Linux
  1. Come configuro Vim come editor predefinito su Linux

  2. Come impostare o modificare il nome host del sistema in Linux

  3. Come configurare le jail chroot di Linux

  4. Come impostare la variabile $ Path in Linux

  5. Come puoi scambiare i tasti j e k in vim?

Come mostrare i numeri di riga in Vim / Vi

Come impostare la pianificazione dei torrent su Linux

Come convertire in batch file PDF su Linux

Come impostare o modificare il nome host su Linux

Come convertire una pagina Web in PDF in Linux

Converti le schede in spazi nel terminale Linux con il comando Espandi