Usando o Emacs align-regexp para formatar tabelas

5

O Vim tem o plug-in Tabular que permite alinhar rapidamente algum texto. Eu uso muito para alinhar blocos de código ao longo de um determinado caractere (principalmente coisas como = e => ). Mas também faz um ótimo trabalho em tabelas ad-hoc. Dado algo como

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

é fácil fazê-lo acabar assim:

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

Selecione (ou simplesmente coloque o cursor na primeira linha), então execute :Tabularize /| .

Como estou atualmente tentando polinizar o Emacs e o Vi um pouco, roubando dos dois lados, procurando por plugins compatíveis, etc., eu gostaria de fazer o mesmo no Emacs. Agora, para o acima mencionado = / => stuff, align funciona muito bem e até faz a maioria das coisas de forma bastante automagica.

E para as coisas mais complicadas, há align-regexp . Eu diria que provavelmente seja apenas a questão de obter o regexp correto para alimentá-lo (provavelmente na versão estendida C-u prefixada).

Alguma sugestão nesta direção ou outras funções / pacotes?

    
por mhd 20.07.2012 / 23:20

2 respostas

5

Digite M-x orgtbl-mode , então C-c C-c

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

Em relação à regexp: \(\s-*\) está lá por padrão, então você só precisa digitar |
Em relação ao 0 : significa nenhum espaço extra, por exemplo: |longest-field-in-column|

Citações de Comandos de alinhamento

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))
    
por 21.07.2012 / 01:25

Tags