LINUX.ORG.RU

vim - как хитро выделить колонку

 , ,


0

2

Допустим, у меня есть блок кода:

user = Table(
    "user",
    metadata,
    Column("id", Integer, primary_key=True),
    Column("email", String, nullable=False),
    Column("username", String, nullable=False),
    Column("registered_at", TIMESTAMP, default=datetime.utcnow),
    Column("role_id", Integer, ForeignKey(role.c.id)),
    Column("hashed_password", String, nullable=False),
    Column("is_active", Boolean, default=True, nullable=False),
    Column("is_superuser", Boolean, default=False, nullable=False),
    Column("is_verified", Boolean, default=False, nullable=False),
)

Нужно чтобы в буфере оказалась колонка:

id
email
username
registered_at
role_id
hashed_password
is_active
is_superuser

Я у кого-то видел такое в видео, причем не в vim, а в PyCharm.

★★★★★

без какой-то функции самописной? не уверен

https://github.com/mg979/vim-visual-multi

а так vim поддерживает разную длину строк блочного выделения только справа в конце строки. Были бы твои поля в конце строк - сработало бы по дефолту.

mrjaggers
()
Последнее исправление: mrjaggers (всего исправлений: 2)

видел такое в видео, причем не в vim, а в PyCharm.

у хипсторедакторов бывает родная поддержка «нескольких курсоров». Вот это оно и было скорее всего.

mrjaggers
()

Буфер это редактируемый текст. Ты наверное в регистр сохранить хочешь результат? Вообще есть 458 тысяч способов сделать это

Если прям в буфере то вот: :v/Column(/d | %s/.*"\(\w*\)".*/\1/. Если в регистре то мой код под GPL - можешь редактировать (бесплатно)

perl5_guy ★★★★★
()
Последнее исправление: perl5_guy (всего исправлений: 2)

Я такое в Emacs макросами делаю.
1. Начиная с начала строки вырезать до "
2. Переместиться до "
3. Удалить все до конца строки.
4. Перейти на следующую строку.
Потом исполняешь макрос нужное количество раз.

urxvt ★★★★★
()
Ответ на: комментарий от Shevan

:%:norm "Ayi"

вот это я расшифровал - append в регистр a содержимое внутри кавычек

:let @a = @a . "\n"

а что тут за магия? как регистр понимает что нужно конкатенировать через \n ?

p.s. можно и так:

let @a .= "\n"

Turbid ★★★★★
() автор топика
Последнее исправление: Turbid (всего исправлений: 2)
Ответ на: комментарий от Turbid

Докладываю как это делается нативным плагином для neovim:

  1. Становимся на нужную позицию, например в начале слова id в моём примере
  2. Выполняем :MCunderCursor (можно настроить хоткей, конечно)
  3. Двигаемся вниз через j до начала слова is_superuser
  4. Переходим в exten-режим с помощью e
  5. Еще раз e до конца слова.
  6. Выходим из exten-режима через ESC
  7. Жмем y
  8. Выходим из MC-режима через ESC

В итоге у нас в регистре то что нужно.

Turbid ★★★★★
() автор топика