Risposte:
Puoi semplicemente sostituire qualsiasi spazio consecutivo sulla linea con una nuova riga usando il comando :s/\s\+/\r/g
. \s\+
significa uno o più caratteri di spazi bianchi, ed \r
è una nuova riga, vedere :help :substitute
e :help regexp
per i dettagli. Se si esegue il comando su una riga come:
foo bar baz
Ottieni:
foo
bar
baz
Se hai hlsearch
abilitato e non vuoi ingombrare lo schermo con spazi evidenziati ovunque, puoi scrivere una piccola funzione come la seguente per evitarlo:
function! SplitLineNicely()
" Save previous value of last search register
let saved_last_search_pattern = @/
" :substitute replaces the content of the search register with the `\s\+`
" pattern highlighting all whitespaces in the file
substitute /\s\+/\r/g
" Restore previous search register
let @/ = saved_last_search_pattern
endfunction
\r
, vedi :help s/\r
. Potrebbe essere sostituito da una letterale newline digitando <c-v><cr>
. In questo contesto \n
è un carattere null, vedi :help s/\n
.
replaces the content of the register
- quale registro?
L'uso vim
della sostituzione è probabilmente uno dei modi migliori per realizzare il tuo compito, ma puoi anche usare una macro. Supponiamo di avere i seguenti dati, con il cursore da qualche parte sulla linea 1:
1 a b c d e f
~
A partire dalla modalità normale, il colpo qqinizierà a registrare una macro richiamabile tramite @q. Qualunque cosa digitata dopo qqsarà ripetibile tramite la suddetta chiamata. Il nostro obiettivo è registrare i normali comandi che saranno abbastanza generali da consentire una ripetizione senza interruzioni.
Pertanto, possiamo digitare 0per portare il cursore all'inizio della linea, quindi fspaceper spostare il cursore sul primo spazio. Questo ci consente quindi di digitare renter, risultando in:
1 a
2 b c d e f
~
Colpire qora è una buona idea in quanto la nostra macro riutilizzabile è pronta per la ripetizione. Un po 'arbitrariamente, notiamo che ci sono 4 spazi da sostituire con le nuove righe. Quindi, premendo, 4@qripetiamo la q
macro 4 volte risultando in:
1 a
2 b
3 c
4 d
5 e
6 f
~
Si noti che a causa del modo in cui abbiamo istituito la macro, sarebbe stato sicuro per ripetere il comando oltre 9000 volte, in quanto inciderebbe solo la riga corrente, e dal momento che non c'erano gli spazi per la destra dell'ultimo immissione dei dati, fspacelo farà "ben" fallisce, impedendo che i dati vengano sostituiti con nuove righe.
Quindi, per ripetere dall'inizio:
qq0fspacerenterq9001@q
fornisce il nostro risultato.
9001
tasto sulla tastiera per digitare velocemente il tuo nome utente.
Il modo più semplice che ho trovato per dividere le linee in Vim è il comando in modalità normale gq
(digitare entrambe le lettere in rapida successione in modalità normale o visiva).
In modalità visiva, dividerà tutto ciò che è selezionato, in modalità normale, segui gq
con un movimento.
Ad esempio, gql
dividerà una riga per la larghezza attualmente impostata. Per impostare la larghezza delle linee di divisione in modo che sia diversa dall'impostazione corrente, è possibile utilizzare :set textwidth=n
, dove si n
trova il numero di caratteri che si desidera in una linea, ad esempio, 10
e tornare alla larghezza normale al termine.
Ho ottenuto queste informazioni da un video Youtube di Kholidfu che mostra come unire e dividere le linee in modalità normale usando un movimento.