2009-08-04 9 views
99

Tôi có tập dữ liệu này trong một tập tin csvđịnh dạng lại trong vim cho một bố trí cột đẹp

1.33570301776, 3.61194e-06, 7.24503e-06, -9.91572e-06, 1.25098e-05, 0.0102828, 0.010352, 0.0102677, 0.0103789, 0.00161604, 0.00167978, 0.00159998, 0.00182596, 0.0019804, 0.0133687, 0.010329, 0.00163437, 0.00191202, 0.0134425 
1.34538754675, 3.3689e-06, 9.86066e-06, -9.12075e-06, 1.18058e-05, 0.00334344, 0.00342207, 0.00332897, 0.00345504, 0.00165532, 0.00170412, 0.00164234, 0.00441903, 0.00459294, 0.00449357, 0.00339737, 0.00166596, 0.00451926, 0.00455153 
1.34808186291, -1.99011e-06, 6.53026e-06, -1.18909e-05, 9.52337e-06, 0.00158065, 0.00166529, 0.0015657, 0.0017022, 0.000740644, 0.00078635, 0.000730052, 0.00219736, 0.00238191, 0.00212762, 0.00163783, 0.000750669, 0.00230171, 0.00217917 

Như bạn có thể thấy, những con số được định dạng khác nhau và lệch. Có cách nào trong vim để nhanh chóng căn chỉnh các cột đúng cách, do đó kết quả là

1.33570301776, 3.61194e-06, 7.24503e-06, -9.91572e-06, 1.25098e-05, 0.0102828, 0.010352, 0.0102677, 0.0103789, 0.00161604, 0.00167978, 0.00159998, 0.00182596, 0.0019804, 0.0133687, 0.010329, 0.00163437, 0.00191202, 0.0134425 
1.34538754675, 3.3689e-06, 9.86066e-06, -9.12075e-06, 1.18058e-05, 0.00334344, 0.00342207, 0.00332897, 0.00345504,0.00165532, 0.00170412, 0.00164234, 0.00441903, 0.00459294, 0.00449357, 0.00339737, 0.00166596, 0.00451926, 0.00455153 
1.34808186291, -1.99011e-06, 6.53026e-06, -1.18909e-05, 9.52337e-06, 0.00158065, 0.00166529, 0.0015657, 0.0017022, 0.000740644,0.00078635, 0.000730052,0.00219736, 0.00238191, 0.00212762, 0.00163783, 0.000750669,0.00230171, 0.00217917 

Điều đó sẽ rất tuyệt vời để sao chép và dán các phần bằng ctrl-v. Bất kỳ gợi ý nào?

Trả lời

215

Nếu bạn đang ở trên một số loại UNIX (Linux, vv), bạn có thể lừa dối và lọc nó qua cột (1) lệnh:

:%!column -t 
+1

mát lệnh, tôi đã không nhận thức được nó (đã viết kịch bản tùy chỉnh perl để làm điều đó loại hoạt động trong quá khứ). – hlovdal

+0

Để kiểm soát nhiều hơn, tôi chèn các tab (có thể là một biểu tượng không sử dụng) trong tệp để đánh dấu các cột bằng cách thay thế, và sau đó chạy:%!cột -t -s "^ I" để lập bảng (Cv, tab chèn một ký tự tab chữ -^I) –

+14

Bởi vì các tệp của tôi không có khoảng trống, tôi phải sử dụng ':%! column -t -s ',' '. Nó loại bỏ dấu phẩy, vì vậy chúng không phải là tệp csv kỹ thuật nữa. Nhưng sắp xếp chúng thật đẹp, đó là những gì tôi cần. – Eduardo

24

Như sunny256 đề nghị, lệnh column là một tuyệt vời Cách thực hiện điều này trên các máy Unix/Linux, nhưng nếu bạn muốn thực hiện nó trong Vim thuần túy (để nó có thể được sử dụng trong Windows), cách dễ nhất là cài đặt plugin Align và sau đó thực hiện:

:%Align , 
:%s/\(\s\+\),\s/,\1/g 

Dòng đầu tiên căn chỉnh các mục nhập trên dấu phẩy và lần thứ hai di chuyển e dấu phẩy để nó tuôn ra với giá trị trước đó. Bạn có thể sử dụng AlignCtrl để xác định một ánh xạ tùy chỉnh mà không toàn bộ rất nhiều trong một đi, nhưng tôi không bao giờ có thể nhớ làm thế nào để sử dụng nó ...

Sửa

Nếu bạn không nhớ hai không gian giữa các mục và bạn muốn làm điều này trong một lệnh, bạn cũng có thể làm:

:%Align ,\zs 
+0

