2009-08-30 10 views
30

Utilizzo di Vim 6.0. Dire che sto modificando questo file:Come ordinare le colonne numeriche e letterali in Vim

sdfsdg 
dfgdfg 

34  12 
2  4 
45  1 
34  5 

Come si ordina la seconda colonna?

+1

correlati, se il secondo (o terzo, quarto ...) colonna è la prima colonna con un numero decimale, si noti che si potrebbe usare semplicemente ': sort n', come dice l'aiuto:" Con [n] ... l'ordinamento viene fatto sul primo numero decimale nella riga. .. "Questo non si applica al tuo caso, ma potrebbe essere di qualcun altro. – Rabarberski

risposta

35

Se si dispone di shell decente disponibile, selezionare i numeri ed eseguire il comando

:'<,'>!sort -n -k 2 

se si digita intenzione di questo in modalità visiva, dopo aver digitato il colon, i marcatori '<,'> sarà appead automaticamente, e dovrai solo digitare il resto.

Questo tipo di comandi (: [motion]!) È chiamato filtering. Potete saperne di più consultando l'aiuto di vim:

:h filter 
+0

un esempio di questo per favore: '<,'>! Sort -n -k 2? – vehomzzz

+0

Ho anche un errore: E20: Mark non è impostato – vehomzzz

+4

Questo è un comando in modalità visuale - Pavel usa 'V' per selezionare un intervallo, quindi digita': ', che inserisce automaticamente l'intervallo di selezione visiva' '<,'> ', e poi digitato il comando attuale '! sort -n -k 2'. Ovviamente puoi specificare il range in qualsiasi modo - vedi ': help range' se sei curioso. – Cascabel

29

Ordina tutte le linee sulla seconda colonna N utilizzando Vim sort di comando, ad esempio,

:sort /.*\%2v/ 

Riferimento: vimtips.txt

+5

Wow, vim ha una procedura di smistamento interna! Quanto è grande quel bastardo ?! –

+0

Nessun comando di ordinamento in vim 6.0 :( – vehomzzz

+0

Qualsiasi motivo per cui non è possibile aggiornare? Vim.org dice che 7.2 è l'ultima versione stabile. –

15

Per vim7 vorrei andare per:

:sort n /.*\s/ 

Ciò ordinare i numeri ignorando testo corrispondente dato regexp. Nel tuo caso è la seconda colonna.

11

ordine di 2a colonna selezionandolo in modo visivo (es controllo + v), quindi eseguire:

!sort 

o per ordinare terza colonna

sort -k 3 

o

:sort /.*\%3v/ 

In alternativa, selezionare le linee che si desidera ordinare utilizzando il comando Shift + V. Quindi immettere

!sort -k 3n 

o utilizzare il codice qui sotto per dire a Vim di saltare le prime due parole in ogni linea e ordinare su qualsiasi seguente:

:%sort /^\S\+\s\+\S\+\s\+/ 

o IE ordina per 8 linea:

:sort /.*\%55v/ 

La specifica 'virtuale' è il numero assoluto di colonne, che considera spazi + tab come carattere singolo (in breve, non conta le tabulazioni come otto spazi),

modo per ordinare in base all'ultima colonna:

:%sort /\<\S\+\>$/ r 
+0

Questa dovrebbe essere la risposta. 'sort!' è bello pure. – firedev

Problemi correlati