LINUX.ORG.RU

Выпуск консольного текстового редактора Vis 0.9

 , ,


1

2

Vis – консольный текстовый редактор, сочетающий в себе модальное редактирование в стиле vi со структурными регулярными выражениями в стиле sam.

Основные особенности:

  • редактирование с помощью структурных регулярных выражений(1) основанное на командном языке Sam(2);
  • поддержка множественного выбора/курсоров;
  • подсветка синтаксиса обеспечивается с помощью грамматики синтаксических выражений, которую удобно выражать с помощью Lua LPeg;
  • API на Lua для расширения редактора(3).
  1. https://doc.cat-v.org/bell_labs/structural_regexps/
  2. https://doc.cat-v.org/bell_labs/sam_lang_tutorial/
  3. https://github.com/martanne/vis/wiki/Plugins

gif

>>> Подробности

anonymous

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

Ответ на: комментарий от neumond

программировать ещё и редактором, пока ты программируешь

Это такой изысканный кайф для эстетов. Представь, ты пишешь в нем плагин под него же. Это же какое-то программирование в кубе, да еще с регекспами, ух.

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

Ну исправь харек на хакер для user123, даже неважно sed’ом или awk’ом

$ sed '/user123/ s/харек/хакер/g' test.json
{
  "user123": { "last_msg": "мама, я хакер" },
  "user321": { "last_msg": "мама, я харек" },
  "user69": { "last_msg": "Я ХАКЕР" }
}

$ awk '{if($0~/user123/){sub(/харек/,"хакер",$0)}print}' test.json
{
  "user123": { "last_msg": "мама, я хакер" },
  "user321": { "last_msg": "мама, я харек" },
  "user69": { "last_msg": "Я ХАКЕР" }
}
iron ★★★★★
()
Ответ на: комментарий от iron

Оба варианта не работают на минифицированном json’е в одну строку. У тебя нигде не отображено даже, что ты ищешь в фигурных скобках по краям.

fumanchez
()
Ответ на: комментарий от slackwarrior

выхлоп sed можно пайпить в sed

Ясен пень, только а) кому это нужно, если можно задать последовательность комманд, б) это ещё раз намекает, что инструмент выбран неправильно.

хочешь комбаен

Комбаен здесь это регулярки - они типа для всего, но на практике дай бог хотя бы e-mail ими адекватно спарсить. И если ты плохо читаешь, я тут за специализированную тулзу чисто для работы с json, т.е. это как бы антикомбайн.

fumanchez
()
Ответ на: комментарий от Artsi0m

Тьюринг-полнота не означает комбайновость, Майнкрафт тоже тьюринг-полный, что дальше то?

Если sed это редактор текста, то jq это редактор json текста, вот на это может нужно в первую очередь обращать внимание?

fumanchez
()
Ответ на: комментарий от fumanchez

Ну исправь харек на хакер для user123, даже неважно sed’ом или awk’ом

Плохой пример — тут очевидное /user123/s/харек/хакер/ работает.

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

Оба варианта не работают на минифицированном json’е в одну строку.

Ты в примере привел не минифицированный json. И получил простое решение при помощи sed и awk. Если у тебя там json с непредсказуемой структурой, тогда юзай jq, который распарсит любую кашу:

# jq '.user123.last_msg |= sub("харек"; "хакер")' test.json
{
  "user123": {
    "last_msg": "мама, я хакер"
  },
  "user321": {
    "last_msg": "мама, я харек"
  },
  "user69": {
    "last_msg": "Я ХАКЕР"
  }
}

У тебя нигде не отображено даже, что ты ищешь в фигурных скобках по краям.

Какое было ТЗ – такое и решение. Если структура текста предсказуема – нет ничего проще сладкой парочки awk+sed. Если формат более сложный и непредсказуемый – нужно юзать соответствующую тулзу понимающую формат. Очевидно же…

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

