LINUX.ORG.RU

Иероглифы в Kate

 , , ,


0

1

Можно ли в редакторе Kate сделать так, чтобы все символы были строго или одинарной, или двойной ширины? У меня получается соотношение латиница:CJK примерно 5:3, а хотелось бы 1:2.

Если нет, в каких редакторах это возможно? Помимо консольных.

★★★★★

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

Тебе нужен шрифт, который умеет и латиницу и CJK.

Как я понял, такого моноширинного шрифта не существует. Можно только заставить программу выводить символы подставляемого шрифта строго двойной ширины, как это делает Konsole, например.

или совокупляться с fonts.conf.

Как именно? И необходимо ли каждый раз перезапускать иксы?

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

Как я понял, такого моноширинного шрифта не существует.

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

Можно только заставить программу выводить символы подставляемого шрифта строго двойной ширины, как это делает Konsole, например.

Так себе вариант. Читабельность сильно снижается. Это то же самое, что взять CJK-шрифт с латиницей (описание выше).

И необходимо ли каждый раз перезапускать иксы?

Нет, настройка перманентна. Но KDE любит портить fonts.conf, так что нужно делать бэкапы.

Как именно?

<fontconfig>
 <!-- ... -->
 <match target="font">
  <test compare="eq" name="family">
   <string>Norse</string>
  </test>
  <edit mode="assign" name="charset">
   <charset>
    <range>
     <int>0x16A0</int>
     <int>0x16FF</int>
    </range>
   </charset>
  </edit>
 </match>
 <!-- ... -->
</fontconfig>

Вот так я в своё время прикручивал futhark в терминал. По умолчанию там выбранный шрифт, а для рэнжа 0x16A0-0x16FF — шрифт с рунами. (=

Правда, я без понятия, как оно будет работать с шириной символов, у меня до сих пор нет шрифта с CJK.

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

латиница двойной ширины

Бывает интереснее. Перебирал установленные, наткнулся на шрифт с одинарной латиницей и двойной для кириллицы. И полуторной для иероглифов.

без понятия, как оно будет работать с шириной символов

Спасибо за пример, но я спрашивал именно ради ширины символов.

Читабельность сильно снижается.

В консоли кана чуть разрежена с ~1,7 до 2 знакомест, и вполне читаема. Значительно легче, чем русские буквы через пробел :) Вот только редактирование в Vim отнимает слишком много времени по сравнению с Kate.

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

наткнулся на шрифт с одинарной латиницей и двойной для кириллицы. И полуторной для иероглифов

Ну вот об этом я и писал про шрифты с множественными наборами символов.

без понятия, как оно будет работать с шириной символов

Спасибо за пример, но я спрашивал именно ради ширины символов.

Тут зависит от софтины и самого шрифта. Если софтина может отрисовывать несколько разных шрифтов по метрикам каждого отдельно — будет работать корректно, если нет (например, терминалы не умеют динамическую ширину, им это не нужно), то ой.

Вот только редактирование в Vim отнимает слишком много времени по сравнению с Kate.

