Книга посвящена дистрибутиву Linux Mint и одной из его главных



Скачать 21.34 Mb.
Pdf просмотр
страница14/30
Дата22.11.2016
Размер21.34 Mb.
Просмотров3376
Скачиваний0
1   ...   10   11   12   13   14   15   16   17   ...   30
Документация
Но прежде чем перейти к настройкам Zsh, надо сказать несколько слово его документации, столь расхваленной мной во вводных словах. И первое, что тут удивляет — отсутствие для его текущих версий (5.0.X) стандартных man- страниц. Раньше они были, причём во множестве собственные страницы были посвящены отдельным частям этой оболочки (опциям, параметрам, функциям etc.), а сама по себе страница man (1) zsh играла роль оглавления.
Но со временем суммарный объём документации достиг такого размера, что ей стало практически невозможно пользоваться в том режиме, в котором мы все привыкли общаться с любимой тётей Маней. И потому разработчики Zsh от страниц в составе самого пакета отказались.
Но зато, во-первых, пакет zsh и жёстко с ним связанный zsh-common сопровождается пакетом zsh-doc, который в большинстве дистрибутивов (в том числе ив) следует устанавливать отдельно. Он содержит материалы в форматах info и html общим объёмом 6 МБ, а также включает PDF- руководство на 400 страниц.
Во-вторых, Zsh сопровождается также пакетом zsh-lovers — он также устанавливается отдельно, и его компоненты после этого будут располагаться в каталоге /usr/share/doc/zsh-lovers. Он озаглавлен так Советы,
рекомендации и примеры для Z Shell. И содержит большинство тех самых страниц, которые были изъяты из основного пакета — в чисто текстовом формате или в виде gz-компрессированных файлов. А также — заявленные советы, рекомендации и примеры, созданные многочисленными применителями этой оболочки. Все они поимённо перечислены в файле. Своего рода квинтэссенцией пакета является страница man (1) zsh-lovers, в конспективной форме описывающая основные возможности этой оболочки, иллюстрируя их примерами. Собственное обзор) и начинается словами:
Каждый раз, когда мы заглядываем в руководство по Zsh, мы удивляемся,
почему там нет примеров или просто случаев из жизни в командной оболочке.
Возможностей умного, а руководства, иллюстрирующего их примерами,
нет.
Поэтому мы написали своё
руководство.

