[О блоге]
[наверх]
[пред]
[2020-06-11 10:55:24+03:00]
[2d06525ce8bc48be93376479ca8a0a639c6789eb]
Темы: [tip][vim][zsh]
Мой zsh prompt и Vim statusline
Спросили меня тут как-то, увидев screenshot, что означают всякие циферки
у меня в zsh и vim.
zsh prompt у меня однострочный (всегда ужасался колоссальной потере
места на экране на многострочных), классический:
work/blog|0|1-% f bar G foo W
Цветов нет, кроме жирной "1" и "%":
* "%" фиолетового цвета: его хорошо видно на экране когда надо глазами
найти где же начало вывода какой-нибудь программы.
* "-" перед ним отображает текущий vi-режим. Если я нажму Esc и перейду
в командный, то он поменяется на "+"
* "1" перед ним яркого белого цвета (bold) и это код возврата только что
выполнившейся команды. Нередко бывает надо его узнать -- можно конечно
набрать echo $?, но иногда я уже успею набрать какую-нибудь другую
команду и эта информация уже будет потеряна, а тут на экране
сохранится
* "0" показывает время исполнения последней команды. Очень часто хочется
узнать сколько же она выполнялась, но забываешь добавлять time, к тому
же у которого довольно громоздкий вывод. Очень полезная штука!
* work/blog это два последних элемента пути. "~" если я нахожусь в
домашней директории, "~/work" если в $HOME/work, "~pyg" если в
именованной директории "pyg" (PyGOST директория проекта в данном
случае). Показывать полный путь -- самоубийство, ибо он может быть
громадным, не оставляя места для команды
Когда-то я там писал и название git ветки в prompt, но отказался --
во-первых, как правило, я знаю где я, во-вторых, оно тормозит. Только
зайдя в какой-нибудь проект, с непрогретым ARC-ом этой git-директории,
тормоз будет даже на SSD, что меня дико бесит. Нажав F2/F3 я сделаю git
status (--short). Набрав Gb я увижу ветки, если уж запамятовал.
Аналогично и в Vim я не отображаю этой информации, ибо тормозит!
Я пробовал разграничивать колонки prompt-а по цветам, например чтобы
убрать "|" разделитель, но там их и так всего две штуки и слишком
горизонтально сгруппированная информация тоже не шибко приятна.
Я не понимаю когда добавляют в строку приглашения всякие вещи типа
времени или уровня WiFi сигнала -- ведь это же всё стоит вывести в
вне терминала в какой-нибудь statusbar desktop environment-а (или
dwmstatus в моём случае). Как минимум, это не будет запрашивать кучу
информации у ОС при каждом отображении приглашения. Да и, действительно
каждый раз вам нужно знать время после каждого ls? Нерациональная трата
места.
По директориям я перемещаюсь не просто через cd, а с обязательной (это
первая главная причина почему я не могу использовать bash) autopushd
фичей, когда формируется стэк директорий и любой cd превращается в
pushd. Нажав F4 я сделаю popd, быстро вернувшись по стэку назад, что
крайне частая операция.
"f bar G foo W" это аналог: find . -name "*bar*" | grep --color foo | wc -l
В zsh у меня синтаксическая подсветка команд, кавычек, всяких аргументов
команд и спецсимволов типа "|", "<>", и т.д.. ОЧЕНЬ помогает и удобно --
а главное что не тормозит. Плюс включён autosuggestions плагин, который
бледным синим цветом выводит элемент истории найденный по уже набранным
символам -- это очень полезно тем, что я буквально вижу что будет если я
нажму Up+Enter. Ctrl-R у меня включает поиск по истории с regexp-ом, ибо
я не всегда точно помню с чего начинается команда, но помню её примерные
опорные слова.
------------------------ >8 ------------------------
В Vim мой текущий statusline вот такой (только одно "LN" поле у меня
заполняется внешними средствами, а всё остальное -- встроено в Vim):
~/work/blog/.git/COMMIT_EDITMSG [+] ^^^^^^^^ 1 [GITCOMMIT][utf-8 unix][31/37][43-31:0x03A][2324][LN][73%]
На самом деле тут (кроме "[+]") нет ни одного "[", "]" -- я так пометил
области выделенные разными яркими цветами. Во-первых, это хорошо заметно
и быстрее позволяет навигации глазами. Во-вторых, экономит ощутимо места
на экране, ведь тут много полей. Место становится важно когда открыто
несколько split-ов всяких.
* ~/work/blog/.git/COMMIT_EDITMSG -- путь до файла, тут всё очевидно
* [+] -- флаг что файл изменён. После него могут идти и всякие другие
флаги типа [RO]
* ^^^^^^^^ -- заполняет всё пустое пространство и показывает текущее
окно, если их больше одного. Это сильно помогает быстро глазами
отыскать где я
* 1 -- номер текущего буфера, который можно ввести при нажатии Tab для
прыжка в него. Вообще не часто я его запоминаю и смотрю в его сторону,
но бывает, место мало занимает
* GITCOMMIT -- текущий filetype, обязательная к показу информация
* "utf-8 unix" -- текущая кодировка и режим окончания строк. Тоже
обязательные к показанию информации, ибо Vim при открытии
самостоятельно делает конвертирования и ты не увидишь что это файл с
DOS-овскими окончаниями строк или что Vim некорректно подумал что это
не UTF-8 файл
* 31/37 -- номер текущей строки и всего их сколько. Без этого никуда
* 43-31 -- первое число показывает номер байта в строке, offset в
пределах строки на котором сейчас мой курсор. Второе число показывает
номер символа в строке. Если числа совпадают, то показывается только
одно. Разнится эти числа будут на многобайтных символах (кириллица).
Полезны оба числа зачастую для разных случаев
* 0x03A -- Unicode codepoint символа под курсором. С ходу мне
вспоминается что это чаще всего используется для понимания что у меня
под курсором: какой-то Unicode или ASCII, которые могут выглядеть
абсолютно одинаково
* 2324 -- абсолютная байтовая позиция курсора внутри файла. Полезно при
разбирательствах с немного не текстовыми файлами. Было очень полезно
"отлаживать" комментарии моего блога, которые в netstring формате, в
которых постоянно из-за преобразований git-а что-то съезжало на 1-2
байта
* LN -- это поле штатно не видно вообще (пустое пространство), но если в
фоне у меня запущен linter или какая-нибудь gogetdoc команда, то там
красным ярким цветом показывается двухбуквенное уведомление что что-то
работает в фоне
* 73% -- позиция внутри файла, "Ende" если в конце, "Anfang" если в
начале. Всегда очень полезно быстро понимать сколько я уже просмотрел
какого файла
Вообще особо ничего хитрого: почти всё что умеет Vim тут просто
выводится. И действительно многое очень полезно на практике.
Кроме того, у меня подчёркивается вся строка на которой я сейчас
нахожусь, вертикальной красной линией подсвечивается текущая колонка где
курсор -- эдакое перекрестие, которое очень помогает быстро отыскивать
местоположение курсора, который может быть плохо виден на всяких
разукрашенных синтаксической подсветкой файлах.
Слева отображаются относительные номера строк -- überfeature, без
которой жизни нет вообще. Граница 80-го символа тоже подсвечивается
вертикальной красной четой. По умолчанию у меня включён folding по
отступу и слева от номеров строк отображается уровень fold-а. Частенько
бывает смотрю туда чтобы понять на какой глубине находится тот или иной
участок кода, особенно когда полностью вся функция/класс/метод не
влезают на экран. А ещё левее могут отображаться sign-ы, которые
linter-ами показывают строки в которых что-то не ладно.
Whitespace-ы в конце показываются ярким зелёным цветом, чтобы бить в
глаза ими. Табы отображаются ">→→→→→→→" символами -- я могу визуально
сосчитать кол-во табов, если захочу.
[оставить комментарий]