Оффтопик, конечно, но… Если осилить хотя бы часть аккордов вима, будет значительно быстрее, чем в любом другом редакторе. Из личного опыта. (=

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

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

Как в Vim руками двигать строку вверх-вниз?

Как Vim растянуть курсор на несколько строк, чтобы производить в них одинаковые действия?

Как в Vim вставлять/копировать из/в общеиксовый буфер обмена со скоростью Shift-стрелки и Shift/Ctrl-Ins? Esc, v, "+y довольно долго, особенно если ошибся, и нужно выделять повторно. И я постоянно путаю p и P.

Как удалять так, чтобы не затирать текущий буфер?

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

Как в Vim руками двигать строку вверх-вниз?

Не понимаю что ты имеешь в виду.

Как Vim растянуть курсор на несколько строк, чтобы производить в них одинаковые действия?

Зачем производить одинаковые действия в двух разных местах? Копипаст в принципе вреден, для этого давно придумали переменные, ссылки и целую кучу разного рода сахара в современных языках.

Как в Vim вставлять/копировать из/в общеиксовый буфер обмена со скоростью Shift-стрелки и Shift/Ctrl-Ins? Esc, v, "+y довольно долго, особенно если ошибся, и нужно выделять повторно. И я постоянно путаю p и P.

Ctrl+Shift+V работает, ну и Shift+Insert тоже. p/P это для внутреннего буфера обмена (с настроенным viminfo даже после закрытия работает).

Как удалять так, чтобы не затирать текущий буфер?

Удалять файлы? Это вообще не работа текстового редактора, но :! ещё никто не отменял. (=


Встречные вопросы:

  • Как переместить блок текста на параграф или N строк выше/ниже?
  • Как удалить несколько слов перед курсором?
  • Как удалить несколько строк выше/ниже курсора?
  • Как сделать поиск с regex и замену (тоже из regex) в блоке текста?

Всё это Vim умеет без всяких плагинов. И при этом без отрыва рук от клавиатуры — основного (и единственного!) инструмента ввода текста. (=


Тут зависит от софтины и самого шрифта. Если софтина может отрисовывать несколько разных шрифтов по метрикам каждого отдельно — будет работать корректно

Сейчас вспомнил…
В Cairo метрики берутся из шрифта. Но возникает другая проблема: у разных шрифтов могут быть разные baseline и относительная высота, и тут начинается гребля с препятствиями для позиционирования, чтобы оно не "прыгало" относительно baseline. Плюс ко всему этот бардак может делать во-первых обрезку там, где буквы вылезают за канвас, во-вторых усложняет расчёт самого канваса (нужно учитывать метрики всех используемых шрифтов).

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

Как в Vim руками двигать строку вверх-вниз?

  1. перейти на строку, которую нужно переместить
  2. dd
  3. перейти на строку, куда нужно вставить
  4. P

Перемесить несколько строк (скажем, три, переместить на пять строк вверх)

  1. встать на первую строку
  2. V2jy (V-model, 2 вниз, скопировать, курсор останется на первой строке)
  3. 5kP (5 вверх, вставить)

Чтобы строки не считать, в конфиг добавить:

set number              " line numbers
set relativenumber      " also, relative line numbers
set signcolumn=yes

Я вообще не понимаю, что в Виме может быть сложного.

Как Vim растянуть курсор на несколько строк, чтобы производить в них одинаковые действия?

Мультикурсор баловство. Обычно в место него можно использовать замену регекспами (нужно заменить что-то в нескольких строках подряд):

  1. Выделить блок (но не выходить из Vmode), например 5 строк вниз: V4j
  2. : (командный режим)
  3. s/паттерн/на что меняем

Как в Vim вставлять/копировать из/в общеиксовый буфер обмена со скоростью Shift-стрелки и Shift/Ctrl-Ins? Esc, v, "+y довольно долго, особенно если ошибся, и нужно выделять повторно.

Ужасы какие-то. А кейбиндинги для кого придумали? Я забиндил y на ввод, "+y на С-ввод. Так что всего-то нужно набрать, например V3 и enter вместо V3y (рукам легче), чтобы скопировать в буфер. Либо V3 C-Enter, если нужно в системный (вместо V3"+y)

И я постоянно путаю p и P.

Дело практики. Так же как и aA/iI. И вообще совет - освоить vim motion keys, их немного совсем. (вперед/назад на слово/символ/следующую скобку/строку/абзац)

Как удалять так, чтобы не затирать текущий буфер?

В смысле в буфер не помещать? Но зачем?

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

Как в Vim руками двигать строку вверх-вниз?

Не понимаю что ты имеешь в виду.

Как переместить блок текста на параграф или N строк выше/ниже?

Об этом я и спрашивал. Как это делать в Vim-е помимо Esc, v, стрелки, d, стрелки, p?

Помимо Cut-Paste, в Kate для целой строки или нескольких соседних строк работает следующее: выделить полностью или частично Shift-стрелками (или просто поставить курсор на строку, если одна), двигать Ctrl-Shift-вверх/вниз.

Бывает очень удобно для ручной сортировки списка.

Как удалить несколько слов перед курсором?

Ctrl-Del. В другую сторону — Ctrl-BkSp. Как привык на Atari, до сих пор всюду машинально пытаюсь :)

Как удалить несколько строк выше/ниже курсора?

Выделить Shift-стрелками и Del. Или просто начать печатать.

Как сделать поиск с regex и замену (тоже из regex) в блоке текста?

Выделить блок, Ctrl-R, убедиться в положении переключателя «Search in the selection only», ввести регэкспы.

Зачем производить одинаковые действия в двух разных местах? Копипаст в принципе вреден, для этого давно придумали переменные, ссылки и целую кучу разного рода сахара в современных языках.

Для художественного текста. Мне прислали смешной анекдот-диалог в виде мегабайтного скриншота, я его отOCRил и скинул в специальный текстовый файл, но OCR потерял тире в начале реплик. Можно подумать с полминуты и составить регулярное выражение, можно 8 раз нажать Compose - - - ↓ Home, можно 1 раз набрать тире и 7 раз скопировать, можно растянуть курсор Ctrl-Shift-вверх/вниз (или включить блочное редактирование Ctrl-Shift-B) и 1 раз набрать тире.

Как в Vim вставлять/копировать из/в общеиксовый буфер обмена со скоростью Shift-стрелки и Shift/Ctrl-Ins?

Ctrl+Shift+V работает, ну и Shift+Insert тоже.

Как пользоваться Ctrl+Shift+V без мыши?

Как удалять так, чтобы не затирать текущий буфер?

Удалять файлы?

Удалять текст. При нажатии Del или d удаляемое попадает во внутренний буфер, заменяя то, что там было. Как удалять, сохраняя буфер неизменным?

Всё это Vim умеет без всяких плагинов. И при этом без отрыва рук от клавиатуры

Именно поэтому так раздражает необходимость пользоваться мышью для Ctrl-Shift-V, чтобы копировать в другое окно. А с аккордом "+y я регулярно промахиваюсь, и приходится выделять повторно.

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

Как удалять так, чтобы не затирать текущий буфер?

А, так речь про буфер обмена, а не буфер файла… @question4, оно в виме называется регистр. (=

И оно хранит последние 10 скопированных регистров (доступны по "N, где N — число от 0 до 9), ещё есть + (CLIPBOARD) и * (PRIMARY), плюс именованные (буквенные).

"1p вставит предыдущий регистр.

В смысле в буфер не помещать? Но зачем?

Очень непросто многим людям объяснить разницу между remove и delete. (= А учитывая что в Vim оно висит на d(elete), это сделать ещё сложнее. (%

Вообще, подразумевается, что ты не печатаешь ненужную дичь, которую нужно просто удалить. Особенно если вспомнить, что vi это идейный наследник ed.

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

Вообще, подразумевается, что ты не печатаешь ненужную дичь, которую нужно просто удалить.

OCR. На файлах с артефактами пережатия. Или грязных сканах.

Или многократное переписывание текста, который «не хочет» писаться. Когда десятки раз тасовал предложения в абзаце и слова в каждом предложении.

vi это идейный наследник ed

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

"1p вставит предыдущий регистр.

Спасибо.

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

учитывая что в Vim оно висит на d(elete), это сделать ещё сложнее.

Ну идеальных терминов/названий для команд нигде нет. Меня вот некоторое время напрягало, что в Emacs «yank» это вставка. Ничего, вроде уживаются теперь, при переходе от одного к другому нужно пару минут перестроиться (evil mode не призаю́).

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

Как в Vim руками двигать строку вверх-вниз?

Не понимаю что ты имеешь в виду.

Как переместить блок текста на параграф или N строк выше/ниже?

Об этом я и спрашивал. Как это делать в Vim-е помимо Esc, v, стрелки, d, стрелки, p?

vip:m-4, например. (=

Бывает очень удобно для ручной сортировки списка.

Замапать в vimrc что-то типа nnoremap K :m .-2<CR>==

Как удалить несколько слов перед курсором?

Как удалить несколько слов перед курсором?

Ctrl-Del. В другую сторону — Ctrl-BkSp. Как привык на Atari, до сих пор всюду машинально пытаюсь :)

Это не несколько слов, это по одному слову за нажатие. 5dW в виме удалит пять СЛОВ (можно через w, но знаки препинания в этом случае будут отдельными словами). (=

Для художественного текста. Мне прислали смешной анекдот-диалог в виде мегабайтного скриншота, я его отOCRил и скинул в специальный текстовый файл, но OCR потерял тире в начале реплик. Можно подумать с полминуты и составить регулярное выражение, можно 8 раз нажать Compose - - - ↓ Home, можно 1 раз набрать тире и 7 раз скопировать, можно растянуть курсор Ctrl-Shift-вверх/вниз (или включить блочное редактирование Ctrl-Shift-B) и 1 раз набрать тире.

Meh… vip:%s/^/- /. Всё! (%

Как пользоваться Ctrl+Shift+V без мыши?

У меня вообще мыши нет. (=

Удалять текст. При нажатии Del или d удаляемое попадает во внутренний буфер, заменяя то, что там было. Как удалять, сохраняя буфер неизменным?

_d.

Именно поэтому так раздражает необходимость пользоваться мышью для Ctrl-Shift-V, чтобы копировать в другое окно. А с аккордом "+y я регулярно промахиваюсь, и приходится выделять повторно.

Если выделять с клавиатуры, промахов будет гораздо меньше, чем целиться мышью. (=

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

Ну идеальных терминов/названий для команд нигде нет.

На всех просто кнопок не хватит, чтобы семантически было. r(eplace) уже занят, а x не очень интуитивен. Хотя фактически d(elete) это remove to register (дословно «убрать в регистр»).

evil mode не призаю́

Справедливо. Если нужно "как в виме" — проще взять вим.

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

Я не люблю GNU и считаю Lisp ужасным (сразу после Forth), но если бы Emacs было удобно пользоваться, всё это просто меркнет. Как я в своё время смирился с vimscript (он не только синтаксически всратый, но ещё и медленный).

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

vip:%s/^/- /.

Часто бывает немного посложнее: мусор в начале, мусор в конце, точки в конце, расстановка парных кавычек… Если весь обрабатываемый фрагмент умещается на экране, пальцы на стрелках работают быстрее, чем продумывается регулярное выражение.

Сразу вопрос: я один раз выделил много строк, применил s/…/…/, выделение снялось. Как применить s/…/…/ к тому же блоку ещё раз?

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

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

Мне проще удалить кучу текста и ввести его заново, чем по нему навигировать. Быстрее получается. (=

Сразу вопрос: я один раз выделил много строк, применил s/…/…/, выделение снялось. Как применить s/…/…/ к тому же блоку ещё раз?

gv — повторить выделение (выделит ровно тот же участок).


vip:%s/^/- /

Тут очепятка, % лишний (оно заменит по всему файлу). (=

mord0d ★★★★★
()