Hoạt động hoàn hảo trong Bảng LaTeX: ': '<,'> Căn chỉnh &' – Thomas

+0

Nó cũng có thể hoàn thành với':% Căn chỉnh! lP0 \ s' ('l' = căn trái,' P0' = 0 đệm sau dấu tách). – ntd

1

còn nếu bạn có các cột rất dài nó có thể được tiện dụng để vô hiệu hóa mặc định gói

 
:set nowrap 
:%!column -t 

(lưu ý trong debian bạn cũng có một tùy chọn thêm cho cột -n mà nếu bạn muốn chia nhiều delimiters liền kề)

2

Bạn có thể sử dụng các plugin csv.vim.

:%ArrangeColumn 

Tuy nhiên, điều này sẽ không thực hiện chính xác những gì bạn đã hỏi: nó sẽ điều chỉnh đúng nội dung ô, trong khi bạn có giá trị được căn chỉnh bằng dấu thập phân hoặc chữ số đầu tiên.

Plugin có nhiều lệnh hữu ích khác để làm việc với tệp CSV.

6

Đây là câu trả lời tuyệt vời khi sử dụng macro vim: https://stackoverflow.com/a/8363786/59384 - về cơ bản, bạn bắt đầu ghi macro, định dạng cột đầu tiên, dừng ghi rồi lặp lại macro cho tất cả các dòng còn lại.

Copy/dán từ câu trả lời rằng:

qa0f:w100i <Esc>19|[email protected] 

Lưu ý các dấu cách trống sau khi 100i, và có nghĩa là "báo chí thoát" - không gõ "" theo nghĩa đen.

dịch:

qa   -- record macro in hotkey a 
0   -- go to beginning of line 
f:   -- go to first : symbol 
w   -- go to next non-space character after the symbol 
100i <Esc> -- insert 100 spaces 
19|  -- go to 19th column (value 19 figured out manually) 
dw   -- delete spaces until : symbol 
j   -- go to next line 
q   -- stop recording macro 
[email protected]  -- run the macro 4 times (for the remaining 4 lines) 
0

tôi đã viết kịch bản python cho phép người dùng về cơ bản columize bất kỳ loại văn bản cũng bên ngoài của vim. Không chắc chắn nếu điều này sẽ làm việc cho windows hoặc mac người dùng.

columnice.py gist

Cách sử dụng khi in vim.

:'<,'>!columnice = 

Điều này sẽ sử dụng dấu bằng như dấu phân cách. Các delimeter không được vứt bỏ mặc dù.

41

Đôi khi, chúng tôi chỉ muốn căn chỉnh hai cột. Trong trường hợp đó, chúng tôi không cần bất kỳ plugin nào và có thể sử dụng chức năng Vim thuần túy như sau:

  1. Chọn dấu phân cách. Trong bài đăng của OP, đây là dấu phẩy, trong ví dụ của tôi là =.
  2. Thêm dấu cách trước/sau dấu cách. Tôi sử dụng s/=/= ...spaces... / trong lựa chọn trực quan cho việc này.
  3. Định vị đến từ dài nhất và đặt con trỏ sau chữ đó.
  4. Xóa tất cả khoảng trắng thừa bằng cách sử dụng dw và chuyển động dọc.

Ví dụ về kỹ thuật này đã chứng minh dưới đây:

Example

Tôi không thấy mình cần phải sắp xếp mọi thứ thường xuyên đủ để cài đặt plugin khác, vì vậy đây là cách ưa thích của tôi hoàn thành nó - đặc biệt rằng nó không đòi hỏi nhiều suy nghĩ.

+3

Bạn đã tạo ra gif đẹp như thế nào? –

+1

http://blog.bahraniapps.com/gifcam/ thật không may, có vẻ như đó là công cụ chỉ dành cho Windows. –

+0

Khi bạn hoàn thành việc căn chỉnh phần trên, làm thế nào bạn di chuyển con trỏ đến giữa màn hình và sau đó bắt đầu căn chỉnh phần dưới? – cychoi

1

Khá câu hỏi cũ, nhưng tôi vừa mới availed bản thân mình của một plugin vim tuyệt vời cho phép bảng định dạng của chúng khi đang bay hoặc sau-the-thực tế (như trường hợp sử dụng của bạn yêu cầu):

https://github.com/dhruvasagar/vim-table-mode

1

Bây giờ chúng tôi cũng có plugin tuyệt vời EasyAlign, được viết bởi junegunn.

diễn GIF từ README của nó:

0

tôi chỉ viết tablify cho mục đích này. Cài đặt với

[sudo -H] pip3 install tablify 

Sau đó chỉ cần đánh dấu các bảng trong vim và làm

:'<,'>:!tablify 

enter image description here