В Vim 8 добавлена поддержка «вставки в квадратных скобках» (, при которой терминал заключает вставленный текст в escape-коды, которые указывают vim, что текст является вставкой, а не набранной строкой; см. Патч 8.0.0210). Похоже, что поведение по умолчанию — автоматически включать режим вставки перед принятием вставленного текста.
Вы можете отключить вставку в квадратных скобках и вернуться к старому поведению, добавив set t_BE=
в свой файл vimrc.
У меня не установлено tree
, но я получаю тот же эффект от cfdisk
. Я вставил вывод из cfdisk в восьмеричный дамп od (). Эти символы — всего лишь мультибайты из моей локали, то есть LANG=en_GB.UTF-8
.
Это вертикальная черта с ответвлением вправо, за которой следует горизонтальная непрерывная линия :342 224 234 342 224 200
Это нижний/правый угол, за которым следует такая же горизонталь :342 224 224 342 224 200
Перейти по этому URL-адресу:
www.ltg.ed.ac.uk/~richard/utf-8.cgi
и введите восьмеричное число 342 224 224
Или здесь:
www.obliquity.com/computer/html/unicode2500.html
Вам потребуется Google для «преобразовать кодовую точку Unicode в UTF -8».
Также попробуйте:echo -e '\0342\0224\0234\0342\0224\0200'
Он просто использует uni -кодовые символы :Unicode содержит примерно 2^24 символа. Он включает ASCII в качестве первых 128 символов, а затем включает символы всех языков (, включая математические ), в том числе некоторые вымышленные символы, символы рисования, смайлики и многое другое.
Вы можете искать символы в uni -коде символов рисования (, например. https://en.wikipedia.org/wiki/Box-drawing_character#Unicode), или просто скопируйте из примера.
Вот те же персонажи. На этом сайте они также не отображаются (, вероятно, шрифт ). Однако это один и тот же текст. Если вы вставите обратно в терминал, он будет выглядеть так же.
├── media
│ ├── cdrom
│ ├── other
Другие ответы дают альтернативный способ сделать это. Я не знаю плюсов и минусов каждого. Было бы неплохо их услышать.
Хотя другие ответы уже указывали вам на символы рисования прямоугольников, вы должны быть осторожны, используя жестко закодированные последовательности терминалов в своем приложении самостоятельно, как указано в этих ответах. Обратите внимание, что могут быть терминалы, которые просто не понимают эти последовательности и вместо этого будут выводить какую-то чепуху.
Если вы ничего в этом не понимаете, либо воздержитесь от использования этих последовательностей, либо воспользуйтесь библиотекой, способной унифицированно справляться с терминальными неловкостями, например ncurses
. В этих библиотеках также есть примитив для рисования горизонтальной линии (с соответствующими запасными вариантами ).
Если вы все еще хотите сделать это самостоятельно и без помощи терминальной базы данных, такой как libterminfo
, у вас есть следующие возможности:
Требуется специальное поле -для рисования символов, как прокомментировал другой пользователь. В терминале их можно вызвать командой printf
. Например, чтобы воссоздать первые две строки примера tree
в вопросе, это будет выглядеть так:
printf "\x1b(0\x74\x1b(B\x1b(0\x71\x1b(B\x1b(0\x71\x1b(B info\n"
printf "\x1b(0\x78\x1b(B \x1b(0\x6d\x1b(B\x1b(0\x71\x1b(B\x1b(0\x71\x1b(B exclude\n"
Для списка символов рисования окна -,см. страницу википедии .