В этом и суть, что работает, но делать так не нужно. Это мог быть «преттифицированный» json, а на деле он под капотом минифицированный.

fumanchez
()
Ответ на: комментарий от iron

Если структура текста предсказуема – нет ничего проще сладкой парочки awk+sed

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

fumanchez
()
Ответ на: комментарий от fumanchez

JSON - это Java Script Object Notation. Он является валидным кодом в языках основанных на EcmaScript (JS) либо частично поддерживаюших его (Python)

rtxtxtrx
()
Ответ на: комментарий от rtxtxtrx

я к тому что для него задан синтаксис, и исходить надо из этого синтаксиса, а не просто по регулярке искать строку с вхождением

fumanchez
()
Ответ на: комментарий от fumanchez

осуждаю! заменить регуляркой по-бырому - это unix-way!!! Linux - это нагромаждение хлама из говна и палок, склееного соплями, и все что не вписывается в эту концепцию - от противного

rtxtxtrx
()
Ответ на: комментарий от fumanchez

Можешь такой эпичный однострочник применить:

$ xclip -sel c -o | node -e 'const fs=require("fs"); const drisnya = JSON.parse(fs.readFileSync(0, "utf-8")); console.log(JSON.stringify(Object.fromEntries(Object.entries(drisnya).map(([k, v]) => { v["last_msg"] = "Я херка"; return [k, v] }))))'
{"user123":{"last_msg":"Я херка"},"user321":{"last_msg":"Я херка"},"user69":{"last_msg":"Я херка"}}

Тут честный разбор и можно модифицировать как угодно, например, добавлять поля/свойства, делать проверки… jq хорош, пока говна с ним не поешь, да и постоянно забываешь его ублюдский синтаксис.

rtxtxtrx
()
Последнее исправление: rtxtxtrx (всего исправлений: 1)
Ответ на: комментарий от erfea

Потому что vim «лучший». Но как его замена есть kakoun (кукан). Там есть скрепка с подсказками и преднастройки

rtxtxtrx
()
Ответ на: комментарий от windows10

Справедливости ради, бывают ситуации когда не клиника, а нужно заменить сотню слов по определенной маске, при том не просто с вхождением подстроки, а еще и с невхождением другой подстроки.

Вот бы вим, над которым ты глумишься, так умел… Вот бы ты тогда глупо выглядел :)

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

Порой именно такого и не хватает.

Я вообще не врубаюсь чего вам не хватает: в виме регулярки - искаробочные, например для поиска и замены. В связи с чем, я не очень понимаю концепцию сабжа, типа вим с регулярками, когда обычный вим - он из коробки с регулярками.

Алсо, уверен что остальные редакторы тоже регулярки умеют, имаксеры есть в треде?

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

Свят, свят!!! /me крестится двумя руками

Жуть какая :) это как упоротость моего вима умножить возвести в степень упоротости регулярками!

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

Справедливости ради, бывают ситуации когда не клиника, а нужно заменить сотню слов по определенной маске, при том не просто с вхождением подстроки, а еще и с невхождением другой подстроки.

Вот бы вим, над которым ты глумишься, так умел… Вот бы ты тогда глупо выглядел :)

Так вообще-то умеет. Тестовый текст:

foo test bar hey
hi foo test 123 cool

Выполняем:

:%s/\vfoo(.*bar.*)@!/replacement/g

Результат:

foo test bar hey
hi replacement test 123 cool
iron ★★★★★
()
Ответ на: комментарий от iron

Вот бы вим, над которым ты глумишься, так умел… Вот бы ты тогда глупо выглядел :)

Так вообще-то умеет

[табличка «сарказм»] ;)

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

Да те же Kate с KWrite давно умеют в регулярки при поиске и замене. Да и не они одни такие, «тысячи их»(ц).

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

Про Трампа знаю, но по итогу как-то с ним не сжился.

spqr ★★★
()
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.