LM 16 Cinnamon: настройка терминала

/ Просмотров: 11108

Терминал для линуксоида должен быть как необходимый инструмент для мастерового человека или личное оружие для военного: вычищен до блеска, настроен как часы, безотказен и привычен до автоматизма.

С 2010 года я пользуюсь gnome-terminal, о нем и пойдет речь (хотя, наверное, многое будет применимо и к другим функционально полноценным терминалам, вроде konsole и xfce4-terminal).

Внешний вид

Нынешний gnome-terminal, распрощавшийся со всякими зверушками и цитатами, по умолчанию лишился даже меню. Его, как и настройки, можно включить из контекстного меню по правой кнопке мыши.

Внешний вид — сугубо личное, поэтому я просто опишу здесь свои настройки и предпочтения.

Идем в "Настройки профиля", выбираем шрифт (у меня Droid Sans Mono 11), закрываем. Таскаем терминал за правый нижний угол и смотрим на циферки размера, возникающие при этом. Получив нужный результат, снова идем в "Настройки профиля" и вписываем там этот размерчик. Имейте ввиду, каждый раз при смене шрифта и/или кегля размер придется снова корректировать.

Размер терминала

Далее выбираем остальные параметры, как у меня на картинках ниже (вкладки "Заголовок и команда", "Фон" и "Совместимость" обычно оставляю как есть).

Совет:   сохраните в системный бэкап свои выстраданные настройки, например, такой командой:

gnome-terminal --save-config=/путь/к/файлу/termconfig

У меня, при наличии каталога $HOME/Backup/SysConfigs, это выглядит так:

gnome-terminal --save-config=$HOME/Backup/SysConfigs/termconfig_$(date +%d_%m_%Y)

При необходимости все настройки можно будет восстановить на другой системе одной командой:

gnome-terminal --load-config=/путь/к/файлу/termconfig

Горячие клавиши

Делаем видимым меню терминала по ПКМ, в меню "Правка → Комбинации клавиш" снимаем обе верхних галки (иначе по F10 будет не MC закрываться, а открываться меню) и меняем Скопировать/Вставить на привычные Ctrl-C и Ctrl-V:

Кейбинды терминала

Остальное — по вкусу (я предпочитаю выставить на создание вкладки более привычное Ctrl-Alt-N).

Note:   увы, кейбинды в файле настроек не сохраняются.

Поведение

1. Автодополнение

По умолчанию, при введении нескольких букв и нажатии на Tab терминал выбрасывает списком все команды, начинающиеся на введенные буквы, и опять возвращает приглашение. Это, ежу понятно, не очень-то удобно.

Чтобы по Tab терминал последовательно выводил команды и оставался в состоянии готовности выполнить команду, нужно поправить системный файл /etc/inputrc, вписав в него предпоследней строкой следующее:

TAB: menu-complete

Кроме того, очень удобна фишка, подсказанная где-то А. Федорчуком: внесение в тот же файл /etc/inputrc еще двух строк:

"\e[A": history-search-backward

"\e[B": history-search-forward

Это позволяет, набрав некую команду, стрелками "вверх" и "вниз" перелистывать ее историю.

В результате последние строки файла /etc/inputrc должны выглядеть так:

TAB: menu-complete
 
# Совет Федорчука: позволяет стрелками перебирать историю команды
"\e[A": history-search-backward
"\e[B": history-search-forward
 
$endif

Если вы не имеете доступа к правам root'a, то всё вышеописанное применимо к настройкам вашего аккаунта. В этом случае вносим описанные изменения в файл ~/.inputrc, а если такого в вашей домашней директории нет, создаём его, причём он может состоять только из вышеприведенных строк.

Кроме того, в файл ~/.bashrc нужно дописать такую секцию:

# enable bash completion in interactive shells
if [ -f /etc/bash_completion ]; then
 . /etc/bash_completion
fi

Но вообще-то о файле ~/.bashrc, одном из важнейших для нормальной жизни в системе, разговор будет отдельный.

Мне вполне достаточно таких настроек автодополнения в терминале, а если вам мало — читайте здесь, там и далее, как говорится. А также курите (может быть, в первую очередь) man readline.

2. Алиасы

2.1 Что такое алиасы и с чем их едят

Алиасы — при умеренном и обдуманном применении — вещь чрезвычайно удобная. Алиас представляет собой короткую кличку для развернутой команды. Причем если для "моно"-команд можно обходиться автодополнением, то для комбинированных, состоящих из двух и более простых, да еще с опциями, алиасы — просто находка.

Предположим, мне нужно пропинговать какой-то адрес, хотя бы гугль. И желательно при этом ограничиться пятью пакетами, а также подсветить вывод. Придется забивать ручками такую команду:

