Configuración (o modo * simple *) para editar columnas separadas por tabulaciones


7

Estoy buscando una configuración integrada o un modo simple para ver y editar columnas separadas por tabulaciones (archivos TSV).

Todo lo que necesito es que el texto TSV se muestre de una manera que respete la alineación vertical de las columnas y la alineación horizontal de las filas. Si se pudiera cambiar el ajuste de línea, sería dulce, pero secundario.

La búsqueda de visualización de columnas en emacs se dificulta por el hecho de que la palabra "columna" ya tiene un significado diferente en Emacs.

(Especifiqué " simple " para desalentar respuestas como la vista de columna del modo org. Por el momento, mis necesidades son extremadamente simples, y no quiero lidiar con la instalación, carga y aprendizaje sobre un modo monstruo como org.)


3
No necesita aprender todas las funciones que ofrece el modo org solo para ver un archivo en vista de columna.
nispio

No es una respuesta, pero tal vez útil como un consejo general: Hay un comando integrado para conmutar al ajuste de líneas: toggle-truncate-lines.
itsjeyd

55
Es posible que desee mirar csv-modeen ELPA. Es compatible con la configuración de un carácter separador diferente de ,.
Vamsi

@Vamsi, considere publicar csv-modecomo respuesta.
Jordon Biondo

Respuestas:


7

Esto debería darle la oportunidad de probar las tablas Org sin prácticamente ninguna curva de aprendizaje. Coloque el siguiente código en su archivo de inicio y ejecútelo:

(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)

Ahora, desde un archivo TSV puede presionar C-c |y su tabla se convertirá en una tabla Org. (Con C-u C-c |esto también funcionará para un archivo CSV). Una vez que haya terminado de editar la tabla Org, presione C-x C-sy la tabla Org se convertirá nuevamente en TSV y se guardará nuevamente en el archivo original.


Esto funciona muy bien para mesas pequeñas. Sin embargo, tal vez debido a la forma en que org-modetrata las tablas, las cosas comienzan a tener una respuesta lenta y retrasada cuando las tablas tienen aproximadamente 1000 filas y 10 columnas para mi caso.
biocyberman
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.