Это просто развлекухи ради.
И, надо сказать, развлекуха получилась не без пользы для нас,
применителей. Кстати, читать эту развлекуху можно также в форматах и PDF.
В-третьих, неисчислимое по объёму количество информации о е имеется в Интернете — и всё это богачество доступно по ссылкам с официальный сайт, главнейшей из которых является ссылка на zsh.sourceforge.net
. Здесь можно найти руководства поэтому шеллу на любой вкус — от «юзерофильного» до исчерпывающего, а также ссылки на книги, статьи и прочие материалы. Разбираться в этом океане я предоставляю заинтересованным (или заинтересовавшимся) читателям.
В-четвёртых, существует сайт, именуемый
Oh My ZSH!
. Это коллекция
плагинов, скриптов, конфигов и тем приглашения командной строки. Она инсталлируется на локальную машину ив дальнейшем автоматически синхронизируется с родительским сайтом, который пользуется всенародной популярностью и широкой известностью в узких кругах энтузиастов Наконец, в-пятых, официальными, полуофициальными и общенародными ресурсами информация о Zsh не исчерпывается — существует много
«неучтённых» на zsh.sourceforge.net сайтов и блогов, ведомых любителями этого шелла. И на них часто можно найти освещёние неожиданных и интересных нюансов его конфигурирования. В последние годы в их числе появились и русскоязычные ресурсы. Из последних хотелось бы отметить подборку статей на сайте Михаила Мищенкова aka muhas
).
Настройка приглашения
Как известно соврем н соврем н Константин Сергеича Станиславского,
театр начинается с вешалки, а дистрибутив — с инсталлятора. Командная же оболочка начинается с приглашения командной строки. Каковая, во-первых,
отражает готовность системы к выполнению действий применителя, а во- вторых, несёт (или должна бы нести) некую существенную для него информацию.
Правда, умолчальное приглашение Zsh информативностью не блещёт,
сообщая только имя хоста (в примерена предыдущей странице — alv-cinn), и то, что сеанс шелла запущен обычным пользователем — в отличие от Bash'а,
здесь это по умолчанию выражается символом %. Однако добавить информации нам никто не мешает. А помогает — файл zshexports.gz из пакета zsh-lovers, упомянутого в позапрошлом очерке. Его можно просмотреть командой zcat path3/zshexports.gz отыскать в нём секцию, начинающуюся словами PS{1,2,3}, RPOMPT, ..
# The "prompt" of the shell внимательно изучить е, а также фрагмент конкретных примеров Some examples:
# PS1="PS1='%B%n%b@%m:%4c>'" осмыслить прочитанное и опробованное на примерах. После чего решить,
какую же информацию вы хотите видеть в приглашении командной строки.
Я, например, не хочу видеть там имени хоста, поскольку не дожил ещё до ситуации из известного аккордеонистого бояна: Кто я, кто я Губайдулин я!»
Да и вообще, времена, когда каждая машина в сети имела собственное неповторимое имя, канули влету, и нынче так называемое «хвостнаме»
берётся от булды.
А вот имя пользователя в явном виде будет нелишним у меня на основной машине их обычно не менее трёх: рабочий, экспериментальный и умолчально-восстановительный. Также неплохо иметь представление о своём положении в файловой иерархии, причём в полном виде — одноимённые подкаталоги часто находятся в разных её ветвях. Приглашение получается перегруженным Отнюдь, потому что в Zsh таковых предусмотрено два простои, и перечисленные элементы можно разнести таким образом $=> [alv] Или наоборот, таким:
[zshuser]$=> [/home/data/current] Добиться этого можно, как вы понимаете, редактированием файла До сих пор он у нас содержал единственную строку комментария Created by newuser for 5.0.2 Теперь же добавляем в него сторки для получения приглашения первого вида Prompt
PROMPT='%
$=> '
RPROMPT=' [%n] ' Или второго Prompt
PROMPT='[%n]$=> '
RPROMPT=' [%
] ' Раньше мне больше нравился первый вариант, но ныне я перешёл на второй.
Кроме обычного, то есть левого приглашения и приглашения правого, в поддерживаются также приглашение вторичное, выводимое в многострочных командах, и третичное — предложение вариантов замены при включённой коррекции ошибок, PROMPT2 и PROMPT3, соответственно.
Вторичное приглашение у меня имеет вид
PROMPT2='%i%U> ' В результате в нём выводится номер вторичной строки в данном сеансе шелла, указывается стрелкой на то, что ввод следует в ней продолжить, асам ввод даётся подчёркнутым шрифтоначертанием. Вживе это выглядит так:
[zshuser]$=> echo $USER \ [
]
33> echo $SHELL \

34> echo $PATH zshuser echo
/bin/zsh echo
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin Что же до коррекции ошибок, у меня она отключена (к этому вопросу мы ещё вернёмся).
А вообще, как можно увидеть в файле zshexports.gz, в любом из видов приглашения командной строки могут фигурировать:

полное или сокращенное имя хост-машины; путь к текущему каталогу в различных формах номер текущей команды в буфере истории или строки в данном сеансе работы имя пользователя название командной оболочки номер виртуальной консоли или текущего терминала дата и время в разных форматах индикация работы от лица суперпользователя любые символы типа стрелок, крышечек, скобочек текстовые сообщения (например, поздравление с началом трудового процесса и многое другое. Кроме того, приглашение могут быть оформлены визуально различно:
выделением жирным шрифтом (boldface mode), инвертированием текста/фона
(standout mode), полчёркиванием (underline mode), а также цветами.
«Раскрашенный» шелл мне нравится не больше, чем «раскрашенный»
Штирлиц, инвертирование также вызывает раздражение, а вот выделение полужирным шрифтоначертанием и подчёркиванием я использую. В
результате секция настройки вида приглашения в моём
/.zshrc выглядит так Left prompt
PROMPT='%B[%n]$=>%b '
PROMPT2='%i%U> '
#
# Right prompt
RPROMPT=' %B[%
]%b '
Как уже говорилось, я не призываю к подражательству, а лишь предлагаю поэкспериментировать, чтобы добиться максимальной информативности приглашения и его внешней выразительности.
Темы приглашений
Только что речь шла о том, как оформить приглашение командной строки своими руками, в соответствие с собственными вкусами и предпочтениями. Однако можно пойти другим путём, и воспользоваться уже готовыми темами приглашений. Они входят в пакет zsh-common, который всегда, насколько я знаю, устанавливается как зависимость пакета zsh. После установки местоположение готовых тем

