ฉันจะสร้างและดูแลรักษาตารางได้อย่างไร?


28

นี่คือตารางที่ฉันใช้ในเอกสารบางส่วน:

+---------------+------------------------+---------------------------------------+
| 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           |
+---------------+------------------------+---------------------------------------+

ปัญหาคือว่ามันน่าอึดอัดใจในการแก้ไข; ถ้าฉันเปลี่ยนสิ่งใดสิ่งหนึ่งฉันต้องจัดแนวใหม่ทุกอย่างด้วยตนเองซึ่งเป็น PITA

มีวิธีจัดการที่ง่ายกว่านี้ไหม? ฉันไม่สนใจเกี่ยวกับรูปแบบที่แน่นอนดังกล่าวข้างต้น แต่ต้องการเก็บการตัดคอลัมน์ที่ 3 ...


1
นอกจากนี้ถ้านี่คือ reStructuredText คุณอาจพิจารณาดูlist-table(เมื่อเร็ว ๆ นี้ฉันแปลงตารางจำนวนมากเป็นแบบนี้เพราะตาราง ASCII ยากที่จะรักษาและแตกต่างกันไม่ดี)
ideasman42

คำตอบ:


35

ผมเขียนปลั๊กอิน เป็นกลุ่มตารางโหมด ฉันใช้เวลาสร้างและปรับปรุงสิ่งนี้โดยเฉพาะอย่างยิ่งกับความคิดเห็นของชุมชนและมันก็สำคัญกับกรณีการใช้งานนี้

สั้น ๆ อย่างรวดเร็ว: คุณป้อน 'โหมดตาราง' ด้วย:TableModeEnableคำสั่งจากนั้นคุณสามารถพิมพ์:

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

และ vim-table-mode จะดูแลการจัดตำแหน่งของคุณแบบอัตโนมัติเพื่อให้มันเป็นดังนี้:

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

เมื่อแก้ไขตารางภายหลัง vim-table-mode จะดูแลการจัดตำแหน่งของคุณ

คุณสามารถออกจากโหมดตาราง :TableModeDisable'ด้วย


แกนกลางของมันเกี่ยวกับการสร้างตารางที่จะจัดรูปแบบอัตโนมัติในขณะที่คุณพิมพ์ มันมีการแมปจำนวนมากเพื่อเลื่อนไปมาและจัดการกับตารางเช่นกัน (สิ่งที่มีประโยชน์อย่างยิ่งคือ<Leader>tdcการลบทั้งคอลัมน์) สิ่งที่คุณต้องทำคือเปิดใช้งานโหมดตารางและสิ่งเหล่านี้จะเริ่มขึ้นและคุณสามารถพิมพ์ได้โดยไม่ต้องกังวลเกี่ยวกับการจัดรูปแบบ

มันมีคุณสมบัติมากมายกว่าที่แสดงที่นี่เช่นความสามารถในการจัดแนวคอลัมน์ด้านขวาด้วยคำใบ้เล็กน้อยบนส่วนหัว นอกจากนี้ยังมีเอ็นจิ้นสูตรสเปรดชีตที่เรียบร้อยซึ่งอนุญาตให้หนึ่งในการกำหนดสูตรและดำเนินการคำนวณเช่นเดียวกับสเปรดชีททั่วไป

มันถูกสร้างขึ้นเพื่อให้มีความยืดหยุ่นและกำหนดค่าได้อย่างมากดังนั้นคุณสามารถเปลี่ยนได้หลายแง่มุมของตารางและเส้นขอบที่สร้างขึ้น

ฉันได้สร้าง screencasts สองสามตัวที่พยายามแสดงพลังของมันด้วย ภาพหน้าจอนี้เป็นภาพล่าสุดแต่โปรดทราบว่ามีการปรับปรุงหลายอย่างตั้งแต่นั้นมา


5
ขอบคุณ; ฉันได้แก้ไขคำตอบของคุณเล็กน้อยเพื่อเพิ่มข้อมูลการใช้งานจริง (อ่านได้เล็กน้อยเหมือนโฆษณามาก่อน) ... สิ่งหนึ่งที่ฉันไม่สามารถทำได้ด้วย vim-table-mode คือการตัดคอลัมน์ที่ 3 ตามตัวอย่างในคำถามของฉัน ... เป็นไปได้ไหม
Martin Tournoij

@Carpetsmoker ขอบคุณสำหรับการแก้ไข คุณสามารถห่อมันด้วยตัวเองได้โดยอัตโนมัติ
Dhruva Sagar

6

หากคุณสามารถใช้sedและcolumnโซลูชั่นบรรทัดคำสั่งที่ใกล้จะเป็น:

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

คุณสามารถรวมสิ่งนี้เข้ากับการเลือกด้วยภาพและ'<,'>หรือกับหมายเลขบรรทัด

จุดด้อย:

  • การใช้ประโยชน์และsed columnเสียงเรียกเข้าเป็นเรื่องเล็กน้อย sedคำสั่งอาจจะถูกเปลี่ยนไปเป็นกลุ่ม:substituteคำสั่ง แต่columnเป็นสิ่งสำคัญ
  • ตัวคั่นแถว ( ---...-) ได้รับการบุนวม แต่ฉันมีข้อสงสัยเกี่ยวกับความน่าเชื่อถือ
  • ฉันไม่รู้ว่าพกพา$'\x01'ได้อย่างไร

แหล่งที่มา:


ข้อบกพร่องเล็ก ๆ น้อย ๆ ข้างๆกัน (ซึ่งอาจแก้ไขได้) นี่ดูมีแนวโน้ม ... สิ่งหนึ่งที่ฉันไม่สามารถทำได้คือการตัดคอลัมน์ที่ 3 แม้ว่า: - /
Martin Tournoij

5

หากคุณไม่ต้องการติดตั้งปลั๊กอินใด ๆ และต้องการแก้ไขตารางที่จัดแนวไว้:

- ใช้ในการสร้างVREPLACEgRโหมดเปิดใช้งานโดย

(ตรวจสอบให้แน่ใจว่าคุณมีเวอร์ชันล่าสุดและตรวจสอบว่าคอมไพล์ด้วย+vreplaceคุณสมบัติหรือไม่พิมพ์vim --versionบนเทอร์มินัล)

ป้อนคำอธิบายรูปภาพที่นี่ (สถานะของฉันถูกตั้งค่าให้แสดง REPLACE สำหรับทั้ง REPLACE และโหมด VREPLACE)

หากคุณต้องการทราบข้อมูลเพิ่มเติมเกี่ยวกับการเปลี่ยนและVREPLACEโหมดตรวจสอบบทความนี้


3

ผมได้สร้างเครื่องมือบรรทัดคำสั่งtablignเพื่อจุดประสงค์นี้; มันทำงานได้จากภายในเป็นกลุ่มเช่นกัน เพียงติดตั้งด้วย

[sudo -H] pip3 install tablign

ทำเครื่องหมายตารางเป็นกลุ่มและเรียก

:'<,'>:!tablign

(เป็นกลุ่มเติมอักขระสองสามตัวแรกให้คุณหากคุณทำเครื่องหมายตาราง)

มันยังไม่สามารถทำการแก้ไขความกว้างของคอลัมน์ได้ แต่สามารถเพิ่มได้ถ้าต้องการ

ป้อนคำอธิบายรูปภาพที่นี่

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.