tmux, Vim и Подвергнутый воздействию солнца

У Вас есть две основных проблемы.

Первая проблема - то, что происходит в самой первой команде: test ! -f ~/TAM/dustbin/*. Сначала оболочка разворачивает подстановочный шаблон ~/TAM/dustbin/*, затем это передает получающийся список test команда. Это не будет работать, если будет больше чем один файл соответствия.

С любой оболочкой стиля Границы можно сохранить список соответствий в позиционных параметрах и проверить, существует ли первое слово (если это не делает, шаблон ничему не соответствовал).

set ~/TAM/dustbin/*
if ! test -f "$1"; then
  echo "this directory is empty"
…

(См. этот ответ для способов заставить шаблон шарика несоответствия расшириться до пустого списка в ksh, ударе и zsh.)

Обратите внимание, что каталог не может быть пустым: это может содержать точечные файлы (файлы, имя которых начинается ., который подстановочный шаблон * пропуски. Если Вы хотите проверить на существование точечных файлов также, самый легкий портативный путь состоит в том, чтобы сделать это с find:

if [ "$(cd ~/TAM/dustbin && find . | head -n 1)" = "." ]; then
  echo "this directory is empty"
else
  set ~/TAM/dustbin/..?* ~/TAM/dustbin/.[!.]* ~/TAM/dustbin/*
  for x; do
    if [ -f "$x" ]; then
      # $x is a regular file
    elif [ -e "$x" ]; then
      # $x is a directory or other special file
    else
      # $x is an unexpanded non-matching pattern
    fi
  done
fi

(Отметьте это test -f только соответствия регулярные файлы; использовать -e протестировать, существует ли файл.)

Другая распространяющаяся проблема в Вашем сценарии состоит в том, что Вы не защищаете от имен файлов, содержащих специальные символы оболочки. Всегда используйте двойные кавычки вокруг подстановок переменных "$foo" и замены команды "$(foo)". Ваш сценарий может дросселировать или удалить неправильный файл, если имя файла содержит пробел или \[?*.

Я предполагаю, что это - осуществление изучения. Если это не:

#!/bin/bash
setopt nullglob
rm -ri ~/TAM/dustbin/*

19
10.03.2014, 20:17
1 ответ

Короткий ответ

Это ошибка.

Полный ответ

Похоже, что "правильной" визуализацией является та, что слева, где жирный шрифт не отображается. Насколько я могу понять (здесь есть ссылка), атрибут bold изначально использовался для установки выделенной версии 8 базовых цветов.

Исторически сложилось так, что между полужирными версиями 8 цветов ANSI по умолчанию и яркими версиями 8 цветов по умолчанию существует соответствие один к одному. В те времена, когда цветная программа требовала отображения жирного текста, эмуляторам терминалов, вероятно, было проще отобразить более яркую версию любого цвета текста (и ожидать, что пользователь интерпретирует это как жирный), чем отображать шрифт с жирным начертанием.

По сути, здесь происходит то, что для использования полной Solarized палитры, с оранжевым, пурпурным и всеми уровнями серого, цвета вызываются с атрибутом bold, который в свою очередь ссылается на альтернативные 8 цветов палитры ANSI.

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

Вопрос 2

Есть ли способ отключить жирный шрифт в tmux?
Мне все еще нужно провести некоторые исследования по этому вопросу, и я обновлю этот ответ, как только найду что-нибудь.

Ответ 2

А вот и решение! :)

Чтобы tmux вел себя правильно, мы должны вызвать его, сказав ему, что мы находимся в среде с поддержкой 256 цветов.

TERM=xterm-256color /usr/bin/tmux

Для удобства мы можем alias это сделать (т.е. добавить alias tmux="<строка выше>" в ваш ~/.bashrc).

tmux interprets correctly the non-bold "bold-alternative" colours

Вызов tmux как tmux -2, заставляющий tmux работать с поддержкой 256 цветов (вместо переопределения переменной окружения TERM), не позволит правильно интерпретировать "полужирную альтернативу" 8 цветов (т.е. более яркий вариант также будет иметь полужирный шрифт). Поэтому я настоятельно рекомендую использовать приведенное здесь решение для правильной интерпретации 256 цветов и и нежирных "жирных альтернативных" цветов.

22
27.01.2020, 19:45

Теги

Похожие вопросы