Saya telah menerima data yang dicatat dalam file teks yang hanya satu garis panjang dengan setiap nilai dipisahkan oleh spasi. Apakah ada perintah atau set perintah yang akan membagi satu baris menjadi beberapa baris?
11
Saya telah menerima data yang dicatat dalam file teks yang hanya satu garis panjang dengan setiap nilai dipisahkan oleh spasi. Apakah ada perintah atau set perintah yang akan membagi satu baris menjadi beberapa baris?
Anda bisa mengganti ruang berurutan di baris dengan baris baru menggunakan perintah :s/\s\+/\r/g
. \s\+
berarti satu atau lebih karakter spasi putih, dan \r
merupakan baris baru, lihat :help :substitute
dan :help regexp
untuk detailnya. Jika Anda menjalankan perintah pada baris seperti:
foo bar baz
Anda mendapatkan:
foo
bar
baz
Jika Anda telah hlsearch
mengaktifkan dan Anda tidak ingin mengacaukan layar Anda dengan spasi yang disorot di mana-mana, Anda dapat menulis sedikit fungsi seperti berikut untuk menghindarinya:
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
, lihat:help s/\r
. Itu bisa digantikan oleh pengetikan baris baru literal<c-v><cr>
. Dalam konteks ini\n
adalah karakter nol, lihat:help s/\n
.replaces the content of the register
- register yang mana?Menggunakan
vim
substitusi mungkin merupakan salah satu cara yang lebih baik untuk menyelesaikan tugas Anda, tetapi Anda dapat menggunakan makro juga. Misalkan kita memiliki data berikut, dengan kursor di suatu tempat di baris 1:Mulai dalam mode normal, memukul qqakan mulai merekam panggilan makro melalui @q. Apa pun yang diketik setelahnya qqakan dapat diulang melalui panggilan yang disebutkan di atas. Tujuan kami adalah merekam perintah normal yang cukup umum untuk memungkinkan pengulangan yang mulus.
Jadi, kita dapat mengetik 0untuk membawa kursor ke awal baris, lalu fspaceuntuk memindahkan kursor ke spasi pertama. Ini memungkinkan kita untuk mengetik renter, menghasilkan:
Memukul qsekarang adalah ide yang bagus karena makro kami yang dapat digunakan kembali siap untuk diulang. Agak sewenang-wenang, kami perhatikan bahwa ada 4 ruang tersisa untuk diganti dengan baris baru. Jadi dengan menekan,, 4@qkami mengulangi
q
makro 4 kali menghasilkan:Perhatikan bahwa karena cara kami mengatur makro, akan lebih aman untuk mengulangi perintah lebih dari 9000 kali, karena itu hanya akan mempengaruhi baris saat ini, dan karena tidak ada ruang di sebelah kanan entri data terakhir, fspaceakankah 'baik' gagal, mencegah data diganti dengan baris baru.
Jadi untuk mengulang dari awal:
qq0fspacerenterq9001@q
memberikan hasil kami.
sumber
9001
kunci di papan ketik untuk mengetik nama pengguna dengan cepat.Cara termudah yang saya temukan untuk memisahkan garis dalam Vim adalah perintah mode normal
gq
(ketikkan kedua huruf dalam suksesi cepat dalam mode normal atau visual).Dalam mode visual, itu akan membagi apa pun yang dipilih, dalam mode normal, Anda mengikuti
gq
dengan gerakan.Misalnya,
gql
akan membagi satu baris dengan lebar yang saat ini ditetapkan. Untuk mengatur lebar garis pemisah menjadi berbeda dari pengaturan Anda saat ini, Anda dapat menggunakan:set textwidth=n
, di manan
jumlah karakter yang Anda inginkan dalam sebuah garis, misalnya,10
dan mengubah kembali ke lebar normal Anda ketika Anda selesai.Dapatkan informasi ini dari video Youtube oleh Kholidfu yang menunjukkan cara bergabung dan membagi garis dalam mode normal menggunakan gerakan.
sumber