Прежде всего, вы должны проверить, способен ли ваш терминал отображать текст курсивом. В вашем типе терминала (флаг -e
гарантирует, что коды перехода интерпретируются)
echo -e "\e[3m foo \e[23m"
Если вы видите foo
, тогда все в порядке, в противном случае вам нужно изменить терминал (Gnome Terminal и Консоль - хороший выбор).
Затем вы должны помочь Vim распознать тип используемого вами терминала, вставить в вас ~/.bashrc
:
export TERM="xterm-256color"
Теперь вы можете попробовать и посмотреть, достаточно ли этого, открыть новый файл vim foo.html
со следующим содержанием
<i>foo</i>
Вы видите foo
курсивом? Если нет, то вам нужно пойти немного дальше, сейчас Vim не знает кодов выхода для переключения в режим курсива, вам нужно сказать об этом (это самая сложная часть, мне понадобилось несколько лет, чтобы понять это) .
Вставьте следующие две строки в свои ~/.vimrc
set t_ZH=^[[3m
set t_ZR=^[[23m
Это те же escape-коды, которые мы использовали ранее в терминале, имейте в виду, что ^[
не являются буквальными символами, но представляют escape-символ Вы можете вставить его в режиме вставки с помощью CTRL kbd> - V kbd>, за которым следует ESC kbd> (см. :help i_CTRL-V
)
Теперь снова откройте файл, который мы создали до foo.html
, и вы должны увидеть foo
курсивом; если ты этого не сделаешь, я больше не смогу тебе помочь. В противном случае вы почти закончили; есть один последний шаг.
Вставьте в свой файл ~/.vimrc
файл
highlight Comment cterm=italic
после загрузки любой схемы цветов.
Зависит от преобладающей целевой аудитории.
Если это программисты все равно изменяют файл, просто используйте файлы Python, например settings.py
Если это конечные пользователи, подумайте о файлах ini.
Не знаю, можно ли это считать "официальным", но он есть в стандартной библиотеке: 14.2. ConfigParser - Парсер файла конфигурации .
Это, очевидно, не универсальное решение. Просто используйте то, что кажется наиболее подходящим для задачи, без какой-либо необходимой сложности (и особенно - полноты по Тьюрингу! Подумайте об автоматических конфигураторах или конфигураторах с графическим интерфейсом пользователя).
Как многие говорили, "официального" пути не существует. Однако есть много вариантов. В этом году на PyCon был доклад о многих доступных вариантах.
Еще один вариант, PyQt. Qt имеет платформенно-независимый способ хранения настроек с помощью класса QSettings. Под капотом, в Windows он использует реестр, а в Linux он сохраняет настройки в скрытом файле conf. QSettings работает очень хорошо и довольно невзрачно.
Это во многом зависит от сложности вашей конфигурации. Если вы выполняете простое сопоставление значений ключа и хотите иметь возможность редактировать настройки с помощью текстового редактора, я думаю, что ConfigParser - это то, что вам нужно.
Если ваши настройки сложные и включают списки и вложенные структуры данных, я бы использовал XML или JSON и создал редактор конфигурации.
Для действительно сложных вещей, когда конечный пользователь не должен сильно менять настройки или ему больше доверяют, просто создайте набор классов Python и оцените скрипт Python, чтобы получить конфигурацию.
Я не уверен, что существует «официальный» способ (он не упоминается в Zen of Python: )) - Я сам обычно использую модуль Config Parser и думаю, что вы найдете это довольно распространенным явлением. Я предпочитаю это подходу с использованием файлов Python, потому что вы можете записывать в него ответ и динамически перезагружать, если хотите.
зачем Гвидо благословлять то, что выходит за рамки его возможностей? Нет ничего особенного благословенного.
Компилятор должен быть достаточно умен, чтобы распознавать, что BigFoo
не может быть преобразовано в IEnumerable
, но это не так. Он просто видит, что это IEnumerable
, и чувствует, что это потенциальный кандидат на перегрузку (даже несмотря на то, что ограничение, которое вы определили, заставляет T
быть IFoo
и int
нельзя преобразовать в IFoo
). Хотя это неудобно, но это не так уж и важно. Просто приведите bigFoo к IFoo
, и компилятор будет доволен:
fooContainer.Add((IFoo)bigFoo);
В качестве альтернативы, вы можете сделать вашу общую перегрузку Add uglier:
public void Add<T, U>(U group)
where T : IFoo
where U : IEnumerable<T>
{
}
В любом случае у вас будет больше ввода, второе решение устранит необходимость для отправки вызовов на Добавить
,