переформатировать в vim для хорошего расположения колонок - PullRequest
113 голосов
/ 05 августа 2009

У меня есть этот набор данных в CSV-файле

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

Как видите, числа отформатированы по-разному и выровнены неправильно. Есть ли способ в vim, чтобы быстро выровнять столбцы правильно, чтобы в результате это

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

Было бы здорово скопировать и вставить разделы с помощью ctrl-v. Есть намеки?

Ответы [ 12 ]

0 голосов
/ 16 июня 2019

Вот простой ответ сценария Vim, без плагинов, без макросов:

Возможно, было бы наиболее ясно начать с решения моей проблемы в качестве примера. Я выбрал строки кода, на которые хотел повлиять, затем использовал следующую команду (напомним, что при переходе в командный режим из визуального режима автоматически добавляется «<, '>», поэтому он действует на визуальный диапазон):

:'<,'>g``normal / "value<0d>D70|P`

За исключением того, что я на самом деле НЕ печатал «<0d>». Вы можете ввести непечатаемые символы в командной строке, нажав Ctrl-V, а затем клавишу, которую вы хотите ввести. «<0d>» - это то, что отображается в командной строке после того, как я набрал «ctrl-v enter». Здесь он анализируется командой «normal» как выход из режима поиска «/». Затем курсор переходит на «значение» в текущей строке.

Затем мы просто [D] выбираем оставшуюся часть строки, переходим к столбцу 70 (или к тому, что вам нужно в вашем случае) и удаляем то, что мы только что удалили. Это означает, что мы должны определить ширину самой широкой строки, вплоть до нашего поиска. Если вы не поместили эту информацию в строку состояния, вы можете увидеть столбец курсора, введя команду обычного режима «g ctrl-g». Также обратите внимание, что для перехода к несуществующему столбцу требуется настройка «virtualedit»!

Я оставил поисковый запрос для команды: g (lobal) пустым, поскольку мы использовали визуальный блок и хотели повлиять на каждую строку, но вы можете прекратить использование визуального выделения (и «<, '>» ) и вместо этого поместите поисковый запрос. Или объедините визуальный выбор и поисковый запрос, чтобы более точно / легко сузить круг.

Вот что я недавно узнал: если вы запутались в сложной команде командного режима, отмените с помощью «u» (если это повлияло на буфер), затем нажмите «q:», чтобы войти в специальный буфер истории команд, который работает так же, как обычный буфер. Отредактируйте любую строку и нажмите ввод, и измененная команда вводится как новая команда. Незаменим, если вы не хотите в первый раз подчеркивать, что все правильно сформулировано.

0 голосов
/ 06 февраля 2015

Я написал скрипт на python, который позволяет пользователям в основном оцифровывать текст любого типа, кроме vim Не уверен, что это будет работать для пользователей Windows или Mac.

columnice.py gist

Использование в vim.

:'<,'>!columnice =

При этом в качестве разделителя будет использоваться знак равенства. Делимер не выбрасывается.

...