grc ping -c 5 google.com

И еще надо вспомнить опцию '-с'. Гораздо легче определить алиас:

alias ping='grc ping -c 5'

чтобы потом команда ping google.com автоматически преобразовывалась в приведенную выше grc ping -c 5 google.com.

Намного удобнее набирать в терминале 'h' вместо 'history', 'g' вместо 'gedit', 'v' вместо 'vim' и т.д.

Алиасы можно писать даже по-русски. К примеру, у меня есть скриптик для определения того, каким устройством сегодня является каждый из моих четырех жестких дисков (известно, что системе udev ничего не стоит перетасовать устройства при очередной перезагрузке).

Скрипт "disks.sh"
#!/bin/bash
# disks.sh
FDA=$(ls -l /dev/disk/by-id | grep -v part | awk '/ata-SAMSUNG/ { print $11 }' | tr -d ./)
FDB=$(ls -l /dev/disk/by-id | grep -v part | awk '/ata-WDC_WD5000AADS/ { print $11 }' | tr -d ./)
FDC=$(ls -l /dev/disk/by-id | grep -v part | awk '/ata-WDC_WD10EARS/ { print $11 }' | tr -d ./)
FDD=$(ls -l /dev/disk/by-id | grep -v part | awk '/ata-ST3120813AS_5LS05YQ6/ { print $11 }' | tr -d ./)
cat << EOF
Сегодня у нас так:
Samsung - $FDA
WD_0,5T - $FDB
WD_1T   - $FDC
Seagate - $FDD
EOF

Этот простенький скриптик лежит в директории, прописанной в переменной PATH, и называется disks.sh, но гораздо легче вспомнить и напечатать слово "диски", а это легко обеспечить таким алиасом:

alias диски='disks.sh'

2.2 Где прописывать алиасы?

Алиасы можно прописать прямо в файле ~/.bashrc, однако вряд ли это хорошая идея.

Лучше вынести их в отдельный файл ~/.bash_aliases, а в ~/.bashrc прописать следующее:

# Алиасы {{{
if [ -f ~/.bash_aliases ]; then
    . ~/.bash_aliases
fi
# }}}

При такой организации, во-первых, ~/.bashrc не перегружается дополнительными записями, а во-вторых, снижается риск его повреждения в результате случайной ошибки.

2.3 Как прописывать алиасы?

Формат и синтаксис файла ~/.bash_aliases не отличается от таковых для ~/.bashrc: закомментированные и пустые строки игнорируются интерпретатором.

В качестве примера приведу самую "эксплуатируемую" часть своего ~/.bash_aliases:

alias se='sudoedit'
alias path='echo -e ${PATH//:/\\n}'
alias as='apt show'
alias h='history'
alias ff='firefox'
alias v='vim'
alias g='gedit'
alias dmesg='dmesg | ccze -A'   # Требуется установить ccze
alias ьс='mc'                   # "Исправление" раскладки
alias св='cd'                   # "Исправление" раскладки
alias gt='gthumb'
alias gd='gdebi-gtk'
alias lastx='last -x | grep 'shutdown' | head | ccze -A'
alias rss='RSSOwl'             # Алиас на симлинк в $HOME/.bin
alias fz='filezilla'           # Алиас на симлинк в $HOME/.bin
alias mm='mplayer'
alias ping='grc ping -c 5'  # Требуется установить grc
alias a2='aria2c -c'
alias a2s='aria2c -S'        # Запустить aria2c в режиме просмотра содержимого торрент-файла

2.4 Как временно отменять алиасы?

Алиас

alias dmesg='dmesg | ccze -A'

подсвечивает вывод команды dmesg, без чего просмотр его сотен, а то и тысяч строк становится делом, мягко говоря, скучным. Однако если потребуется перенаправить вывод dmesg в файл, то при действующем алиасе мы получим жуткую кашу.

В таких случаях легко временно отменить действие алиаса, просто экранировав команду обратным слэшем вот так:

\dmesg > ~/file

2.5 Чего следует опасаться?

Скажем, захотели мы применить алиас к команде wget и, недолго думая, определили для этого букву w.

Однако прежде чем прописывать этот алиас в ~/.bash_aliases, наберите в терминале

w

и вы сильно удивитесь (если, конечно, не знали об этой команде).

Вывод, думается, очевиден: задуманные алиасы надо предварительно проверять на возможные совпадения с уже существующими командами.

Ну и, кроме того, обилие алиасов затруднит их запоминание, и они из "мнемонического костыля" начнут превращаться в дополнительный напряг для памяти...

Оставьте комментарий

Комментарий будет опубликован после проверки

(обязательно)