Come columnizzare il testo con le schede (in vim o sulla shell)


6

Ho una frequente necessità di manipolare manualmente il testo delimitato da tabulazioni per l'inserimento di dati e altri scopi. Quando faccio questo, aiuta se il testo è allineato correttamente in colonne. Ad esempio (assumendo le schede a 4 spazi):

# original format
abcdefghijklmnop    field2
abcdefgh    field2
abcdefghijkl    field2

# ideal format
abcdefghijklmnop    field2
abcdefgh            field2
abcdefghijkl        field2

Conosco molto bene l'uso di column utilità per la colonna di testo in questo modo, ma il problema è che utilizza spazi per allineare le colonne, e in particolare ho bisogno di schede. Questo requisito sembra anche escludere il plug-in Tabularize.

C'è un modo in cui posso columnizzare il testo con le schede in modo specifico, sia all'interno vim o al guscio? Sembra che potrei essere in grado di farlo groff / tbl, ma sinceramente preferisco parlarne a mano piuttosto che confondere quello ....

Risposte:


5

Il csv.vim - Un plugin di tipo file per i file csv supporta anche i file delimitati da tabulazioni e ha :ArrangeColumn e :UnArrangeColumn comandi per quello


Questo sembra davvero molto promettente. Darò un'occhiata e torno da te. Grazie!
kine

Non ho ancora provato questo, ma ho intenzione di contrassegnarlo come la risposta accettata in base alla documentazione del plug-in, e il fatto che l'unica altra risposta utile è stata scritta da te in ogni caso. Saluti.
kine

Se vuoi cambiare i colori, i colori fg sono hardcoded in macvim. github.com/b4winckler/macvim/blob/master/src/...
Nick

una sorta di esempio documentato della sintassi da usare sarebbe d'aiuto, dato che nessuno esiste sulla pagina github per quel plugin.
Ryan Tuck

5

Imposta le dimensioni di visualizzazione della scheda su un valore superiore al tuo campo più lungo.

# original format
abcdefghijklmnop<Tab>field2
abcdefgh<Tab>field2
abcdefghijkl<Tab>field2
I have spaces!<Tab>field2

In Vim,

:echo len("abcdefghijklmnop") " Reports 16
:set noexpandtab tabstop=17

Probabilmente puoi condensare questo a un comando, ma non so come. Se stai utilizzando un Vim moderno, :set list indicherà le schede rigide con un carattere di fantasia (che puoi anche configurare). Altrimenti si mostreranno come ^I (non quello che vuoi) o spazio bianco.

# displays like this
abcdefghijklmnop>field2
abcdefgh>        field2
abcdefghijkl>    field2
I have spaces!>  field2

MODIFICARE: Un esempio da un vero e proprio vim!


1

Quando hai allineato correttamente la tabella (con il menzionato Tabularize o l'alternativa Allineare plugin), è quindi possibile convertire gli spazi in schede con i seguenti comandi:

:%retab!
:%substitute/ \+/\t/g

Il primo comando sostituisce il rientro con le schede laddove possibile senza modificare le larghezze (questo presuppone che tu abbia :set noexpandtab ), il secondo quindi trasforma gli spazi rimanenti in tabstops (più grandi).


Immagino che funzionerà, ma solo se posso essere assolutamente certo che non ci siano spazi all'interno dei campi stessi. Altrimenti, non sono sicuro di come sarebbe in grado di distinguere tra gli spazi all'interno di un campo e quelli colonnari rimasti :retab. Accetterò questa risposta se nessuno ha una soluzione più ideale.
kine

L'allineamento iniziale non gestiva gli spazi all'interno dei campi, nemmeno (ma si allineano anche su di essi). Se possiedi tali dati, probabilmente dovresti sostituire temporaneamente quegli spazi interni.
Ingo Karkat


-1

Le colonne separate da tabulazioni funzionano solo quando il programma utilizzato per visualizzarle è in grado di espandere / ridurre i caratteri di tabulazione per onorarne il significato effettivo. Vim, e credo che la maggior parte degli altri editor di testo, non sia in grado di utilizzare tabulazioni per la tabulazione perché le schede hanno un'unica larghezza fissa. Vim può utilizzare un mix di schede e spazi per ottenere risultati approssimativamente simili, ma quello che otterresti ovviamente non sarà più separato da tabulazioni.

Dovresti convertire tutti i mix di tabulazioni / spazi in schede singole su ogni scrittura.

In breve, un editor di testo semplice non è probabilmente lo strumento giusto per il lavoro.


"le schede hanno una larghezza fissa singola" Non vero. Vedi la mia risposta. Molti altri editor hanno schede configurabili come wel.
Cheezmeister
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.