5

Vim имеет аккуратный плагин Tabular, который позволяет быстро выровнять текст. Я часто использую его для выравнивания блоков кода по определенному символу (в основном такие вещи, как = и =>). Но это также делает очень хорошую работу за специальными столами. Учитывая что-то вроде

|Name|Rank|No.|
|Stan Ridgway|Private First Class|8797|
|John Rambo|Private|889897|
|George S. Patton|General|0879797|

это легко сделать так:

| Name             | Rank                | No.     |
| Stan Ridgway     | Private First Class | 8797    |
| John Rambo       | Private             | 889897  |
| George S. Patton | General             | 0879797 |

Выберите его (или просто поместите курсор на первую строку), затем выполните :Tabularize /| ,

В настоящее время я пытаюсь немного перекрестно опылять Emacs и Vi, воровать с обеих сторон, искать подходящие плагины и т.д., Я бы хотел сделать то же самое в Emacs. Теперь, для вышеупомянутого материала =/=> align работает очень хорошо, и даже делает большинство вещей довольно автоматически.

А для более сложных вещей есть align-regexp . Я бы осмелился предположить, что, вероятно, дело только в том, чтобы получить правильное регулярное выражение для подачи на него (вероятно, в расширенной версии с префиксом C-u ).

Есть предложения в этом направлении или другие функции / пакеты?

2 ответа2

5

Введите Mx orgtbl-mode , затем Cc Cc

| Name             | Rank                |     No. |
| Stan Ridgway     | Private First Class |    8797 |
| John Rambo       | Private             |  889897 |
| George S. Patton | General             | 0879797 |
3
C-u M-x align-regexp \(\s-*\)| RET RET 0 RET y

Что касается регулярного выражения: \(\s-*\) там по умолчанию, так что вам нужно всего лишь набрать |
Относительно 0: это означает отсутствие дополнительного завершающего пробела, то есть: |longest-field-in-column|

Цитирование из команд выравнивания

Repeating align-regexp

Arguably, for daily use, it’s better to define some adhoc align command, e.g.

  (defun align-repeat (start end regexp)
    "Repeat alignment with respect to 
     the given regular expression."
    (interactive "r\nsAlign regexp: ")
    (align-regexp start end 
        (concat "\\(\\s-*\\)" regexp) 1 1 t))

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .