Tcsh: пример пользовательского конфига
Основываясь на "рыбе", доставшейся нам в комплекте, попробуем составить собственный файл ~/.tcshrc
. Для начала создаём его в своём домашнем каталоге, например, командой
# touch ~/.tcshrc
Откроем этот файл (пока пустой) в любимом текстовом редакторе и озаглавим его так:
# Мой пользовательский ~/.tcshrc # Считывается при каждом запуске tcsh # Работающий конфиг для FreeBSD 7.1
После чего переходим собственно к делу -- определению псевдонимов, переменных и всего, что потребуется впредь. Порядок строк значения не имеет. Но некий порядок обязан иметь место быть. И потому будем следовать порядку, данному нам в ощущениях авторов прототипа нашего конфига.
Согласно этому порядку, первым делом определяются псевдонимы часто используемых команд. Тут каждый имеет свои устоявшиеся привычки и пристрастия. Для тех же, у кого таковые ещё не выработались, в качестве примера приведу псевдонимы, определенные у меня:
## Определение псевдонимов# Псевдонимы для команд управления файлами alias cp cp -iR # Рекурсивное копирование # с запросом подтверждения # перезаписи существующих файлов alias cpf cp -Rf # Рекурсивное копирование # с принудительной перезаписью # существующих файлов alias rm rm -i # Удаление файлов с запросом # подтверждения alias rmf rm -Rf # Принудительное рекурсивное # удаление файлов alias mv mv -i # Перемещение/переименование файлов # с запросом подтверждения alias mvf mv -f # Принудительное # перемещение/переименование файлов # Псевдонимы команды ls alias ls ls -FG # Колоризованный вывод # с символической типизацией файлов alias la ls -A # Вывод всех файлов, # за исключением . и .. alias ll ls -l # Вывод списка файлов # в "длинном" формате alias li ls -ial # Вывод всех файлов # в "длинном" формате # с указанием идентификаторов # Прочие псевдонимы alias df df -h # Вывод в "гуманистическом" alias du du -h # формате, с подбором единиц # измерения alias less less -M # Вывод команды less # в "more-подобном" виде alias wget wget -c # Скачивание по ftp # с продолжением alias aspell aspell -c # Проверка орфографии alias nano nano -w # Вызов nano без переноса слов
Теперь задаём атрибуты доступа для новообразованных файлов и каталогов:
umask 022
что даёт права по схеме 755
, то есть чтение, запись и, если возможно, исполнение для файлов и каталогов создавшему его пользователю, чтение и исполнение -- для членов его группы и прочих.
Далее определяем значения переменной path
, указывающей на место размещения исполняемых файлов. Для пользователя это выглядит так:
set path = (/bin /usr/bin /usr/local/bin)
Об особенностях конфигурационного файла для администратора мы поговорим чуть позже.
Вслед за этим задаём значения пользовательских переменных окружения. Мне представляются удобными следующие:
setenv EDITOR nano setenv PAGER less setenv BLOCKSIZE K
Наступает время для определения встроенных переменных оболочки. В этой секции мы сначала избавляемся от возможности нежелательного выхода из сеанса tcsh
по случайному нажатию комбинации Control+D в пустой строке, установив переменную
set ignoreeof
игнорирующую символ окончания файла.
Заодно избавимся и от звуковых сигналов, действующих подчас раздражающе, в том числе и на близких:
set nobeep
Затем обеспечиваем вывод вариантов дополнения слов по нажатию клавиши табулятора:
set autolist
Автоматическая коррекция неправильно введённых команд также может показаться нелишней, хотя это и спорный вопрос:
set correct = cmd
В этом случае, если оболочка воспримет некую команду (из числа определённых в переменной path
), как введённую с ошибкой, то предложит корректирующий вариант, с которым можно согласиться (y
), проигнорировать (n
), вызвать команду для редактирования (e
) или оборвать её исполнение с возвратом приглашения командной строки (a
).
Для опции correct
возможны и другие значения. Так, если определить
set correct = complete
то не полностью введённая команда будет автоматически дополняться до конца в случае безальтернативности или до последнего общего символа, если возможны варианты -- в большинстве случаев это бывает удобно.
Если же переменную correct
определить в виде
set correct = all
то вариант исправления ошибок будет предлагаться не только для команд, как при значении cmd, но и для имен файлов или путей к ним, если оболочка сочтёт их неправильно написанными. Последнее крайне раздражает при операциях создания и копирования файлов и каталогов. А поскольку в tcsh
, в отличие от zsh
, задать исключения для опции correct
нельзя, я значением all
для неё не пользуюсь.
Следующие переменные имеют отношение к истории команд. Поскольку файл ~/.tcshrc
считывается только при работе этой оболочки в интерактивном режиме, необходимости предварять их условным оператором я не вижу. Значения переменных
set history = 1000 set savehist = 1000
устанавливают максимальное количество строк в буфере истории текущего сеанса и в файле истории соответственно. Для простоты делаем их равными и с достаточным запасом -- при современных объемах памяти это не обременительно.
А вот от балласта в виде дубликатов команд в файле истории целесообразно избавиться -- не столько из экономии, сколько ради собственного удобства. Сделать это можно путем определения переменной histdup
тремя различными способами, в зависимости от её возможных значений. При значении
set histdup = prev
текущая команда, которая совпадает с последней, имеющейся в файле истории, к файлу истории добавлена не будет.
Установка
set histdup = all
повлечёт за собой сохранение в файле истории только уникальных команд. Оба эти значения переменной histdup
вызывают перенумерацию списка команд в файле истории так, чтобы в нём не было никаких "прорех".
После установки
set histdup = erase
перенумерации команд не происходит: последняя введённая команда подменяет собой ранее существовавший её дубликат.
По умолчанию, как уже говорилось, буфер истории команд сохраняется в файле ~/.history
. Однако определив переменную histfile
, можно дать ему произвольное имя. Это бывает полезно, если tcsh
используется попеременно с другими оболочками, файл истории команд которых имеет по умолчанию то же имя -- ~/.history
.
Ранее говорилось о конфигурационном файле ~/.cshdirs
, но не рассказывалось о том, откуда берётся его содержимое. Так вот, в него при выходе из сеанса tcsh
записывается путь к последнему текущему каталогу -- для этого надо определить переменную
set savedirs
После этого в следующем сеансе регистрационного шелла этот каталог станет текущим при запуске.
Последняя необходимая нам переменная определяет вид первичного приглашения командной строки. Для меня удобна следующая форма:
set prompt = '%~%-> '
благодаря которой в приглашении мы видим полный путь к текущему каталогу, что избавляет от лишнего ввода команды pwd
, и сохраняем традиционный в csh
символ процента для сеанса обычного пользователя, стрелка указывает на область ввода, а пробел после неё отделяет приглашение от вводимых команд.
Напоследок остаётся только с помощью команды bindkey
code> определить назначение некоторых клавиш и клавишных комбинаций, как это сделано в прототипе нашего конфига:
bindkey "^W" backward-delete-word bindkey -k up history-search-backward bindkey -k down history-search-forward
Первая из этих строк назначит комбинации клавиш Control+W роль удалителя предшествующего курсору слова -- взамен штатной последовательности Meta+Control+H, вынужденно неуклюжей.
Содержание . .