каталог
/usr/share/zsh/functions/Prompts.
Сами по себе темы приглашения — файлы вида представляющие собой функции Zsh, описывающие как вид приглашения, таки, часто, некоторый его декор, типа расцветки, которая может быть нескольких видов. Однако разбираться в устройстве этих функций необязательно сними можно ознакомиться визуально.
Знакомство это начинается с запуска функций управления видом приглашений autoload -U promptinit && promptinit После чего можно давать команду на смотрины невест prompt -p которая выведет их все (в моей системе — около двух десятков, плюс цветовые вариации) примерно в таком виде:
Среди невест можно видеть весьма пёстро наряженных:
Но и одетых весьма скромно также есть:
Выбрав подходящую невесту тему, её можно тут же установить командой prompt имя_темы при желании — с указанием цветовых параметров, например prompt fade white grey blue Что в живом терминальном окне (терминал Sakura) будет выглядеть так:
А в выпадающем терминале Guake — несколько иначе:
Кстати, а в голой консоли вид этой же темы будет существенно скромнее разбираться с программами для изготовления скриншотов консоли мне было лень, так что прошу поверить на слово.
Установленная таким образом тема будет функционировать только в данном терминальном окне в течении текущего сеанса. Чтобы увековечить её,
необходимо вписать в файл
/.zshrc такие строки -Uz promptinit promptinit prompt clint В примере приведена тема, пожалуй, наиболее информативного приглашения, которое вживе вылядит так:
Большое количество тем можно при желании отыскать на сайте
Oh My но эти я уже заниматься не стал.
Приёмы навигации
Сознательные граждане, активно применяющие CLI, используют множество команд, как встроенных в их любимый шелл, таки внешних. Но, думаю, что самыми употребимыми в повседневной жизни являются такие для определения своего текущего положения на файловом древе да-да, иногда, после многократных переходов между подкаталогами,
забываешь, не только кто я, но и где я (уж не в Тимирязском ли

ls — для просмотра содержимого текущего каталога

cd — для перехода в определённый каталог. Однако здесь Zsh вносит свои коррективы, здорово облегчающие жизнь его применителя. Только что было показано, как фактическим можно избавиться от команды pwd, выведя путь к текущему каталогу в качестве RPROMPT. Без команды ls, конечно, не обойтись и Zsh. А вот команда cd в Zsh просто… не нужна.
Да, дорогие мои болельщики, в среде Zsh без этой команды непросто можно обойтись, а жить куда комфортней, нежели с ней. Ведь давайте вспомним, что такое переход в каталог имярек Для типа файлов,
именуемого каталогом (directory) это тоже самое, что исполнение для обычного (ordinary) файла, будь он откомпилированным бинарником или интерпретируемым сценарием.
И потому более чем логично то, что как для запуска скрипта оболочки не требуется никакой внешней команды (хотя и не возбраняется что-нибудь типа. или /bin/sh), таки для перехода в каталог, к которому данный юзер имеет доступ (то есть попадает в число тех, для кого у этого каталога установлен бит исполнения, ему достаточно указать полный путь к нему, без всяких команд. Например, введя к командной строке что-нибудь вроде /usr/share/fonts/truetype/
можно сразу оказаться в каталоге с TTF-шрифтами.
«Бескомандный» переход в каталоги распространяется и на
«символические» обозначения последних. Так, команда переместит пользователя в его домашний каталог. Как, кстати, и команда $HOME Хотя практического смысла последний вариант не имеет. Зато директива .. волшебным образом ознаменует переход в каталог, родительский относительно текущего.
Правда, всё это происходит не само собой для практического воплощения этого волшебства в общесистемном конфиге /etc/zsh/zshrc или пользовательском
/.zshrc должна присутствовать строка setopt autocd В пару к ней можно добавить ещё и такую строку /home/current/ /home/data/) где в скобках перечислены каталоги, к подкаталогам которых чаще всего требуется быстрый доступ. И теперь, где бы в пределах файлового древа ни находился пользователь, вводим директивы Documents нечувствительно сделает текущим каталогом То есть опция autocd и массив переменных cdpath отнюдь не исключают, а прекрасно дополняют друг друга.
Автодополнение
Волшебное свойство клавиши Tab, вызывающей автодополнение — одно из первых, с чем знакомится применитель CLI. Хотя при этом часто забывается,
что когда-то, в перворождённом шелле Борна, никакого автодополнения не было. Оно появилось в Csh — и сначала только для путей, ноне для команд.
Тем не менее, ныне представить себе интерактиную работу в командной строке без автодополнения невозможно (да и не нужно).
Однако в Zsh клавиша Tab волшебна дважды она не только дополняет пути и команды после их частичного ввода, но и способна развернуть аббревиатуры для тех и других. Например, нажатие клавиши табулции после набора последовательности /u/s/f/tr развернёт её в полный путь к каталогу со шрифтами TrueType

$ /usr/share/fonts/truetype а после нажатия клавиши Enter сделает этот каталог текущим, как мы только что видели.
Правда, само по себе развёртывание аббревиатур работать не будет — его надо активизировать такими строками в файле
/.zshrc:
autoload -Uz compinit compinit Можно пойти дальше, и непросто разворачивать безальтернативные аббревиатуры, типа приведённый выше, но и выбирать стрелками, как в меню,
подкаталги или файлы среди предлагаемый альтернатив. Например, если набрать туже самую последовательность символов /u/s/f/tr а затем дважды нажать клавишу табуляции, то она не только развернётся в полный путь /usr/share/fonts/truetype/ но и выведет список подкаталогов указанного каталога freefont/ openoffice/ ubuntu-font-family/ droid/ liberation/ ttf-dejavu/ wqy/ И выбор нужного среди них можно выполнять либо стрелками управления курсором, либо обычными кейбиндингами типа Control+f, Control+b и им подобными:
Правда, и такая реакция Zsh на Tab возникает не из воздуха, а из присутстствия в файле
/.zshrc таких строк:
setopt menucomplete zstyle ':completion:*' menu select=1 _complete _ignored _approximate По умолчанию их там нет, а вот стоит ли их вносить — применитель должен решить для себя сам — перебор вариантов традиционным способом, то есть последовательным нажатием клавиши табулции, может показаться более удобным.
История команд
Возможность просмотра истории введённых ранее команд клавишами кажется таким же неотъемлемым атрибутом CLI, как и автодополнение командной строки. И, как и последнее, напрочь отсутствовало в перворождённом шелле Борна, однако ныне имеется во всеш развитых шеллах. Причём доступ к истории команд в них не ограничивается командой history и упомянутыми стрелками. В частности, в Bash широко практикуется инкрементный поиск по клавишной последовательности и вводу последовательности символов одной из предыдущих команд или её аргументов.
В tcsh же испокон веков существовала (и, что характерно, обычно была активирована по умолчанию) другая возможность — так называемый history- substring-search, то есть инкрементный перебор истории команд по вводимым символам. Что это такое — проще пояснить на примере вы вводите в командной строке один символ (для примера — s) и нажимаете клавишу Up. И
тут в перебор включаются только те команды из истории, которые с буковки s начинаются. Вводя дополнительные символы, можно сузить круг поиска:
например, последовательность sudo позволяет просмотреть, что было наколбасино от лица суперпользователя вообще.
Поскольку Zsh изначально задумывалась как синтез всех передовых достижений шелло-строительной мысли, аналогичная возможность имеется и здесь. Правда, как и многие другие продвинутые фичи этой оболочки, она требует активации. То есть — внесения в файл
/.zshrc таких строк "^[[A" up-line-or-search bindkey "^[[B" down-line-or-search Как выяснилось, надо подчеркнуть перебори инкрементный поиск по Control+R отнюдь не исключают друг друга, а дополняют первым способом проще искать ранее введённые директивы по имени команды, вторым — по её аргументам, например, по имени файла.
Справедливости ради надо сказать, что history-substring-search нынче реализован ив, хотя, как ив, требует активации.
Опытный применитель Zsh, не имевший ранее дела сие производными (в том числе и сом, будет весьма удивлён тем обстоятельством, что эта фича (по моему мнению, одна из самых полезных среди всех достоинств нашей героини, с кондачка работать не будет. Даже при условии правильно настроенного конфига — привнес нных в него строках, указанных выше. Точнее, не будет делать это в окне любого иксового эмулятора терминала, хотя не откажется от выполнения history-substring- search в голой консоли. Причём интересно, что это же касается и Bash, хотя
в Tcsh данная фича будет работать «искаропки».
Следствие, проведённое в Джуйке и благодаря участию джуковца
@altwazar'а, показало, что это давний известный баг, восходящий к Debian'у,
знаменитому своей стабильностью во всех отношениях (в том числе ив отношении багов, вероятно. И бороться с этим можно различными методами.
Мне самым простым показался такой создание в домашнем каталоге файла с единственной строкой Разумеется, на поведение Bash это никак не скажется в нём history- substring-search включается не через его профильный файла через inputrc —
конфиг для readline. Как именно — оставляю на рассмотрение преданных поклонников этой оболочки.
Разумеется, возможности настройки доступа к истории команд всем сказанным выше не исчерпываются имеет место быть и исключение из неё
дубликатов, и пустых строки прочего баласта, а также подключения некоторых полезных фич, вроде ограничения общей истории и истории текущего сеанса. А также — дополнения файла истории. Однако ничего особенного, специфичного именно для Zsh, тут уже нет. Так что к рассмотрению этих вопросов я вернусь под занавес — когда буду говорить о для себя, любимого...
Рекурсивный поиск
Все применители CLI знают и любят утилиту find — и любят заслуженно, ибо это апофеоз командного интерфейса се помощью можно отыскать в файловой системе всё, что угодно — и почти всё, что нужно, с найденным сделать, конечно, с помощью некоторых дополнительных средств, вроде xargs и конвейеров. Однако для многих рутинных задач мощь этой команды кажется излишней, напоминая знаменитое упражнение по отстрелу мелких пернатых их зенитно-ракетных комплексов. И вот тут Zsh опять позволяет решать такие задачи малой кровью — то есть с минимальным ударением по клавишам. Ибо поддерживает такую штуку, как рекурсивные поиск.
Что это такое — как обычно, проще показать, чем рассказать.
Предположим, перед применителем стоит задача отыскать все картинки в каталоге некоего проекта, включая все вложенные в него подкаталоги.
Средствами Zsh сделать это очень просто — достаточно дать команду ls path3/**/*.png где path3, как нетрудно догадаться, корневой каталог поиска, *.png маска искомых файлов, а «двузвёздие» — так сказать, директива рекурсивного поиска.
Правда, вопреки утверждениям некоторых уж очень правоверных Zsh'истов,
эта возможность не делает команду find избыточной, ибо, как все знают, она умеет и многое другое. Но зато такая простая директива позволяет не беспокоить Её Величество по пустякам...
А заодно — конструкции вида **/* можно использовать как аргументы команд управления файлами, таких, как cp, mv, rm. В частности, с помощью команды вида

$ rm -f можно легко гуртом избавиться от всех временных копий, которые по умолчанию так любят сохранять некоторые текстовые редакторы и ворд- процессоры, если им не запретить это самым категорическим образом.
Разумеется, можно фильтровать базар. Давеча в приступе чёрной меланхолии переслушивал я всё, что сочинили спел Фред Солянов — увы,
большинство моих потенциальных читателей о его существовании не подозревают в отличе от многих всенародно известных так называемых
«бардов», он не был популярен при жизни. А когда его верхние люди позвали люди нижние про него забыли напрочь. И зря — но это из совсем другой оперы. А в нынешней арии мне было интересно, сколько же Фред сочинил песен за ту четверть чека, что ему отпустила на то судьба. И я дал очень простую команду ls path3/fred/**/*.mp3 | wc -l Иона мне сказала, что сочинил Фред 168 песен. Откидываем дубликаты,
неизбежные в любой коллекции — но здесь их очень мало, на штуки счёт.
Откинем откровенно слабые песенки — ведь даже гений не каждое утро начинает с сочинения чего-то шедеврального. Откинем песенки вторичные Фред никогда не претендовал на основоположничество, ив отличе от некоторых более иных авторов, на которых я не хотел бы указывать пальцем,
не считал для себя западло называть своего реального учителя в ентом деле,
Булат Шавловича...
Для себя откину те песенки, которые лично меня не очень зацепили — их,
по сравнению с прочими фильтрами, больше всего, почти полсотни.
Остаётся - около ста песен. За двадцать пять лет. Мало по сравнению с раннеперестроечными сборниками типа Шестьсот лучших песен имярека Да, немного. Но ведь (и это мнение не только моа тысяч людей с такими же биографиями) эти песни стали, как нынче принято говорить, культовыми.
Ну, дальше на эту тему распространяться не буду, а вернусь к генеральной линии сюжета. А именно — что маски типа можно использовать в аргументах команды grep и для поиска фрагментов текстов. Так, команда grep KDE **/*html выведет все строки с упоминанием KDE в файлах каталога текущего и вложенных. А в форме grep -i kde **/kde*.html она произведёт аналогичный поиск только в файлах вида kde01.html,
kde02.html итак далее. Причём без учёта регистра — но к мадемуазель интересы которой я представляю в данный момент, это не имеет никакого отношения.
Перенаправление расширенное и множественное
Что такое перенаправление ввода/вывода — знают все применители Однако в Zsh возможности его очень широки, почему оно и называется здесь
расширенным перенаправлением. Этот механизм позволяет в ряде случаев обходиться без некоторых команд вообще. Например, обычно для просмотра текстового файла применяют или команду cat, или команды-пейджеры типа more, less, most. Выбор между конкатенатором и одним из пейджеров определяется ситуацией, выбор внутри тройки по борьбе с басмачами файлами зависит от привычек или предпочтений. Однако Zsh может избавить применителя от мук буриданова осла, подменяя любую из этих команд оператором перенаправления в виде команды < filename
Результатом чего будет постраничный вывод содержимого файла,
подобный таковому любого пейджера.
С помощью того же оператора можно просмотреть одновременно содержимое двух файлов — то есть, конечно, не одновременно, а последовательно, но в едином потоке. То есть команда
$ < {zshenv,zshrc} покажет оба файла как одно целое. Причём в данном случае можно поступить ещё проще, ибо маски имён файлов также не возбраняются:
$ < z*
Кстати, в терминах Zsh развёртывание масок имён файлов называется globbing — с ним мы уже сталкивались в рассказе о рекурсивном поиске.
Число «оперируемых» файлов ничем не ограничено, кроме здравого смысла и целесообразности. Так, есть резон проглядеть таким образом на скорую руку, как будут выглядеть 5-6 заметок по несколько строк каждая, если их объединить в одну статью. Но просматривать с помощью оператора перенаправления книжку, состоящую из пары десятков глав по много страниц каждая, уже явный перебор.
Однако бывают случаи, когда большое число «оперируемых» файлов очень даже уместно. Например, если требуется объединить ряд текстовых фрагментов в единый файл. И тогда, легким движением рук набрав в командной строке конструкцию
$ < chapter[01-10] > mybook мы на выходе из разрозненных глав получаем готовую книгу.
Таким образом мы перешли уже к множественному перенаправлению.
Применение которого просмотром файлов не исчерпывается — их содержимое может быть перенаправлено не только на стандартный вывод, но и на ввод какой-либо команды, подменяя командный конвейер. Например, конструкция вида sort < file_{1,2} совместно отсортирует строки обоих файлов, file_1 и file_2, точно так же,
как это сделал бы конвейер команд
$ cat file_1 file_2 | sort
Кстати, перенаправление вполне может играть с конвейерами водной команде. Например, конструкция вида time commandname [options] [arguments] > filename | cat занесёт время выполнения некоей команды в файл с одновременным выводом его на экран, заменяя команду tee. Это особенно полезно при всяких
«тестированиях на быстродействие, когда надои сохранить результат для дальнейшей обработки, и не терпится посмотреть на него сразу.
Множественное перенаправление удобно использовать для суммарного подсчёта числа символов в нескольких файлах таким образом wc -m <*txt
Что на выводе даст единственное число, например:
5382
Казалось бы, та же команда в «обычной» форме даже короче на один символ:
$ wc -m *txt
Однако вывод её будет развёрнут:
2820 my_file_1.txt
606 my_file_2.txt
401 my_file_3.txt
1555 my_file_4.txt
5382 итого
Что при работе во встроенных терминальных окнах текстовых редакторов вроде Geany или Kate , часто небольших по размеру может оказаться лишним.
А ведь именно там приёмы, подобные описанным в этом разделе, оказываются весьма эффективными.
В общем, уже за одну только конструкцию < filename разработчики Zsh заслужили памятник, а все остальные возможности расширенного и множественного перенаправления выступают как бесплатное приложение к ней.

Каталог: wp-content -> uploads -> 2016
2016 -> Государственное областное бюджетное
2016 -> В. П. Зинченко писал о том, что если человек в детстве не дополучил некую норму участия в игровом времяпрепровождении, он приобретает социально-психологическую ущербность вроде «игровой дистрофии», которую в последу
2016 -> Общешкольное родительское собрание «Об ответственности родителей за воспитание детей»
2016 -> 1 июня 2016 года Международный день защиты детей 1 июня
2016 -> «Формирование социально-нравственной позиции дошкольников посредством введения сказочных сюжетов в компьютерные дидактические игры»
2016 -> Принята Утверждена
2016 -> Конкурс по разработке компьютерных игр патриотической направленности «патриот by»


Поделитесь с Вашими друзьями:
1   ...   10   11   12   13   14   15   16   17   ...   30


База данных защищена авторским правом ©nethash.ru 2019
обратиться к администрации

войти | регистрация
    Главная страница


загрузить материал