Bagaimana saya bisa dengan mudah membuat dan memelihara tabel?

28

Ini adalah (bagian dari) tabel yang saya gunakan dalam beberapa dokumentasi:

+---------------+------------------------+---------------------------------------+
| TASK NAME     | WHEN                   | DESCRIPTION                           |
+---------------+------------------------+---------------------------------------+
| db:seed       | On every update        | Data required for the application to  |
|               |                        | run; you should always be able to     |
|               |                        | safely execute this multiple times    |
|               |                        | for an update.                        |
| db:truncate   | Manually (dangerous!)  | TRUNCATE all tables but postal_codes  |
| postal_codes  | Once                   | Load the postal_codes table           |
+---------------+------------------------+---------------------------------------+

Masalahnya adalah ini sangat canggung untuk diedit; jika saya mengubah satu hal, saya perlu (secara manual) menyelaraskan kembali semuanya, yang merupakan PITA

Apakah ada cara yang lebih mudah untuk mengelola ini? Saya tidak peduli dengan tata letak yang tepat di atas, tetapi ingin tetap membungkus kolom ke-3 ...

Martin Tournoij
sumber
1
Selain itu, jika ini adalah teks terstruktur, Anda dapat mempertimbangkan untuk melihat list-table(baru-baru ini saya mengonversi banyak tabel menjadi ini, karena tabel ascii sulit untuk dipelihara dan berbeda dengan buruk)
ideasman42

Jawaban:

35

Saya adalah penulis plugin vim-table-mode . Saya telah menghabiskan cukup banyak waktu untuk membangun & meningkatkan ini, terutama dengan umpan balik dari masyarakat dan tepat untuk kasus penggunaan ini.

Mulai cepat singkat: Anda memasukkan 'mode tabel' dengan :TableModeEnableperintah, Anda kemudian cukup mengetik:

||
| MOVIE | QUOTE|
||
| Blade Runner | Like tears in the rain |
| Monty Python's quest for the holy grail | Are you suggesting that coconuts migrate? |
||

Dan vim-table-mode akan secara otomatis mengatur perataan untuk Anda saat bepergian, sehingga akan terlihat seperti:

|-----------------------------------------+-------------------------------------------|
| MOVIE                                   | QUOTE                                     |
|-----------------------------------------+-------------------------------------------|
| Blade Runner                            | Like tears in the rain                    |
| Monty Python's quest for the holy grail | Are you suggesting that coconuts migrate? |
|-----------------------------------------+-------------------------------------------|

Saat mengedit tabel nanti, vim-table-mode juga akan mengatur perataan untuk Anda.

Anda dapat meninggalkan 'mode tabel' dengan :TableModeDisable.


Intinya adalah tentang membuat tabel dengan mudah yang akan diformat secara otomatis saat Anda mengetik. Ini menawarkan banyak pemetaan untuk bergerak dan memanipulasi tabel juga (yang sangat berguna adalah <Leader>tdcmenghapus seluruh kolom). Yang harus Anda lakukan adalah mengaktifkan mode tabel dan ini akan muncul dan Anda bisa langsung mengetik tanpa khawatir tentang pemformatan.

Ini memiliki lebih banyak fitur daripada yang ditampilkan di sini, seperti kemampuan untuk meluruskan kolom dengan sedikit petunjuk pada header. Ini juga memiliki mesin formula spreadsheet yang rapi yang memungkinkan seseorang untuk mendefinisikan formula & melakukan perhitungan seperti yang dilakukan spreadsheet biasa.

Ini dibangun agar sangat fleksibel & dapat dikonfigurasi sehingga Anda dapat mengubah beberapa aspek dari tabel & perbatasan yang dibuat.

Saya juga telah membuat beberapa screencast yang mencoba memamerkan kekuatannya. Screencast ini adalah yang terbaru , tetapi harap dicatat bahwa ada banyak perbaikan sejak itu.

Dhruva Sagar
sumber
5
Terima kasih; Saya telah mengedit jawaban Anda sedikit untuk menambahkan beberapa informasi penggunaan praktis (itu membaca sedikit seperti iklan sebelumnya) ... Satu hal yang saya tidak dapat lakukan dengan vim-table-mode adalah membungkus kolom ke-3 seperti pada contoh di pertanyaan saya ... Apakah ini mungkin?
Martin Tournoij
@Carpetsmoker terima kasih untuk hasil editnya. Anda dapat membungkusnya secara manual, tidak ada cara untuk melakukannya secara otomatis.
Dhruva Sagar
6

Jika Anda dapat menggunakan seddan column, solusi baris perintah yang akan muncul adalah:

!sed 's/[- ]*\([+|]\)/'$'\x01''\1/g' | column -ts $'\x01' | sed '/^[-+ ]*$/s/ /-/g'

Anda dapat menggabungkan ini dengan pemilihan visual dan '<,'>atau dengan nomor baris.

Cons:

  • Penggunaan seddan column. Vim bersifat insidental. The sedperintah mungkin dapat diubah untuk vim :substituteperintah, tetapi columnsangat penting.
  • Pemisah baris ( ---...-) menjadi empuk, tapi saya curiga keandalannya.
  • Saya tidak tahu seberapa portabel $'\x01'itu.

Sumber:

muru
sumber
Selain gangguan minor (yang mungkin bisa diperbaiki), ini terlihat menjanjikan ... Satu hal yang tidak bisa saya lakukan adalah membungkus kolom ke-3: - /
Martin Tournoij
5

Jika Anda tidak ingin menginstal plugin apa pun dan Anda ingin mengedit tabel yang menjaga perataan:

- Gunakan mode VREPLACE bawaan , diaktifkan oleh gR.

(Pastikan Anda memiliki versi terbaru vim, dan periksa apakah itu dikompilasi dengan +vreplacefitur, ketikkan vim --versionpada terminal)

masukkan deskripsi gambar di sini (status saya diatur untuk menampilkan REPLACE untuk mode REPLACE dan VREPLACE)

Jika Anda ingin tahu lebih banyak tentang mode REPLACE dan VREPLACE , periksa artikel ini .

rossijonas
sumber
3

Saya telah membuat alat baris perintah tablign untuk tujuan ini; itu bekerja dari dalam vim juga. Cukup instal dengan

[sudo -H] pip3 install tablign

tandai tabel dalam vim dan panggilan

:'<,'>:!tablign

(vim mengisi beberapa karakter pertama untuk Anda jika Anda telah menandai tabel.)

Itu tidak dapat melakukan lebar kolom tetap, tapi itu bisa ditambahkan jika perlu.

masukkan deskripsi gambar di sini

Nico Schlömer
sumber