Saya memiliki dataset ini dalam file csv
1.33570301776, 3.61194e-06, 7.24503e-06, -9.91572e-06, 1.25098e-05, 0.0102828, 0.010352, 0.0102677, 0.0103789, 0.00161604, 0.00167978, 0.00159998, 0.00182596, 0.0019804, 0.0133687, 0.010329, 0.00163437, 0.00191202, 0.0134425
1.34538754675, 3.3689e-06, 9.86066e-06, -9.12075e-06, 1.18058e-05, 0.00334344, 0.00342207, 0.00332897, 0.00345504, 0.00165532, 0.00170412, 0.00164234, 0.00441903, 0.00459294, 0.00449357, 0.00339737, 0.00166596, 0.00451926, 0.00455153
1.34808186291, -1.99011e-06, 6.53026e-06, -1.18909e-05, 9.52337e-06, 0.00158065, 0.00166529, 0.0015657, 0.0017022, 0.000740644, 0.00078635, 0.000730052, 0.00219736, 0.00238191, 0.00212762, 0.00163783, 0.000750669, 0.00230171, 0.00217917
Seperti yang Anda lihat, angka-angka diformat secara berbeda dan tidak selaras. Apakah ada cara di vim untuk cepat menyelaraskan kolom dengan benar, sehingga hasilnya adalah ini
1.33570301776, 3.61194e-06, 7.24503e-06, -9.91572e-06, 1.25098e-05, 0.0102828, 0.010352, 0.0102677, 0.0103789, 0.00161604, 0.00167978, 0.00159998, 0.00182596, 0.0019804, 0.0133687, 0.010329, 0.00163437, 0.00191202, 0.0134425
1.34538754675, 3.3689e-06, 9.86066e-06, -9.12075e-06, 1.18058e-05, 0.00334344, 0.00342207, 0.00332897, 0.00345504,0.00165532, 0.00170412, 0.00164234, 0.00441903, 0.00459294, 0.00449357, 0.00339737, 0.00166596, 0.00451926, 0.00455153
1.34808186291, -1.99011e-06, 6.53026e-06, -1.18909e-05, 9.52337e-06, 0.00158065, 0.00166529, 0.0015657, 0.0017022, 0.000740644,0.00078635, 0.000730052,0.00219736, 0.00238191, 0.00212762, 0.00163783, 0.000750669,0.00230171, 0.00217917
Itu bagus untuk menyalin dan menempel bagian dengan ctrl-v. Ada petunjuk?
:%!column -t -s ','
. Ini menghapus koma, jadi mereka bukan file csv teknis lagi. Tetapi mengatur mereka dengan indah, itulah yang saya butuhkan.:'<,'>!column -t
column
seperti yang dijelaskan dalam posting, 3) kemudian ganti pembatas Anda kembali ke spasi. Contoh perintah dalam mode visual untuk langkah # 1 adalah:'<,'>s/"\(\w\+\) \(\w\+\)"/"\1_\2"/g
Terkadang kami ingin menyelaraskan hanya dua kolom. Dalam hal ini, kami tidak memerlukan plugin apa pun dan dapat menggunakan fungsionalitas Vim murni seperti ini:
=
.s/=/= ...spaces... /
dalam pemilihan visual untuk ini.dw
dan gerakan vertikal.Contoh teknik ini ditunjukkan di bawah ini:
Saya tidak menemukan diri saya perlu cukup sering menyelaraskan hal-hal untuk menginstal plugin lain, jadi ini adalah cara pilihan saya untuk mencapainya - terutama yang tidak memerlukan banyak pemikiran.
sumber
:s/=/ =/
itu jauh lebih baik digunakanCtrl + V
untuk memilih kolom kanan, lalu sejajarkan menggunakan<<
dan.
mengulangi. Ditemukan di sini: stackoverflow.com/a/24704379/2152384Seperti yang disarankan sunny256,
column
perintah adalah cara terbaik untuk melakukan ini pada mesin Unix / Linux, tetapi jika Anda ingin melakukannya dalam Vim murni (sehingga dapat digunakan di Windows juga), cara termudah adalah menginstal Align plugin dan kemudian lakukan:Baris pertama menyelaraskan entri pada koma dan yang kedua memindahkan koma sehingga rata dengan nilai sebelumnya. Anda mungkin dapat menggunakan
AlignCtrl
untuk menentukan pemetaan khusus yang melakukan banyak sekaligus, tetapi saya tidak pernah ingat bagaimana menggunakannya ...Edit
Jika Anda tidak keberatan dua spasi di antara entri dan Anda ingin melakukan ini dalam satu perintah, Anda juga dapat melakukan:
sumber
:'<,'>Align &
:%Align! lP0 \s
(l
= rata rata,P0
= 0 padding setelah pemisah).Ini adalah jawaban yang bagus menggunakan makro vim: https://stackoverflow.com/a/8363786/59384 - pada dasarnya, Anda mulai merekam makro, memformat kolom pertama, berhenti merekam lalu ulangi makro untuk semua baris yang tersisa.
Salin / tempel dari jawaban itu:
Catat spasi tunggal setelah 100i, dan <Esc> berarti "tekan keluar" - jangan ketik "<Esc>" secara harfiah.
Terjemahan:
sumber
Juga, Tabularize cukup bagus http://vimcasts.org/episodes/aligning-text-with-tabular-vim/
sumber
Kami sekarang juga memiliki plugin EasyAlign yang luar biasa , ditulis oleh junegunn.
Demonstrasi GIF dari README-nya:
sumber
Anda bisa menggunakan plugin csv.vim .
Namun, ini tidak akan melakukan persis apa yang Anda minta: itu akan benar menyesuaikan konten sel, sedangkan Anda memiliki nilai-nilai Anda selaras dengan titik desimal atau dengan digit pertama.
Plugin ini memiliki banyak perintah berguna lainnya untuk bekerja dengan file CSV.
sumber
juga jika Anda memiliki kolom yang sangat panjang, mungkin berguna untuk menonaktifkan pembungkus standar
(catatan dalam debian Anda juga memiliki opsi lebih lanjut untuk kolom -n yang jika Anda ingin membagi beberapa pembatas yang berdekatan)
sumber
Saya baru saja menulis tablign untuk tujuan ini. Instal dengan
Kemudian cukup tandai tabel dalam vim dan lakukan
sumber
Pertanyaan yang cukup lama, tetapi saya baru-baru ini memanfaatkan plugin vim yang sangat baik yang memungkinkan pemformatan tabel dengan cepat atau setelah-fakta (seperti yang dibutuhkan oleh use case Anda):
https://github.com/dhruvasagar/vim-table-mode
sumber
Berikut jawaban skrip Vim murni, tidak ada plugin, tidak ada makro:
Mungkin paling jelas untuk memulai dengan solusi masalah saya sebagai contoh. Saya memilih baris kode yang ingin saya pengaruhi, kemudian menggunakan perintah berikut (ingat bahwa memasukkan mode perintah dari mode visual secara otomatis menambahkan "“ <, '> ", sehingga ia bertindak pada rentang visual):
Kecuali saya TIDAK benar-benar mengetik "<0d>". Anda dapat memasukkan karakter yang tidak dapat dicetak pada baris perintah dengan menekan ctrl-v, lalu tombol yang ingin Anda ketik. “<0d>” adalah apa yang diberikan pada baris perintah setelah saya mengetik 'ctrl-v enter'. Di sini, ini diuraikan oleh perintah "normal" sebagai keluar dari mode pencarian "/". Kursor kemudian melompat ke "nilai" di baris saat ini.
Kemudian kita cukup [D] menghapus sisa baris, melompat ke kolom 70 (atau apa pun yang Anda butuhkan dalam kasus Anda), dan [P] ut apa yang baru saja kami hapus. Ini berarti kita harus menentukan lebar garis terluas, hingga pencarian kita. Jika Anda belum memasukkan informasi itu di baris status Anda, Anda dapat melihat kolom kursor dengan memasukkan perintah mode normal 'g ctrl-g'. Perhatikan juga bahwa melompat ke kolom yang tidak ada memerlukan pengaturan 'virtualedit'!
Saya membiarkan istilah pencarian untuk perintah: g (lobal) kosong, karena kami menggunakan blok visual dan ingin memengaruhi setiap baris, tetapi Anda dapat berhenti menggunakan pemilihan visual (dan "'<,'>") dan meletakkan istilah pencarian di sana sebagai gantinya. Atau kombinasikan pilihan visual dan istilah pencarian untuk mempersempit sesuatu dengan lebih halus / mudah.
Inilah sesuatu yang saya pelajari baru-baru ini: jika Anda mengacaukan perintah mode perintah kompleks, batalkan dengan 'u' (jika itu mempengaruhi buffer), lalu tekan "q:" untuk memasukkan buffer sejarah perintah khusus yang bertindak seperti buffer konvensional . Edit baris apa saja dan tekan enter, dan perintah yang diubah dimasukkan sebagai perintah baru. Sangat diperlukan jika Anda tidak ingin stres saat memformulasikan semuanya dengan sempurna pertama kali.
sumber
Saya menulis skrip python yang memungkinkan pengguna untuk melakukan kolumisasi pada semua jenis teks juga di luar vim. Tidak yakin apakah ini akan berfungsi untuk pengguna windows atau mac.
intinya columnice.py
Penggunaan saat dalam vim.
Ini akan menggunakan tanda sama dengan sebagai delimeter. Delimeter tidak dibuang begitu saja.
sumber
Saya memiliki ini di .vimrc saya.
Ini meluruskan kolom sambil menjaga koma, yang mungkin diperlukan nanti untuk pembacaan yang benar. Misalnya, dengan Python Pandas
read_csv(..., skipinitialspace=True)
, terima kasih Pandas guys untuk opsi cerdas ini, jika tidak dalam vim%s/,\s\+/,/g
. Mungkin lebih mudah jika Andacolumn
memiliki opsi --output-separator. Saya kira, saya tidak dan saya tidak yakin mengapa (halaman manual saya untuk kolom mengatakan 2004, di ubuntu 18.04, tidak yakin ubuntu akan mendapatkan versi baru) . Bagaimanapun, ini bekerja untuk saya, dan berkomentar jika Anda punya saran.sumber