Configuração (ou modo * simples *) para editar colunas separadas por tabulação

7

Estou procurando por uma configuração interna ou um modo simples para visualizar e editar colunas separadas por tabulação (arquivos TSV).

Tudo o que preciso é que o texto TSV seja exibido de uma maneira que respeite o alinhamento vertical das colunas e o alinhamento horizontal das linhas. Se a quebra de linha pudesse ser alternada, seria ótimo, mas secundário.

A pesquisa da visualização de colunas no emacs é dificultada pelo fato de a palavra "coluna" já ter um significado diferente no Emacs.

(Especifiquei " simple " para desencorajar respostas como a visualização em coluna do modo org. No momento, minhas necessidades são extremamente simples e não quero continuar instalando, carregando e aprendendo sobre um modo monstro como org.)

kjo
fonte
3
Você não precisa aprender todos os recursos que o modo organizacional oferece apenas para exibir um arquivo no modo de coluna.
Nispio 10/10
Não é uma resposta, mas talvez útil como uma dica geral: Há um built-in comando para alternar quebra de linha: toggle-truncate-lines.
itsjeyd
5
Você pode querer olhar no csv-modeELPA. Ele suporta a configuração de um caractere separador diferente de ,.
Vamsi
@Vamsi, considere postar csv-modecomo resposta.
Jordon Biondo 24/03

Respostas:

7

Isso deve lhe dar a chance de experimentar as tabelas organizacionais praticamente sem curva de aprendizado. Coloque o seguinte código no seu arquivo init e execute-o:

(defun my-export-to-parent ()
  "Exports the table in the current buffer back to its parent DSV file and
    then closes this buffer."
  (let ((buf (current-buffer)))
    (org-table-export parent-file export-func)
    (set-buffer-modified-p nil)
    (switch-to-buffer (find-file parent-file))
    (kill-buffer buf)))

(defun my-edit-dsv-as-orgtbl (&optional arg)
  "Convet the current DSV buffer into an org table in a separate file. Saving
    the table will convert it back to DSV and jump back to the original file"
  (interactive "P")
  (let* ((buf (current-buffer))
         (file (buffer-file-name buf))
         (txt (substring-no-properties (buffer-string)))
         (org-buf (find-file-noselect (concat (buffer-name) ".org"))))
    (save-buffer)
    (with-current-buffer org-buf
      (erase-buffer)
      (insert txt)
      (org-table-convert-region 1 (buffer-end 1) arg)
      (setq-local parent-file file)
      (cond 
       ((equal arg '(4)) (setq-local export-func "orgtbl-to-csv"))
       ((equal arg '(16)) (setq-local export-func "orgtbl-to-tsv"))
       (t (setq-local export-func "orgtbl-to-tsv")))
      (add-hook 'after-save-hook 'my-export-to-parent nil t))
    (switch-to-buffer org-buf)
    (kill-buffer buf)))

;; Open the current TSV file as an Org table
(global-set-key (kbd "C-c |") 'my-edit-dsv-as-orgtbl)

Agora, a partir de um arquivo TSV, você pode pressionar C-c |e sua tabela será convertida em uma tabela Org. (Com C-u C-c |isso, também funcionará para um arquivo CSV.) Quando terminar de editar a tabela Org, pressione C-x C-se a tabela Org será convertida novamente em TSV e salva no arquivo original.

nispio
fonte
Isso funciona muito bem para pequenas mesas. No entanto, talvez devido à maneira como org-modelida com as tabelas, as coisas começam a ficar lentas e com respostas defasadas quando as tabelas têm cerca de 1000 linhas e 10 colunas para o meu caso.
biocyberman