Vim - Не позволяет фигурным скобкам оставлять метки.

Сложность в том, что данные не являются простым файлом типа CSV, где первая строка - это имена столбцов, а остальные строки - данные столбцов по строкам.

Здесь у вас есть имя_столбца=данные_столбца, разделенные символами ;. Моим решением было бы использование языка типа Python для чтения файла построчно. Я бы создал dict() из каждой строки и пару K:V для каждого поля. Затем я бы добавил этот dict к списку() всех строк.

Получив его, я могу обработать список. Если я нахожусь на первой строке, я выведу имена столбцов, затем значения, в остальных случаях я выведу только значения.

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

Вот быстрый пример на Python, который использует OrderedDicts для сохранения порядка "колонок":

#!/usr/bin/python
''' a quick example of a script to parse '=' delimited fields in 
    ';' delimited columns of a text file.
    prints tab delimited columnar data with headers to STDOUT
'''
from collections import OrderedDict

with open('data', 'rb') as infile:
    FLINES = infile.read().split()

DATA = []
for line in FLINES:
    fields = line.split(';')
    d = OrderedDict()
    for field in fields:
        if '=' in field:
            col, value = field.split('=')
            d.update({col: value})
    DATA.append(d)

L = 0
for D in DATA:
    if L == 0:
        print '\t'.join(D.keys())
    print '\t'.join(D.values())
    L += 1
  • Этот пример предполагает, что все ваши строки будут иметь одинаковые колонки, потому что он будет печатать только имена колонок для первой записи, которую он получит из списка.
1
06.04.2017, 16:17
1 ответ

Вы можете использовать команду keepjumps. Из :h :keepjumps:

                            *:keepj* *:keepjumps*
:keepj[umps] {command}
            Moving around in {command} does not change the |''|,
            |'.| and |'^| marks, the |jumplist| or the
            |changelist|.
            Useful when making a change or inserting text
            automatically and the user doesn't want to go to this
            position.

Итак, в вашем случае вам нужно

nnoremap } :keepjumps normal! }<cr>
nnoremap { :keepjumps normal! {<cr>

Или, если вы хотите, чтобы он работал и в визуальном режиме (что вы, вероятно, делаете):

xnoremap } :<C-u>keepjumps normal! gv}<cr>
xnoremap { :<C-u>keepjumps normal! gv{<cr>
2
27.01.2020, 23:34

Теги

Похожие вопросы