Persistent ZSH aliases (в bash тоже можно :)


FrBrGeorge - Posted on 01 Май 2009

Три уровня реальности.

Нулевой. В незапамятные времена я вынес определение aliases из .zshrc в другой файл, .zsh_aliases. Это разгрузило и без того тучный .zshrc, в котором остался только вызов

if [[ -f $ZDOTDIR/.zsh_aliases ]] { . $ZDOTDIR/.zsh_aliases; }

Первый. Теперь .zsh_aliases можно обрабатывать автоматически! Допустим, я по ходу работы придумал полезный alias. Но вот отвлекаться для редактирования .zsh_aliases не хочется. Что за беда? сделал alias с именем mkalias:

mkalias='alias | grep -v "='\''LC_ALL" | sed "s/^/alias /" > ~/.zsh_aliases'

Теперь зафиксировать сделанные в списке alias-ов изменения можно одной командой. И даже вставить её в .zlogout, чтобы управиться с задачей за 0 команд :).

Второй. А что это за "grep" такой лишний в mkalias? А это вот что. Есть несклько команд, которые я хочу запускать не в кодировке по умолчанию, а в другой. Например, man-ы хочу читать по-английски. Или GTK1-программы -- в кодировке всегда KOI8-R. Или, наоборот, stardict-gtk всегда в кодировке UTF-8. Помогает проставить LC_ALL: LC_ALL=соответств_кодировка команда, но лучше это превратить в alias. Вот у меня и заведены файлы .locale.кодировка, которые читаются из .zshrc так:

# alias some LC_ALL changes when running command
for N ($ZDOTDIR/.locale.*) {
  T="${N##*.locale.}"
  for F (`cat $N`) alias "$F"="LC_ALL=$T $F"
} || :

Так что строчки с '="LC_ALL' запоминать не надо, они генерируются. Отсюда и grep -v в mkalias. Более того, .zshrc и .zsh_aliases у меня на всех машинах одинаковые (и на Linux разных конфессий, и на FreeBSD разных версий). А вот .locale.* -- везде разный, т. к. на некоторых машинах по умолчанию стоит одна кодировка, на некоторых -- другая, там одни программы капризничают, тут другие.

Каким способом .zshrc и .zsh_aliases у меня на всех машинах получаются одинаковые? А это к alias-ам отношения не имеет.

5
Ваша оценка: Ничего Рейтинг: 5 (1 vote)

спасибо, полезные наработки. надо будет применить.

предолжения к улучшениям (раз уж у нас zsh и sed Ж:-)

[[ -f $ZDOTDIR/.zsh_aliases ]] && . $ZDOTDIR/.zsh_aliases
mkalias='alias | sed "/='\''LC_ALL/d;s/^/alias /" >| ~/.zsh_aliases'
for N ($ZDOTDIR/.locale.*(N)) for F ($(<$N)) alias $F="LC_ALL=${N##*.locale.} $F"

В самом деле, и grep там не нужен, и скобочки не нужны. А вот Glob Qualifiers я выключаю, после того, как налетел на файлы с соответствующими именами.

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

Google Friend Connect (leave a quick comment)
loading...
Содержание этого поля является приватным и не предназначено к показу.