Jak mogę łatwo tworzyć i utrzymywać tabele?

28

Oto (część) tabela, której używam w niektórych dokumentacjach:

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

Problem polega na tym, że edytowanie jest bardzo niewygodne; jeśli zmienię jedną rzecz, muszę (ręcznie) ponownie wyrównać wszystko, co jest PITA

Czy są na to łatwiejsze sposoby? Nie dbam o dokładny powyższy układ jako taki, ale chciałbym zachować zawijanie trzeciej kolumny ...

Martin Tournoij
źródło
1
Na marginesie, jeśli jest to reStructuredText, możesz rozważyć przyjrzenie się list-table(ostatnio przekonwertowałem na to wiele tabel, ponieważ tabele ascii są trudne w utrzymaniu i słabo się
różnią

Odpowiedzi:

35

Jestem autorem wtyczki vim-table-mode . Spędziłem sporo czasu na budowaniu i ulepszaniu tego, szczególnie z opiniami społeczności i dotyczy to dokładnie tego przypadku użycia.

Krótki szybki start: wchodzisz w „tryb tabeli” za pomocą :TableModeEnablepolecenia, a następnie możesz po prostu wpisać:

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

Tryb vim-table automatycznie zadba o wyrównanie w locie, dzięki czemu będzie wyglądać jak:

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

Podczas późniejszej edycji tabeli tryb vim-table zajmie się również wyrównaniem.

Możesz wyjść z „trybu tabeli” za pomocą :TableModeDisable.


Jego trzon polega na łatwym tworzeniu tabel, które będą automatycznie formatowane podczas pisania. Oferuje wiele mapowań do poruszania się i manipulowania tabelami (szczególnie przydatne jest <Leader>tdcusunięcie całej kolumny). Wszystko, co musisz zrobić, to włączyć tryb tabeli, a one się uruchomią i możesz po prostu pisać bez obawy o formatowanie.

Ma o wiele więcej funkcji niż pokazano tutaj, takich jak możliwość wyrównywania kolumn z małą wskazówką na nagłówku. Ma także zgrabny silnik formuł arkusza kalkulacyjnego, który pozwala definiować formuły i wykonywać obliczenia jak zwykły arkusz kalkulacyjny.

Jest zbudowany tak, aby był wyjątkowo elastyczny i konfigurowalny, dzięki czemu możesz zmieniać kilka aspektów tworzonych tabel i ramek.

Stworzyłem też kilka screencastów, próbując pokazać jego moce. Ten screencast jest najnowszy , ale od tego czasu wprowadzono wiele ulepszeń.

Dhruva Sagar
źródło
5
Dzięki; Zmodyfikowałem nieco twoją odpowiedź, aby dodać praktyczne informacje o użytkowaniu (czytało to trochę jak reklamę wcześniej) ... Jedną z rzeczy, których nie byłem w stanie zrobić w trybie tabeli vim, jest zawijanie trzeciej kolumny jak w przykładzie w moim pytaniu ... Czy to możliwe?
Martin Tournoij,
@Carpetsmoker dzięki za edycję. Możesz owinąć go ręcznie, nie ma sposobu, aby to zrobić automatycznie.
Dhruva Sagar,
6

Jeśli możesz użyć sedi column, rozwiązaniem wiersza polecenia, które się zbliży, byłoby:

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

Możesz to połączyć z selekcją wizualną '<,'>lub z numerami linii.

Cons:

  • Używa sedi column. Vim jest przypadkowy. Te sedpolecenia można prawdopodobnie zmieniony na vim :substitutepoleceń, ale columnma zasadnicze znaczenie.
  • Separatory wierszy ( ---...-) są wypełnione, ale mam podejrzenia co do ich niezawodności.
  • Nie wiem, jak przenośny $'\x01'jest.

Źródła:

muru
źródło
Pomijając drobne usterki (które prawdopodobnie można naprawić), wygląda to obiecująco ...
Jedyne,
5

Jeśli nie chcesz instalować żadnych wtyczek i chcesz edytować tabele zachowując wyrównanie:

- użyj wbudowanego trybu VREPLACE , aktywowanego przez gR.

(Upewnij się, że masz najnowszą wersję vima i sprawdź, czy jest ona skompilowana z +vreplacefunkcją, pisząc vim --versionna terminalu)

wprowadź opis zdjęcia tutaj (moja linia statusu jest ustawiona tak, aby wyświetlać WYMIANA zarówno dla trybów WYMIANA, jak i VREPLACE)

Jeśli chcesz dowiedzieć się więcej o trybach REPLACE i VREPLACE , zapoznaj się z tym artykułem .

rossijonas
źródło
3

W tym celu stworzyłem tablign narzędzia wiersza poleceń ; działa również z poziomu vima. Po prostu zainstaluj za pomocą

[sudo -H] pip3 install tablign

zaznacz tabelę w vimie i zadzwoń

:'<,'>:!tablign

(vim wypełnia kilka pierwszych znaków, jeśli zaznaczyłeś tabelę).

Nie można jeszcze ustalić stałych szerokości kolumn, ale można je dodać, jeśli zajdzie taka potrzeba.

wprowadź opis zdjęcia tutaj

Nico Schlömer
źródło